LRESULT  CALLBACK  WINAPIHookProc(int nCode,WPARAM wParam,LPARAM lParam) 
{
     if(nCode<0) 
return CallNextHookEx(NULL,nCode,wParam,lParam);
     switch(nCode)
     {
     case HC_ACTION:
switch(wParam)
{
case PM_NOREMOVE:
              PMSG pmsg=(PMSG)lParam;
     if(pmsg->message==WM_DEVICECHANGE)
     {
  if(pmsg->wParam == DBT_DEVNODES_CHANGED)
  {
     AfxMessageBox("aaa");
  }
     }
     break;
}
     }
     return CallNextHookEx(NULL,nCode,wParam,lParam);
}

解决方案 »

  1.   

    上面的有些乱,主要代码是这样的
    LRESULT  CALLBACK  WINAPIHookProc(int nCode,WPARAM wParam,LPARAM lParam) 
    { if(nCode<0) 
    return CallNextHookEx(NULL,nCode,wParam,lParam);
    switch(nCode)
    {
    case HC_ACTION:
    PMSG pmsg=(PMSG)lParam;
    switch(wParam)
    {
    case PM_NOREMOVE:
    if(pmsg->message==WM_DEVICECHANGE)
    {
    AfxMessageBox("aaa");
    }
    break;
    }
    }
    return CallNextHookEx(NULL,nCode,wParam,lParam);
    }
      

  2.   

    注册函数如下
    SetWindowsHookEx(WH_GETMESSAGE,WINAPIHookProc,glhInstance,0);
      

  3.   

    帮你UP一下.
    顺便问一下,你是HOOK系统中全部进程的调用吗?
      

  4.   

    想接收WM_DEVICECHANGE不用hook吧?调用RegisterDeviceNotification注册一个就可以了。98也是可以的。
      

  5.   

    很简单,在98下return CallNextHookEx(NULL,nCode,wParam,lParam);中的第一个参数不能为NULL,请参看MSDN!