Auf USB reagieren
-
Nabend.
Ich wollte mal wissen, wie es möglich ist, dass, sobald ein USB-Massenspeicher angeschlossen wird, das Programm darauf reagiert (mit einer Meldung, wie das Gerät heißt und wie viel Speicher noch frei ist).
PseudoCode:
// Thread1 DWORD WINAPI WartenThread(LPVOID Parameter) { bool UsbSignal; while (1) { UsbSignal = GetUsbPortSignal(); if (!UsbSignal) continue; MessageBox(NULL, GetLastUsbSignal().Name, "", MB_OK | MB_ICONINFORMATION); } }MFG DerCoder
-
-
Vielen Dank, für deine schnelle Antwort, das ist aber leider in Qt, ich versuche es mit der WinAPI zu lösen.
-
Das würdest Du nicht schreiben wenn Du dem Link gefolgt wärst...
QT kennt keine USB-Geräte..
rya.
-
Okay, du hast Recht

Ich habe am Anfang Qt gelesen und dann vorschnell geantwortet.Das hier habe ich bin jetzt ausprobiert:
#include <windows.h> #include <Dbt.h> #include <iostream> void RegisterHidNotification() { DEV_BROADCAST_DEVICEINTERFACE devInt; ZeroMemory(&devInt, sizeof(devInt)); devInt.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); devInt.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; devInt.dbcc_classguid = GUID_DEVINTERFACE_VOLUME; m_hDeviceNotify = RegisterDeviceNotification(winId(), &devInt, DEVICE_NOTIFY_WINDOW_HANDLE); if(m_hDeviceNotify == NULL) { std::cout << "Failed to register device notification\n"; } } int main() { RegisterHidNotification(); return 0; }Das Problem ist, dass DEV_BROADCAST_DEVICEINTERFACE, DEV_BROADCAST_DEVICEINTERFACE, DBT_DEVTYP_DEVICEINTERFACE und GUID_DEVINTERFACE_VOLUME nicht deklariert sind... Sieht wer meine(n) Fehler?
-
ich würde sagen da fehlt ein include
extern "C" { #include <hidsdi.h> }und ich benutze diese Funktion um mir die GUID zu holen:
if (hWindow) { HidD_GetHidGuid(&guid); ZeroMemory( &NotificationFilter, sizeof(NotificationFilter) ); NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; NotificationFilter.dbcc_classguid = guid; hDeviceNotification = RegisterDeviceNotification(hWindow, &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE); }
-
DerCoder schrieb:
Das Problem ist, dass DEV_BROADCAST_DEVICEINTERFACE, DEV_BROADCAST_DEVICEINTERFACE, DBT_DEVTYP_DEVICEINTERFACE und GUID_DEVINTERFACE_VOLUME nicht deklariert sind... Sieht wer meine(n) Fehler?
Das hier beachtet?
http://msdn.microsoft.com/en-us/library/aa383745.aspx
-
Ich habe leider die hidsdi.h nicht.
Kann mir jemand Hilfestellung geben oder sagen, ob das so klappt, wie Destiny geschrieben hat? Ich habe leider keine Ahnung, ob und wie es funktioniert.
Vorher habe ich mich eher mit Sockets beschäftigt.Vielen Dank für die Hilfe.
-
DerCoder schrieb:
Ich habe leider die hidsdi.h nicht.
Die ist im "Windows Driver Kit" enthalten:
http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=36a2630f-5d56-43b5-b996-7633f2ec14ff