困扰本人很多天的问题一直没解决
http://topic.csdn.net/u/20080429/17/beb6e59a-5e44-4e48-b3fa-0692fde5abed.html?seed=151549279
想到另外一种方法不知到可不可以,用findWindow来做判断,得到比如是“Removable Disk (XX:)”的窗口句柄,但现在的问题是,好像不管是c盘还是d盘还是u盘的窗口句柄都是一样的,请问可以的到u盘唯一的句柄吗?
h_Wnd=::FindWindow(NULL,"Removable Disk (G:)");
if (h_Wnd)
{

DWORD dwThreadID=GetWindowThreadProcessId(h_Wnd,NULL);
    hins=LoadLibrary("HookDll.dll");
Proc=(HOOKPROC)GetProcAddress(hins,"MsgProc");
    Hhook=SetWindowsHookEx(WH_GETMESSAGE,Proc,hins,dwThreadID );
//Hhook=SetWindowsHookEx(WH_GETMESSAGE,Proc,hins, 0);
}我的这个作发不成功

解决方案 »

  1.   

    你到底是想得到c盘的设备句柄还是explorer的窗口句柄
      

  2.   

    to yxz_lp 请问设备句柄和窗口句柄是不一样的吗?我只是想得到c盘或者是u盘的窗口句柄,不知道可不可以?
      

  3.   

    硬盘分区哪有什么窗口句柄,只有设备句柄,你所谓的窗口句柄是explorer的浏览窗口
      

  4.   

    你可以用CreateFile获得设备句柄,如获得C盘设备句柄: HANDLE hDev = CreateFile(
    TEXT("\\\\.\\C:"),
    GENERIC_READ | GENERIC_WRITE,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL,
    OPEN_EXISTING,
    FILE_FLAG_OVERLAPPED,
    0
    );
      

  5.   

    to yxz_lp谢谢你的解释,那为什么我上面的代码不可以拿到u盘的设备句柄?要怎么改呢?
      

  6.   

    to yxz_lp你给的代码通过不了,GetWindowThreadProcessId第一个参数是HWND类
      

  7.   

    而且SetWindowsHookEx最后一个参数是得到一个窗口句柄.要怎么做??