在C++非GUI应用程序中检测USB插入/删除

Swa*_*and 12 c++ windows usb

我想检测通过在后台运行但没有GUI的C++应用程序插入/删除特定(自定义)USB设备.

我已经看到很多问题,他们的解决方案RegisterDeviceNotification也在MSDN上提供代码示例

但是这些应用程序都有一些Window/Form/GUI.我的申请没有.我如何在我的应用程序中使用它?

我的最后一个选择是创建一个看不见的窗口......但还有其他出路吗?

MSa*_*ers 5

创建仅消息窗口.尽管名称,它实际上只是一个消息队列.


Min*_*mal 5

外部 USB 存储设备检测器


这个简单的 C++ 代码可以检测任何笔式驱动器存储卡外部硬盘驱动器-

#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <string>

using namespace std;

string allDrives;

char getRemovableDisk();

int main(void) {
    char driveLetter = getRemovableDisk();
    while (1) {
        driveLetter = getRemovableDisk();
        if (driveLetter != '0') {
            printf("%c \n", driveLetter);
        }

        Sleep(1000);
    }

    return 0;
}

char getRemovableDisk() {
    char drive = '0';

    char szLogicalDrives[MAX_PATH];
    DWORD dwResult = GetLogicalDriveStrings(MAX_PATH, szLogicalDrives);

    string currentDrives = "";

    //cout << dwResult << endl;
    for (int i = 0; i < dwResult; i++) {
        if (szLogicalDrives[i] > 64 && szLogicalDrives[i] < 90) {
            currentDrives.append(1, szLogicalDrives[i]);
            if (allDrives.find(szLogicalDrives[i]) > 100) {
                drive = szLogicalDrives[i];
            }

        }
    }

    allDrives = currentDrives;

    return drive;
}
Run Code Online (Sandbox Code Playgroud)

PS:此代码片段可以检测Windows操作系统的一个新USB存储设备的插入。如果 1 秒内同时插入多个设备,则只会检测到一个。但是,当然,您也可以通过少量代码更改来实现多重检测。:)

  • 这仅适用于 USB 存储设备,不适用于 HID 等其他类型 (3认同)