Foxtable(狐表)用户栏目专家坐堂 → beforecloseproject事件请教


  共有2988人关注过本帖树形打印复制链接

主题:beforecloseproject事件请教

帅哥哟,离线,有人找我吗?
大红袍
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/1/5 11:17:00 [显示全部帖子]

执行关机命令,beforecloseproject根本就不能控制禁止关闭。

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/1/5 11:19:00 [显示全部帖子]

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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)


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/1/5 12:24:00 [显示全部帖子]

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

 

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

 

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

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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


 回到顶部