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 wie Hardware (HID) erkennen und via Programm verbinden/trennen? (https://www.delphipraxis.net/155173-wie-hardware-hid-erkennen-und-via-programm-verbinden-trennen.html)

Assarbad 13. Nov 2010 15:03

AW: wie Hardware (HID) erkennen und via Programm verbinden/trennen?
 
Okay, bleib mal locker. Alle diese Funktionen sind üblicherweise Frontends zu den IOCTLs.

Haste mal mit ZwDeviceIoControlFile probiert? Wenn ja, was sind die Ergebnisse im IoStatusBlock?!

himitsu 13. Nov 2010 15:31

AW: wie Hardware (HID) erkennen und via Programm verbinden/trennen?
 
So, hab's versucht.

Zitat:

Im Projekt HIDTest.exe ist eine Exception der Klasse EJwaLoadLibraryError mit der Meldung 'Library not found: ntdll.dll' aufgetreten.
OK, die JwaWinType ist nicht wirklich Unicode-fähig.

Und nun wo das Unicode angepaßt wurde, heißt es Result (NTSTATUS) = 0, IoStatusBlock bleibt leer und GetLastError meint
Zitat:

Im Projekt HIDTest.exe ist eine Exception der Klasse EOSError mit der Meldung 'Ein Aufruf einer Betriebssystemfunktion ist fehlgeschlagen' aufgetreten.

Delphi-Quellcode:
W := ZwDeviceIoControlFile(H, 0, nil, nil, @IOSB, IOCTL_HID_DEACTIVATE_DEVICE,
  nil, 0, nil, 0);

// oder

W := ZwDeviceIoControlFile(H, 0, nil, nil, @IOSB, IOCTL_HID_DEACTIVATE_DEVICE,
  @X, SizeOf(X), nil, 0);
Wobei ich halb immernoch nicht weiß, was man als X genau angeben muß.

Dezipaitor 13. Nov 2010 15:41

AW: wie Hardware (HID) erkennen und via Programm verbinden/trennen?
 
Was hat das mit Unicode zu tun und warum gerade JwaWinType?

Du hast kaum Ahnung, wie man die API benutzt und meinst aber, dass die Übersetzung schuld sei?

Assarbad 13. Nov 2010 15:44

AW: wie Hardware (HID) erkennen und via Programm verbinden/trennen?
 
Ups, tut mir leid. Habe dich ohnehin auf die falsche Fährte geführt. MSDN-Library durchsuchenIOCTL_HID_DEACTIVATE_DEVICE erfordert Type3InputBuffer und dieser ist nur vom Kernelmode aus zugreifbar (zumindest Type3InputBuffer). Ohne extra Treiber kann man das also ohnehin nicht realisieren - zumindest nicht mit diesem IOCTL.

Sorry :oops:

himitsu 13. Nov 2010 15:50

AW: wie Hardware (HID) erkennen und via Programm verbinden/trennen?
 
Weil ich grade diese Units hier rumliegen hatte?
Nja, als ich Letztens nach einigen APIs gesucht hatte, war ich darüber gestolpert und hatte es runtergeladen.

Das ZwDeviceIoControlFile wird vom JWA dynamisch geladen, was allerdings nicht klappte.
Delphi-Quellcode:
// unit Windows
type
  LPWSTR = PWideChar;

// unit JwaWinType
type
  LPTSTR = {$IFDEF USE_DELPHI_TYPES} Windows.LPWSTR {$ELSE} LPWSTR {$ENDIF};
  LPCTSTR = LPTSTR;
function GetModuleHandle(lpModuleName: LPCTSTR): HMODULE; stdcall;
function LoadLibrary(lpLibFileName: LPCTSTR): HMODULE; stdcall;

function GetModuleHandle; external kernel32 name 'GetModuleHandleA';
function LoadLibrary; external kernel32 name 'LoadLibraryA';
Also Unicode ... nja, es ist als PWideChar deklariert, aber es wurden die Ansi-APIs aufgerufen. :stupid:
Nach W geändert und schon wurde die DLL und die Prozedur gefunden.


Eigentlich hab ich meine paar APIs selber deklariert,
aber da die Delphi-Suche (Strg+Shift+F) vorhin meinte, diese API sei darin vorhanden, hab ich es zu Testen halt einfach mal daraus aufgerufen.
Sonst nutzte ich dieses JWA eigentlich nicht direkt.



[add]
'ne Deklaration des Type3InputBuffer hatte ich eh noch nicht gefunden. :oops:
Aber ich sagte ja ... wenn ich Pech hab, dann haben diese APIs eh nur was mit diesen Miniport-Treibern zu tun.

Dezipaitor 13. Nov 2010 15:54

AW: wie Hardware (HID) erkennen und via Programm verbinden/trennen?
 
Zitat:

Zitat von himitsu (Beitrag 1061271)
Weil ich grade diese Units hier rumliegen hatte?
Nja, als ich Letztens nach einigen APIs gesucht hatte, war ich darüber gestolpert und hatte es runtergeladen.

Ah ok, mir dämmerts. Wo hast du die her?

himitsu 13. Nov 2010 16:05

AW: wie Hardware (HID) erkennen und via Programm verbinden/trennen?
 
Zitat:

Zitat von Dezipaitor (Beitrag 1061272)
Ah ok, mir dämmerts. Wo hast du die her?

Ich glaub Google hatte mich dahin geleitet.
http://jedi-apilib.sourceforge.net/

Hab hier kein Windows PSDK drauf und da man z.B. abundzu mal irgendwelche Konstanten benötigt, von welchen im MSDN nicht immer der Wert erwähnt wird, muß man halt wo anders suchen ... u.A. auch dort drin und bis jetzt war es schon eine recht gute Quelle. (wobei ich diese Units noch nie wirklich direkt eingebunden hatte)

Dezipaitor 13. Nov 2010 16:29

AW: wie Hardware (HID) erkennen und via Programm verbinden/trennen?
 
Die Downloads auf dieser Seite sind nicht bestimmt in neuen Programmen eingesetzt zu werden. Sie sind alt und werden nicht gepflegt.
Das steht da auch übrigens:
Zitat:

This download is updated very seldom. Please use the main JEDI API headers.

Benutze stattdessen:
http://sourceforge.net/projects/jedi-apilib

EDIT:

Ich hab den alten Link mal angepasst, damit da niemand in Versuchung gerät.

Assarbad 23. Nov 2010 20:25

AW: wie Hardware (HID) erkennen und via Programm verbinden/trennen?
 
Weil's mir gerade untergekommen ist MSDN-Library durchsuchenSetupDiRestartDevices könnte noch einen Blick wert sein, oder?


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

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