子类化
//通过传递过来的CWnd *获取窗口句柄
HWND hWnd=pWnd->m_hWnd;
//子类化 hProc是一个全局变量
hProc=SetWindowLong(hWnd,GWL_WNDPROC,(LONG)&NewProc);
//新的窗口过程
LRESULT CALLBACK NewProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DEVICECHANGE:
//这就是你要的消息了
break;
}
return CallWindowProc(hProc,hWnd, message, wParam, lParam);
}

解决方案 »

  1.   

    也可以用LRESULT CALLBACK MyCallWndProc(
      __in  int nCode,
      __in  WPARAM wParam,
      __in  LPARAM lParam
    )
    {
    // lParam Pointer to a CWPSTRUCT structure that contains details about the message
    }
    SetWindowsHookEx(WH_CALLWNDPROC,MyCallWndProc,GetModuleHandle("yourdll.dll"), 0);
      

  2.   

    dll 在 exe 内存里的话  直接   getwindowlong 得到  窗体的 消息处理过程
    然后 setwindowlong 注册新的 代替原来的, 实现拦截后 记得要 调用原来的 过程