我想趕上WM_DEVICECHANGE.But的消息,但有一個問題,我不明白。我想看看什麼時候插入USB或CD。也許我的通知過濾器是錯誤的。 我使用radstudio和它的c語言,也是它的命令行應用程序。我認爲在代碼中一切都很明顯。我做錯了什麼,我創建了只獲取消息的窗口。我也不明白它是如何傳遞給WndProc來自消息循環。RegisterDeviceNotification獲取WM_DEVICECHANGE
#pragma hdrstop
#pragma argsused
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <dbt.h>
LRESULT CALLBACK WndProc(HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam)
{
switch (uiMsg)
{
case WM_DEVICECHANGE:
{
MessageBox(0,"a","b",1);
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
BOOL bRet;
HANDLE a;
HWND lua;
HANDLE hInstance;
MSG msg;
WNDCLASSEX wndClass;
HANDLE hVolNotify;
DEV_BROADCAST_DEVICEINTERFACE dbh;
DEV_BROADCAST_VOLUME NotificationFilter;
lua = CreateWindow("lua", NULL, WS_MINIMIZE, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
wndClass.lpfnWndProc = WndProc;
ZeroMemory(&NotificationFilter, sizeof (NotificationFilter));
NotificationFilter.dbcv_size = sizeof (NotificationFilter);
NotificationFilter.dbcv_devicetype = DBT_DEVTYP_VOLUME;
a = RegisterDeviceNotification(lua,&NotificationFilter,DEVICE_NOTIFY_WINDOW_HANDLE);
while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
{
MessageBox(0,"o","b",1);
if (bRet == -1)
{
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
謝謝它解決了我的問題你幫了我不少。我的信息很多,誤解很多。如果我沒有問,我自己解決需要很長時間。所以你很棒。 –
我修正了一個編譯錯誤,但是你的代碼不起作用:'RegisterListerError'在'RegisterDeviceNotification'(hVolNotify爲NULL)之後返回1066 – chacham15
修改結構爲'DEV_BROADCAST_DEVICEINTERFACE'後,它修復了這個問題,但是創建了一個只有消息的窗口如您指定的那樣)阻止郵件由於某種原因被傳送。 – chacham15