截取WINDOWS消息,然后判断一下就可以了呀!
我忘了两个消息的具体名字了

解决方案 »

  1.   

    EWX_FORCE=4; //关闭所有程序并以其他用户身份登录
    EWX_LOGOFF=0; //重新启动计算机并切换到MS-DOS方式
    EWX_REBOOT=2; //重新启动计算机
    EWX_SHUTDOWN=1;//关闭计算机
      

  2.   

    系统会发送WM_QUERYENDSESSION或者WM_ENDSESSION消息
      

  3.   

    tikkypeng(千两狂死郎):这个我知道,可是怎麽利用呀,我想知道用那个api或什麽的可以分辨出是关机还是,从新启动呀!
    zzutlink(来溜达) :谢谢,能不能帮我找找,我很着急的!
      

  4.   

    TechnoFantasy(www.applevb.com) :你说的那两个消息知识让系统知道,程序是否可以退出了,而我要的是让程序知道,系统是因为关机,还是从起,而让她退出的,你刚好能反了!
      

  5.   

    利用WM_QUERYENDSESSION消息可以知道系统是关机还是重启。这里是MSDN中关于WM_QUERYENDSESSION中参数lParam的说明:
    lParam 
    Specifies whether the user is logging off or shutting down the system. If this parameter includes the ENDSESSION_LOGOFF value, the user if logging off. (Note that this parameter is a bit mask. To test for this value, use a bitwise operation; do not test for equality.) 
    Windows 2000: If this parameter is zero, the system is shutting down. 你只要建立自己的消息处理局柄处理WM_QUERYENDSESSION消息,然后在消息处理函数中判定lParam的值就可以知道系统是要如何退出的。
      

  6.   

    我想问问TechnoFantasy(www.applevb.com):endsession_logoff如何使用呢,我试过如果用message.lparam:=endsession_logoff好像用不了呀!
      

  7.   

    应该是lParam包含了ENDSESSION_LOGOFF而不是message.lparam:=endsession_logoff,代码
    应该是 if message.lparam and endsession_logoff = endsession_logoff then
      

  8.   

    因为WM_QUERYENDSESSION消息的LPARAM参数是bit mask(MSDN上已经说的很清楚了,大概你没看仔细吧),即ENDSESSION_LOGOFF只是LPARAM中的一位,所以不能用等于符号来判断,而应该用位操作来判断,如下:
    if(message.LPARAM and ENDSESSION_LOGOFF)<>0 then ……
    大致是这样的,具体我没有测试过,你可以试试看!
      

  9.   

    两位高手,你们的办法可以运行,可是却不起作用,要不就是都起作用(关机,重起),我想问问,有什麽办法可以知道用户选择了,关机的选项,还是重新启动的选想
    还有,我想问问,去了这个消息,别的都一样吗,就是说关机,重起的时候发给这些程序的消息!
    我这个程序,只有在退出程序界面就是form1.close的时候,才起作用!
    谢谢了,如果两位可以帮忙,我会吧其他几个提问的分给你们,一共也有600-700了!谢谢了
      

  10.   

    我又看了一下帮助,你的问题使用上面的方法应该是不行的,LogOff指注销用户,而你需要
    的是重启(Reboot)以及关机(ShutDown)的区别。好像在WM_QUERYENDSESSION中没有提供这样
    的参数供判断,可能你需要在程序中加入代码,将重启(Reboot)以及关机(ShutDown)时
    WM_QUERYENDSESSION消息的参数lParam记下来,然后根据lParam值的区别猜是否是重启
    (Reboot)或者关机(ShutDown
      

  11.   

    拿我要如何记录呢,我发现WM_QUERYENDSESSION的参数全都一样,都是用来关闭程序的,我听说windowproc可以吗!
      

  12.   

    你在消息处理中将WM_QUERYENDSESSION消息的lParam值保存起来(例如保存到磁盘文件),然后看重新启动和关机时保存的lParam值有什么不同,这个不同可能就是系统传递的不同参数值。
      

  13.   

    我试过用showmessage来显示她,不只算不算呢
      

  14.   

    都快成世界难题了,难道微软就没有直接的函数吗,或者消息,这是TMD微软