![]() |
WM_DEVICECHANGE, DBT_DEVTYP_PORT: Portnamen rausbekommen.
Hallo,
ich versuche gerade über die WM_DEVICECHANGE Message herauszubekommen, ob ein neuer Com Port von einem USB Barcodescanner im System angelegt/gelöscht wird. Das funktioniert soweit ganz gut. Nun möchte ich noch den Namen des Ports wissen und da scheitert es an meinen API Kenntnissen. Die Struktur zum Auslesen der Information hab ich schon in Jedi gefunden (DBT.pas):
Delphi-Quellcode:
Das Auslesen mache ich über:PDevBroadCastPortA = ^TDevBroadCastPortA; DEV_BROADCAST_PORT_A = record dbcp_size: DWORD; dbcp_devicetype: DWORD; dbcp_reserved: DWORD; dbcp_name: array [0..0] of AnsiChar; end; TDevBroadCastPortA = DEV_BROADCAST_PORT_A;
Delphi-Quellcode:
Ich weiß nicht, wie ich mit dem dhcp_name umgehen soll, laut
PDevBroadcastPortA(Msg.LParam)^.dbcp_name
![]() Wie komme ich jetzt bloss an den kompletten String? Gruß, |
Re: WM_DEVICECHANGE, DBT_DEVTYP_PORT: Portnamen rausbekommen
Kann mir da echt keiner helfen?
|
Re: WM_DEVICECHANGE, DBT_DEVTYP_PORT: Portnamen rausbekommen
Und wenn Du mal nach PChar castest?
|
Re: WM_DEVICECHANGE, DBT_DEVTYP_PORT: Portnamen rausbekommen
Lass dir mal dbcp_size anzeigen.
|
Re: WM_DEVICECHANGE, DBT_DEVTYP_PORT: Portnamen rausbekommen
Das mit dem casten auf PChar haut nicht hin.
dbcp_size ist 22. Die Länge des Inhalts von dbcp_name soll man sich bestimmt mit Hilfe der dbcp_size zusammenrechnen: Länge des Namens = dbcp_size - sizeof(dbcp_size) - sizeof(dbcp_devicetype) - sizeof(dbcp_reserved). Hier also 22 - 4 - 4 - 4 = 10. Richtig? Wie bekomme ich jetzt den Text mit der richtigen Länge aus der Variablen raus? |
Re: WM_DEVICECHANGE, DBT_DEVTYP_PORT: Portnamen rausbekommen
Versuche es mal mit PChar(@PDevBroadcastPortA(Msg.LParam)^.dbcp_name[0]).
|
Re: WM_DEVICECHANGE, DBT_DEVTYP_PORT: Portnamen rausbekommen
Läßt sich so nicht kompilieren: [Fehler] Array-Typ erforderlich
|
Re: WM_DEVICECHANGE, DBT_DEVTYP_PORT: Portnamen rausbekommen
Aber so geht es:
Delphi-Quellcode:
Danke, danke, danke...
var
ComPort: PAnsiChar ComPort:= PAnsiChar(@PDevBroadcastPortA(Msg.LParam)^.dbcp_name); |
Re: WM_DEVICECHANGE, DBT_DEVTYP_PORT: Portnamen rausbekommen
Da lag ich ja gar nicht mal so verkehrt :roll:
|
Re: WM_DEVICECHANGE, DBT_DEVTYP_PORT: Portnamen rausbekommen
Hatte neulich sowas ähnliches gebraucht
Zitat:
Wenn ich einen USB to Serial Adapter (FTDI Chip) anstecke/abstecke, und das Event ausgelöst wird, steht in Comport nichts plausibles. An anderer Stelle hier im Forum habe ich dann eine Lösung gefunden um die VID und PID des Usbdevices zu bekommen. (Danke dafür) Mit L.Param der Message, und Benutzung der Unit dbt (jedi). Es werden dort nur die records gebraucht.
Delphi-Quellcode:
Dann steht im String Mydevice die VID/PID drin.
DeviceInfoBlock := PDevBroadcastDeviceInterface(Msg.LParam);
MyDevice := String(Pchar(@DeviceInfoBlock.dbcc_name)); Aber eine Info welcher Comport gerade belegt wird sehe ich dort nicht. mfg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:33 Uhr. |
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