博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个实现windows下注销、关机、重启的程序
阅读量:7144 次
发布时间:2019-06-29

本文共 2400 字,大约阅读时间需要 8 分钟。

hot3.png

想想来开源社区也有一段时间了,什么也没留下,今天这算是第一篇博文吧,哈哈...

近来在学习windows编程,说起编程,惭愧啊,接触有两年多了,但一直没啥进展,几乎没写过什么代码...下面的代码并非原创,是在原创的基础上修改了对话框资源与一点消息执行方式...

主对话框        提示框

#include 
#include
#include "resource.h"#include
BOOL EnableShutDownPriv(){ //Get Privilege HANDLE hToken = NULL; TOKEN_PRIVILEGES tkp = {0}; if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ) { return FALSE; } if ( !LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid ) ) { CloseHandle( hToken ); return FALSE; } tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if ( !AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), NULL, NULL ) ) { CloseHandle( hToken ); return FALSE; } return TRUE;}BOOL ReSetWindows(DWORD dwFlags, BOOL bForce){ //Check the param; if ( dwFlags != EWX_LOGOFF && dwFlags != EWX_REBOOT && dwFlags != EWX_SHUTDOWN ) { return FALSE; } //Get the os version; OSVERSIONINFO osvi = {0}; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if ( !GetVersionEx(&osvi) ) { return FALSE; } if ( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT ) { EnableShutDownPriv(); } dwFlags |= (bForce != FALSE) ? EWX_FORCE : EWX_FORCEIFHUNG; return ExitWindowsEx(dwFlags, 0);}INT_PTR CALLBACK DialogProc( HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam){ switch(uMsg) { case WM_COMMAND: { switch(wParam) { case IDC_LOGOFF_BUTTON: { ReSetWindows(EWX_LOGOFF, FALSE); } break; case IDC_SHUTDOWN_BUTTON: { ReSetWindows(EWX_SHUTDOWN, FALSE); } break; case IDC_REBOOT_BUTTON: { ReSetWindows(EWX_REBOOT, FALSE); } break; case IDCANCEL: { int iRet = MessageBox(hwndDlg, _T("您选择了关闭窗口!"), _T("提示"), MB_OKCANCEL); if ( iRet == IDOK ) { EndDialog(hwndDlg, IDCANCEL); } } break; default:break; } } break; default:break; } return 0;}int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){ DialogBox( hInstance,MAKEINTRESOURCE(IDD_MAIN_DIALOG),NULL,DialogProc); return 0;}

遇到的问题:

这样创建的对话框窗口默认是出现在屏幕的左上角,为了让它出现在屏幕中央,先是想过在对话框初始化时调用SetWindowPos函数进行位置的设置,但没找到获取对话框资源尺寸的API ;也想过用MoveWindow,也是同样的问题...

//在DialogProc函数中switch(uMsg)添加一个case分支:case WM_INITDIALOG:{    //add code here}break;

后还是在对话框资源的属性里把center置为TRUE,这才让对话框显示在屏幕中央...

求教高手,代码如何实现这一功能?先谢过!

转载于:https://my.oschina.net/u/165950/blog/68285

你可能感兴趣的文章
2019年春运首日 河北实现“空地一体”立体化救援
查看>>
蚂蚁金服mPaaS 3.0发布 助力客户智能化构建超级App生态
查看>>
如何实现全屏遮罩(附Vue.extend和el-message源码学习)
查看>>
阿里:千亿交易背后的0故障发布
查看>>
利用angular4和nodejs-express构建一个简单的网站(十)—好友模块
查看>>
极光大数据告诉你,程序员们都在"愁"些啥?
查看>>
前端基础知识学习记录(三)
查看>>
LeanCloud + Ionic3 迅速重构应用
查看>>
chrome扩展推荐:帮你留住每一次ctrl+c --- Clipboard History 2
查看>>
Spring Web Services 3.0.4.RELEASE和2.4.3.RELEASE发布
查看>>
配置一次,到处运行:将配置与运行时解耦
查看>>
菜鸟成都未来园区启动,无人车首次进入园区调拨运输环节 ...
查看>>
算法不扎实的程序员,每个都很慌
查看>>
Element 2.6.3 发布,基于 Vue 2.0 的桌面端组件库
查看>>
基于kubeadm的kubernetes高可用集群部署
查看>>
定位「数字化助手」,腾讯想用服务创新助力产业智慧升级
查看>>
golang之sync.Mutex互斥锁源码分析
查看>>
SAP增强的PA教材内容
查看>>
C#使用Xamarin开发可移植移动应用(3.Xamarin.Views控件)附源码
查看>>
Java 模拟基于UDP的Socket通信
查看>>