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


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

主题:beforecloseproject事件请教

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


加好友 发短信
等级:六尾狐 帖子:1368 积分:12195 威望:0 精华:0 注册:2012/3/5 11:32:00
beforecloseproject事件请教  发帖心情 Post By:2016/1/5 11:10:00 [只看该作者]

我想在平时 禁止 用户关闭系统
只有在执行关机命令的时候才可以关闭。

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

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


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

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

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


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

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

 

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


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


加好友 发短信
等级:六尾狐 帖子:1368 积分:12195 威望:0 精华:0 注册:2012/3/5 11:32:00
  发帖心情 Post By:2016/1/5 11:20:00 [只看该作者]

但像点击右上角的X 的时候  怎么设置?

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

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


加好友 发短信
等级:六尾狐 帖子:1368 积分:12195 威望:0 精华:0 注册:2012/3/5 11:32:00
  发帖心情 Post By:2016/1/5 12:01:00 [只看该作者]

袍哥,能否禁止 左上角 的X   ,保留最小化 ,

关机的时候才关闭系统?

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

再 beforecloseproject事件里面禁止了。

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | 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)


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | 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


 回到顶部