以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  beforecloseproject事件请教  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=79573)

--  作者:ljh29206
--  发布时间:2016/1/5 11:10:00
--  beforecloseproject事件请教
我想在平时 禁止 用户关闭系统
只有在执行关机命令的时候才可以关闭。

这个关机命令的判断 怎么写呢?
判断是否进行执行了关机操作
[此贴子已经被作者于2016/1/5 11:19:27编辑过]

--  作者:大红袍
--  发布时间:2016/1/5 11:17:00
--  
执行关机命令,beforecloseproject根本就不能控制禁止关闭。
--  作者:大红袍
--  发布时间:2016/1/5 11:19:00
--  

你手动关闭的话,就赋值 vars("手动关闭") = true

 

如果是其它触发关闭的时候,就允许其关闭呗


--  作者:ljh29206
--  发布时间:2016/1/5 11:20:00
--  
但像点击右上角的X 的时候  怎么设置?

[此贴子已经被作者于2016/1/5 11:21:37编辑过]

--  作者:ljh29206
--  发布时间:2016/1/5 12:01:00
--  
袍哥,能否禁止 左上角 的X   ,保留最小化 ,

关机的时候才关闭系统?

我的想法是判断关机的动作,才触发关闭,

再 beforecloseproject事件里面禁止了。

--  作者:大红袍
--  发布时间:2016/1/5 12:01:00
--  

全局代码

 

Public Const SC_CLOSE As Integer = &Hf060
Public Const MF_ENABLED As Integer = &H0
Public Const MF_GRAYED As Integer = &H1
Public Const MF_DISABLED As Integer = &H2

<DllImport("user32.dll", EntryPoint := "GetSystemMenu")> _
Public Function GetSystemMenu(hWnd As IntPtr, bRevert As Integer) As IntPtr
End Function

<DllImport("User32.dll")> _
Public Function EnableMenuItem(hMenu As IntPtr, uIDEnableItem As Integer, uEnable As Integer) As Boolean
End Function

 

调用代码

 

Dim hMenu As IntPtr = GetSystemMenu(basemainform.Handle, 0)
EnableMenuItem(hMenu, SC_CLOSE, (MF_DISABLED + MF_GRAYED) Or MF_ENABLED)


--  作者:大红袍
--  发布时间:2016/1/5 12:24:00
--  

测试了一下,阻止关机的代码好像无效。你可以自己测试一下

 

http://blog.csdn.net/testcs_dn/article/details/42365381

 

[此贴子已经被作者于2016/1/5 12:25:29编辑过]

--  作者:大红袍
--  发布时间:2016/1/5 12:31:00
--  

哦,是系统的问题


打开注册表:
HKEY_CURRENT_USER\\Control Panel\\Desktop
AutoEndTasks 改为0;
HungAppTimeout 改为5000;
WaitToKillAppTimeout 改为20000;

这些都是默认值,可能你装的是别人做的系统给改掉了。特别是第一个,改成1系统关机不会给你的程序发消息。

 

-------------------------------------

 

全局代码

 

\'当用户试图注销或关闭系统时发生.
Public Sub SystemEvents_SessionEnding(sender As Object, e As Microsoft.Win32.SessionEndingEventArgs)
msgbox(e.reason)
Select Case e.reason
    Case Microsoft.Win32.SessionEndReasons.Logoff
        e.cancel = True
        msgbox("注销")
    Case Microsoft.Win32.SessionEndReasons.SystemShutdown
        e.Cancel = True
        msgbox("关闭")
End Select
End Sub

 

调用代码

 

addhandler Microsoft.Win32.SystemEvents.SessionEnding, addressof SystemEvents_SessionEnding