Mega Code Archive

 
Categories / Delphi / LAN Web TCP
 

How to map a network drive (2)

Title: How to map a network drive (2) function ConnectDrive(_drvLetter: string; _netPath: string; _showError: Boolean; _reconnect: Boolean): DWORD; var nRes: TNetResource; errCode: DWORD; dwFlags: DWORD; begin { Fill NetRessource with #0 to provide uninitialized values } FillChar(NRes, SizeOf(NRes), #0); nRes.dwType := RESOURCETYPE_DISK; { Set Driveletter and Networkpath } nRes.lpLocalName := PChar(_drvLetter); nRes.lpRemoteName := PChar(_netPath); { Example: \\Test\C } { Check if it should be saved for use after restart and set flags } if _reconnect then dwFlags := CONNECT_UPDATE_PROFILE and CONNECT_INTERACTIVE else dwFlags := CONNECT_INTERACTIVE; errCode := WNetAddConnection3(Form1.Handle, nRes, nil, nil, dwFlags); { Show Errormessage, if flag is set } if (errCode NO_ERROR) and (_showError) then begin Application.MessageBox(PChar('An error occured while connecting:' + #13#10 + SysErrorMessage(GetLastError)), 'Error while connecting!', MB_OK); end; Result := errCode; { NO_ERROR } end; function ConnectPrinterDevice(_lptPort: string; _netPath: string; _showError: Boolean; _reconnect: Boolean): DWORD; var nRes: TNetResource; errCode: DWORD; dwFlags: DWORD; begin { Fill NetRessource with #0 to provide uninitialized values } FillChar(NRes, SizeOf(NRes), #0); nRes.dwType := RESOURCETYPE_PRINT; { Set Printername and Networkpath } nRes.lpLocalName := PChar(_lptPort); nRes.lpRemoteName := PChar(_netPath); { Example: \\Test\Printer1 } { Check if it should be saved for use after restart and set flags } if _reconnect then dwFlags := CONNECT_UPDATE_PROFILE and CONNECT_INTERACTIVE else dwFlags := CONNECT_INTERACTIVE; errCode := WNetAddConnection3(Form1.Handle, nRes, nil, nil, dwFlags); { Show Errormessage, if flag is set } if (errCode NO_ERROR) and (_showError) then begin Application.MessageBox(PChar('An error occured while connecting:' + #13#10 + SysErrorMessage(GetLastError)), 'Error while connecting!', MB_OK); end; Result := errCode; { NO_ERROR } end; function DisconnectNetDrive(_locDrive: string; _showError: Boolean; _force: Boolean; _save: Boolean): DWORD; var dwFlags: DWORD; errCode: DWORD; begin { Set dwFlags, if necessary } if _save then dwFlags := CONNECT_UPDATE_PROFILE else dwFlags := 0; { Cancel the connection see also at http://www.swissdelphicenter.ch/en/showcode.php?id=391 } errCode := WNetCancelConnection2(PChar(_locDrive), dwFlags, _force); { Show Errormessage, if flag is set } if (errCode NO_ERROR) and (_showError) then begin Application.MessageBox(PChar('An error occured while disconnecting:' + #13#10 + SysErrorMessage(GetLastError)), 'Error while disconnecting', MB_OK); end; Result := errCode; { NO_ERROR } end; Usage Example: procedure TForm1.Button1Click(Sender: TObject); begin ConnectDrive('h:', '\\Servername\C', True, True); end; procedure TForm1.Button2Click(Sender: TObject); begin DisconnectNetDrive('h:', True, True, True); end;