Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Über alle USB Anschlüsse iterieren, um ein bestimmtes Gerät zu finden (https://www.delphipraxis.net/175863-ueber-alle-usb-anschluesse-iterieren-um-ein-bestimmtes-geraet-zu-finden.html)

musicman56 25. Jul 2013 12:07

AW: Über alle USB Anschlüsse iterieren, um ein bestimmtes Gerät zu finden
 
Hallo,

in XE2 ist die Funktion wesentlich umfangreicher.

Delphi-Quellcode:
function DirectoryExists(const Directory: string; FollowLink: Boolean = True): Boolean;
{$IFDEF MSWINDOWS}
var
  Code: Cardinal;
  Handle: THandle;
  LastError: Cardinal;
begin
  Result := False;
  Code := GetFileAttributes(PChar(Directory));

  if Code <> INVALID_FILE_ATTRIBUTES then
  begin
    if faSymLink and Code = 0 then
      Result := faDirectory and Code <> 0
    else
    begin
      if FollowLink then
      begin
        Handle := CreateFile(PChar(Directory), GENERIC_READ, FILE_SHARE_READ, nil,
          OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
        if Handle <> INVALID_HANDLE_VALUE then
        begin
          CloseHandle(Handle);
          Result := faDirectory and Code <> 0;
        end;
      end
      else if faDirectory and Code <> 0 then
        Result := True
      else
      begin
        Handle := CreateFile(PChar(Directory), GENERIC_READ, FILE_SHARE_READ, nil,
          OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
        if Handle <> INVALID_HANDLE_VALUE then
        begin
          CloseHandle(Handle);
          Result := False;
        end
        else
          Result := True;
      end;
    end;
  end
  else
  begin
    LastError := GetLastError;
    Result := (LastError <> ERROR_FILE_NOT_FOUND) and
      (LastError <> ERROR_PATH_NOT_FOUND) and
      (LastError <> ERROR_INVALID_NAME) and
      (LastError <> ERROR_BAD_NETPATH);
  end;
end;
{$ENDIF MSWINDOWS}
Weil's mir keine Ruhe gelassen hat, habe ich in der Zwischenzeit unter Win8 mit verschiedenen Usern und UAC-Einstellungen getestet, und keine Probleme feststellen können.

Wenn sich der Unterschied bewahrheiten sollte, wäre das ein klassisches Argument für den Wechsel auf eine aktuelle(re) Delphi-Version ????

hathor 25. Jul 2013 14:40

AW: Über alle USB Anschlüsse iterieren, um ein bestimmtes Gerät zu finden
 
Ich habe den Grund jetzt gefunden:
Bei der Version FileDirExists reicht die Directory-Angabe,
bei DirectoryExists muss noch der Laufwerksbuchstabe etc. vorangestellt werden.

Delphi-Quellcode:
Function FindGPS3: String;
var dirName: String; i : Integer;
begin
dirName:= 'F-Hathor'; //Dir, das sonst nirgendwo existiert ausser im GPS-Empfänger
Result:='GPS-Empfänger NICHT gefunden.';
  for i:=0 to 25 do
    begin
      if DriveExists(i) then
     if DirectoryExists(PChar(Chr(i + Ord('A')) + ':\')+dirName) then //geht nur so!
        begin
          Result:= 'GPS-Empfänger gefunden bei '+ PChar(Chr(i + Ord('A')) + ':\');
        end;
    end;
    Form1.Label1.caption:=Result;
end;

musicman56 25. Jul 2013 16:50

AW: Über alle USB Anschlüsse iterieren, um ein bestimmtes Gerät zu finden
 
Sind wir wieder etwas schlauer :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz