9 个解决方案
#1
给计算机发送一个阻止关机的命令。。。。。
用法: shutdown [-i | -l | -s | -r | -a] [-f] [-m \\computername] [-t xx] [-c "co
mment"] [-d up:xx:yy]
没有参数 显示此消息(与 ? 相同)
-i 显示 GUI 界面,必须是第一个选项
-l 注销(不能与选项 -m 一起使用)
-s 关闭此计算机
-r 关闭并重启动此计算机
-a 放弃系统关机
-m \\computername 远程计算机关机/重启动/放弃
-t xx 设置关闭的超时为 xx 秒
-c "comment" 关闭注释(最大 127 个字符)
-f 强制运行的应用程序关闭而没有警告
-d [u][p]:xx:yy 关闭原因代码
u 是用户代码
p 是一个计划的关闭代码
xx 是一个主要原因代码(小于 256 的正整数)
yy 是一个次要原因代码(小于 65536 的正整数)
用法: shutdown [-i | -l | -s | -r | -a] [-f] [-m \\computername] [-t xx] [-c "co
mment"] [-d up:xx:yy]
没有参数 显示此消息(与 ? 相同)
-i 显示 GUI 界面,必须是第一个选项
-l 注销(不能与选项 -m 一起使用)
-s 关闭此计算机
-r 关闭并重启动此计算机
-a 放弃系统关机
-m \\computername 远程计算机关机/重启动/放弃
-t xx 设置关闭的超时为 xx 秒
-c "comment" 关闭注释(最大 127 个字符)
-f 强制运行的应用程序关闭而没有警告
-d [u][p]:xx:yy 关闭原因代码
u 是用户代码
p 是一个计划的关闭代码
xx 是一个主要原因代码(小于 256 的正整数)
yy 是一个次要原因代码(小于 65536 的正整数)
#2
给我点分吧.我想问问题,但是没有分了,他们高手分很多的.照顾一下新手吧..
#3
这个是倒计时这样的关机时,才能阻止的啊,我说的是如某些软件在某些时刻或者某些情况下会自动执行关机,我想的是但某个软件对系统进行关机时做中断!
#4
API Hook 拦截 ExitWindowsEx
#5
拦截消息:
WM_USERCHANGED = 0x0054;
当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息;
public const int WM_QUERYENDSESSION = 0x11;
这个消息是关机之前发送的。很多软件拦截这个消息,然后提示用户是否保存。系统关闭之前会依次发送这个消息给当前的所有窗体,如果窗体返回true,则认为是允许关闭,如果返回False则表示不允许关机。
所以,最简单方法。重写OnWndProc,拦截WM_QUERYENDSESSION,返回false或者0即可。
因为是api。看实际情况。0也就是False。不同系统要求的返回可能有点不同。
WM_USERCHANGED = 0x0054;
当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息;
public const int WM_QUERYENDSESSION = 0x11;
这个消息是关机之前发送的。很多软件拦截这个消息,然后提示用户是否保存。系统关闭之前会依次发送这个消息给当前的所有窗体,如果窗体返回true,则认为是允许关闭,如果返回False则表示不允许关机。
所以,最简单方法。重写OnWndProc,拦截WM_QUERYENDSESSION,返回false或者0即可。
因为是api。看实际情况。0也就是False。不同系统要求的返回可能有点不同。
#6
请问拦截WM_QUERYENDSESSION = 0x11消息怎么实现,写一个例子好吗?小弟初学C#~~~
#7
private int lijie_c = 1;
private const int vm = 0x0011;
protected override void WndProc(ref Message SystemMessage)
{//处理系统消息问询
switch (SystemMessage.Msg)
{
case vm:
SystemMessage.Result = (IntPtr)lijie_c;
break;
default:
base.WndProc(ref SystemMessage);
break;
}
}
private void 阻止关闭计算机ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!阻止关闭计算机ToolStripMenuItem.Checked)
{
阻止关闭计算机ToolStripMenuItem.Checked = true;
允许关闭计算机ToolStripMenuItem.Checked = false;
lijie_c = 0;
MessageBox.Show("设置成功\n 在未关闭此程序前将无法关闭计算机!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void 允许关闭计算机ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!允许关闭计算机ToolStripMenuItem.Checked)
{
允许关闭计算机ToolStripMenuItem.Checked = true;
阻止关闭计算机ToolStripMenuItem.Checked = false;
lijie_c = 1;
MessageBox.Show("设置成功\n 已经解除阻止!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
希望能给你点帮助,已经把代码全部给您了!
#8
http://topic.csdn.net/u/20100626/19/f142e321-3f47-44d8-9f0a-2494df4e160d.html
这个程序中有完整的实例!
上面我给的代码有点小问题!不过可以实现你的需求
在这里y有很多人帮过我,所以我也会尽我所能帮助有需要的人!
mycllq@hotmail.com
有任何问题我能解决的,我都可以提供帮助!
这个程序中有完整的实例!
上面我给的代码有点小问题!不过可以实现你的需求
在这里y有很多人帮过我,所以我也会尽我所能帮助有需要的人!
mycllq@hotmail.com
有任何问题我能解决的,我都可以提供帮助!
#9
再提供你一个超级简单的解决方案!刚刚发现的!随便一个winform窗体,只要截获窗体的关闭请求。就可以实现了 实际就只需要
一行代码就可以了!
#1
给计算机发送一个阻止关机的命令。。。。。
用法: shutdown [-i | -l | -s | -r | -a] [-f] [-m \\computername] [-t xx] [-c "co
mment"] [-d up:xx:yy]
没有参数 显示此消息(与 ? 相同)
-i 显示 GUI 界面,必须是第一个选项
-l 注销(不能与选项 -m 一起使用)
-s 关闭此计算机
-r 关闭并重启动此计算机
-a 放弃系统关机
-m \\computername 远程计算机关机/重启动/放弃
-t xx 设置关闭的超时为 xx 秒
-c "comment" 关闭注释(最大 127 个字符)
-f 强制运行的应用程序关闭而没有警告
-d [u][p]:xx:yy 关闭原因代码
u 是用户代码
p 是一个计划的关闭代码
xx 是一个主要原因代码(小于 256 的正整数)
yy 是一个次要原因代码(小于 65536 的正整数)
用法: shutdown [-i | -l | -s | -r | -a] [-f] [-m \\computername] [-t xx] [-c "co
mment"] [-d up:xx:yy]
没有参数 显示此消息(与 ? 相同)
-i 显示 GUI 界面,必须是第一个选项
-l 注销(不能与选项 -m 一起使用)
-s 关闭此计算机
-r 关闭并重启动此计算机
-a 放弃系统关机
-m \\computername 远程计算机关机/重启动/放弃
-t xx 设置关闭的超时为 xx 秒
-c "comment" 关闭注释(最大 127 个字符)
-f 强制运行的应用程序关闭而没有警告
-d [u][p]:xx:yy 关闭原因代码
u 是用户代码
p 是一个计划的关闭代码
xx 是一个主要原因代码(小于 256 的正整数)
yy 是一个次要原因代码(小于 65536 的正整数)
#2
给我点分吧.我想问问题,但是没有分了,他们高手分很多的.照顾一下新手吧..
#3
这个是倒计时这样的关机时,才能阻止的啊,我说的是如某些软件在某些时刻或者某些情况下会自动执行关机,我想的是但某个软件对系统进行关机时做中断!
#4
API Hook 拦截 ExitWindowsEx
#5
拦截消息:
WM_USERCHANGED = 0x0054;
当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息;
public const int WM_QUERYENDSESSION = 0x11;
这个消息是关机之前发送的。很多软件拦截这个消息,然后提示用户是否保存。系统关闭之前会依次发送这个消息给当前的所有窗体,如果窗体返回true,则认为是允许关闭,如果返回False则表示不允许关机。
所以,最简单方法。重写OnWndProc,拦截WM_QUERYENDSESSION,返回false或者0即可。
因为是api。看实际情况。0也就是False。不同系统要求的返回可能有点不同。
WM_USERCHANGED = 0x0054;
当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息;
public const int WM_QUERYENDSESSION = 0x11;
这个消息是关机之前发送的。很多软件拦截这个消息,然后提示用户是否保存。系统关闭之前会依次发送这个消息给当前的所有窗体,如果窗体返回true,则认为是允许关闭,如果返回False则表示不允许关机。
所以,最简单方法。重写OnWndProc,拦截WM_QUERYENDSESSION,返回false或者0即可。
因为是api。看实际情况。0也就是False。不同系统要求的返回可能有点不同。
#6
请问拦截WM_QUERYENDSESSION = 0x11消息怎么实现,写一个例子好吗?小弟初学C#~~~
#7
private int lijie_c = 1;
private const int vm = 0x0011;
protected override void WndProc(ref Message SystemMessage)
{//处理系统消息问询
switch (SystemMessage.Msg)
{
case vm:
SystemMessage.Result = (IntPtr)lijie_c;
break;
default:
base.WndProc(ref SystemMessage);
break;
}
}
private void 阻止关闭计算机ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!阻止关闭计算机ToolStripMenuItem.Checked)
{
阻止关闭计算机ToolStripMenuItem.Checked = true;
允许关闭计算机ToolStripMenuItem.Checked = false;
lijie_c = 0;
MessageBox.Show("设置成功\n 在未关闭此程序前将无法关闭计算机!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void 允许关闭计算机ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!允许关闭计算机ToolStripMenuItem.Checked)
{
允许关闭计算机ToolStripMenuItem.Checked = true;
阻止关闭计算机ToolStripMenuItem.Checked = false;
lijie_c = 1;
MessageBox.Show("设置成功\n 已经解除阻止!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
希望能给你点帮助,已经把代码全部给您了!
#8
http://topic.csdn.net/u/20100626/19/f142e321-3f47-44d8-9f0a-2494df4e160d.html
这个程序中有完整的实例!
上面我给的代码有点小问题!不过可以实现你的需求
在这里y有很多人帮过我,所以我也会尽我所能帮助有需要的人!
mycllq@hotmail.com
有任何问题我能解决的,我都可以提供帮助!
这个程序中有完整的实例!
上面我给的代码有点小问题!不过可以实现你的需求
在这里y有很多人帮过我,所以我也会尽我所能帮助有需要的人!
mycllq@hotmail.com
有任何问题我能解决的,我都可以提供帮助!
#9
再提供你一个超级简单的解决方案!刚刚发现的!随便一个winform窗体,只要截获窗体的关闭请求。就可以实现了 实际就只需要
一行代码就可以了!