时间:2016-11-29 08:10来源: 本站整理
从Vista开始,想阻止系统关机就开始变麻烦了,不能只拦截WM_QUERYENDSESSION了,操作系统只给一个应用程序两秒钟的时间去保存自己的东西,两秒钟之后,不管做完了没有,Game Over!可是如果你正在刻录一张光盘呢?两秒钟是都不够的,所以Vista之后也给提供了一种方式阻止系统关机,就是ShutdownBlockReasonCreate函数,只要调用这个函数,第一个参数传递创建主窗口的句柄,第二个参数传递一个字符串,这个字符串说明阻止关机的原因,将会显示给用户。而且msdn提示说这个API函数只能由创建主窗口的线程调用,否则将返回ERROR_ACCESS_DENIED。而且完成后还得调用ShutdownBlockReasonDestroy函数使系统关机能够继续进行,参数只传递上面那个窗口的句柄就可以了。
下面这段代码就是完整实现,不能使用VS2005编译,因为自带的库还没有这俩函数,我是使用VS2010编译的,工程文件和可执行文件的下载地址在文章最下方。
1 #include <windows.h> 2 #include <tchar.h> 3 #include "resource.h" 4 5 //标记是否已经阻止关机,默认为未阻止 6 BOOL blockedFlag = FALSE; 7 8 //这俩函数纯粹是撒娇,为了突出它们才拿出来改个名的 9 BOOL BlockShutdown(HWND hwnd) 10 { 11 if (ShutdownBlockReasonCreate(hwnd, _T("不准关机!除非你点强制关机 :-("))) 12 { 13 return TRUE; 14 } 15 return FALSE; 16 } 17 18 BOOL UnblockShutdown(HWND hwnd) 19 { 20 if (ShutdownBlockReasonDestroy(hwnd)) 21 { 22 return TRUE; 23 } 24 return FALSE; 25 } 26 27 INT_PTR CALLBACK MainDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)我要分享:上一篇:w7下设置禁用多余的服务组件
本站发布的win10家庭版系统与电脑软件仅为个人学习测试使用,请在下载后24小时内删除,不得用于任何商业用途,否则后果自负,请支持购买微软正版软件!
如侵犯到您的权益,请及时通知我们,我们会及时处理。Copyright @ 2024 win10家庭版 xp6000.com