Kobler til nettverksressurser med bruk av en component

Helt mistet en nettverks aksje og ikke vet hvordan du kobler til det? Godt med denne komponenten kan du søke på nettverket etter en bestemt aksje som inneholder en fil eller en mappe og automatisk kobles til det . Merk: Hvis du allerede kjenner plasseringen av AKSJE Du bør ikke bruke denne komponenten AS i store nettverk vil bli langsom. DETTE ER BARE HVIS DU IKKE VET den nøyaktige plasseringen MEN kan finne den ved hjelp av en MARKER for eksempel en bestemt fil eller FOLDER.TIP: Bruk BeforeConnect hendelse for å angi om en tilkobling bør made.unit Koble; interfaceuses Windows, Meldinger , StdCtrls, SysUtils, klasser, Grafikk, Kontroller, skjemaer, Dialoger, FileCtrl -typen TSIsType = (itDir, itIniFile, itApp, itOther); TBeforeConnectEvent = prosedyre (Eier: TObject; AssignPath: string; Var Godta: boolsk) objekt; TAfterConnectEvent = prosedyre (Eier: TObject; AssignedPath: string) objekt; TOnFail = prosedyre (Eier: TObject; FailMessage: string) objekt; TReconnect = klasse (TComponent) private {felleserklæringer} DidAssign: boolean; FItemToLookFor: String; FUserName: String; FPassword: String; FLetterToAssign: Char; FIsType: TSIsType; FOutputLabel: TLabel; FFailMessage: String; FBeforeConnect: TBeforeConnectEvent; FAfterConnect: TAfterConnectEvent; FOnFail: TOnFail; funksjon DoEnum (NetResT: PNetResourceA): integer; funksjons addbs (g: string): string; OVERBELASTNINGS; funksjons addbs (g: string; SLASH: CHAR): string; OVERBELASTNINGS; funksjon SearchFor (NetResT: NETRESOURCE, Path, param: string): boolean; beskyttet {Beskyttede erklæringer} public {offentlige erklæringer} publiserte {Publisert erklæringer} funksjon SearchAndAssign: boolean; Eiendommen ItemToLookFor: String lese FItemToLookFor skrive FItemToLookFor; Eiendommen LetterToAssign: Char lese FLetterToAssign skrive FLetterToAssign; Eiendommen IsType: TSIsType lese FIsType skrive FIsType standard itDir; Eiendommen OutputLabel: TLabel lese FOutputLabel skrive FOutputLabel; Eiendommen Name: String lese FUserName skrive FUserName; Eiendommen Passord: String lese FPassword skrive FPassword; Eiendommen BeforeConnect: TBeforeConnectEvent lese FBeforeConnect skrive FBeforeConnect; Eiendommen AfterConnect: TAfterConnectEvent lese FAfterConnect skrive FAfterConnect; Eiendommen OnFail: TOnFail lese FOnFail skrive FOnFail; enden, prosedyre Registrer; implementationFunction TReconnect.addbs (g: string; SLASH: CHAR): string; begynne g: = trim (g); hvis g < > '' da begynne hvis g [lengde (g)] < > Slash da resultere: = g + SLASH annet resultat: = g; ende annet resultat: = g; ende, funksjons TReconnect.addbs (g: string): string; beginresult: = addbs (g, '\\'); ende; funksjon TReconnect.SearchFor (NetResT: NETRESOURCE, Path, param: string) : boolean; Var forts: boolean; Finnes: boolean, begynner finnes: = false; Sti: = addbs (bane); SearchFor: = false; hvis IsType = itDir så finnes: = directoryExists (bane + param); hvis IsType = itIniFile så finnes: = FileExists (bane + param); hvis IsType = itApp så finnes: = FileExists (bane + param); hvis IsType = itOther så finnes: = FileExists (bane + param); Dersom det finnes da begynne forts: = true; prøve hvis tildelt (FBeforeConnect) da BeforeConnect (selv, bane, forts); bortsett showmessage ('Kunne ikke kalle BeforeConnect.'); slutt; hvis forts deretter begynne prøve NetResT.lpLocalName: = pchar (string (FLetterToAssign) + ':'); WNetAddConnection2A (NetResT, pchar (brukernavn), pchar (Passord), CONNECT_UPDATE_PROFILE); DidAssign: = true; prøve hvis tildelt (FAfterConnect) da AfterConnect (selv, bane); bortsett showmessage ('Kunne ikke kalle AfterConnect.'); slutt; unntatt på E: Exception gjøre Showmessage (E.Message); slutt; SearchFor: = true; slutt; end, end, funksjon TReconnect.DoEnum (NetResT: PNetResourceA): integer; Var EnumH: THandle; cnt: kardinal; buffsize: kardinal; NetResBuf: array [0..200] av NETRESOURCE; res: ord; jeg: integer; begynne hvis DidAssign og avslutter; prøv cnt: = 255; WNetOpenEnum (RESOURCE_GLOBALNET, RESOURCETYPE_DISK, 0, NetResT, EnumH); res: = 0; while (res = NO_ERROR) gjør begynne buffsize: = sizeof (NetResBuf); res: = WNetEnumResource (EnumH, CNT, @ NetResBuf, buffsize); for i: = 0 til cnt-en ikke starter hvis Assigned (OutputLabel) da begynne OutputLabel.Caption: = NetResBuf [i] .lpRemoteName; OutputLabel.Refresh; slutt; hvis NetResBuf [i] .dwDisplayType = RESOURCEDISPLAYTYPE_SHARE deretter begynne hvis ikke DidAssign så hvis SearchFor (NetResBuf [i], string (NetResBuf [i] .lpRemoteName), ItemToLookFor) da begynne resultat: = 0; gå; slutt; slutt; if (NetResBuf [i] .dwScope = RESOURCEUSAGE_CONTAINER) så doEnum (NetResBuf [i]); slutt; slutt; WNetCloseEnum (EnumH); Resultatet: = 1; unntatt på E: Exception gjør begynne FFailMessage: = E.Message; hvis Assigned (FOnFail) da OnFail (Eier, FFailMessage); Resultatet: = 0; slutt; end, end, funksjon TReconnect.SearchAndAssign: boolean, begynner DidAssign: = false; DoEnum (null); Resultatet:. = true; ende; prosedyre Registrer; begynne RegisterComponents ('VNPVcls', [TReconnect]); end; end Anmeldelser



Previous:
Next Page: