网上大多数帖子只能截获到系统给所有进程的关闭消息,却不能区分关机、重启、注销的3个事件,有更好的方式么?

解决方案 »

  1.   

    WM_QUERYENDSESSION对应的lparam可以区分是注销还是关机,至于关机和重启无法区分
      

  2.   

    WM_QUERYENDSESSION对应的lparam设置成什么是关机,什么是注销?
      

  3.   

    参考:http://www.vbaccelerator.com/home/VB/Tips/Preventing_Logoff_or_Shutdown/article.aspPrivate Function ISubclass_WindowProc( _
          ByVal hWnd As Long, _
          ByVal iMsg As Long, _
          ByVal wParam As Long, _
          ByVal lParam As Long) As Long
    Dim lR As Long
       If (iMsg = WM_QUERYENDSESSION) Then '注意下面语句,检测lparam中是否包含ENDSESSION_LOGOFF
          If (lParam Or ENDSESSION_LOGOFF) = ENDSESSION_LOGOFF Then
             ' user logging off
          Else
             ' shutdown
          End If
          lR = 1
          ' Return 0 to prevent the session being ended,
          ' otherwise return 1:
          ISubclass_WindowProc = lR
       End If
    End Function