1. 此程序在VS2013下编译通过,假设换到编译器,大家能够稍作改动使用
  1. #include<Windows.h>
  2. #include<tchar.h>
  3. #include"resource1.h"
  4. #pragma warning(disable:4996)
  5. BOOL EnableShutDownPriv()
  6. {
  7. HANDLE hToken = NULL;
  8. TOKEN_PRIVILEGES tkp = {0};
  9. //打开当前程序的权限令牌
  10. if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
  11. {
  12. return FALSE;
  13. }
  14. if (!LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid))
  15. {
  16. CloseHandle(hToken);
  17. return FALSE;
  18. }
  19.  
  20. tkp.PrivilegeCount = 1;
  21. tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  22.  
  23. if (!AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof(TOKEN_PRIVILEGES),NULL,NULL))
  24. {
  25. CloseHandle(hToken);
  26. return FALSE;
  27. }
  28. return true;
  29. }
  30. //winMain是一个win32程序的入口点,
  31. //程序入口点: 1.console程序的入口点函数 main
  32. // 2.win32程序的入口点函数 WinMain
  33. // 3.dll32程序的入口点函数 DllMain
  34. // 4.服务程序的入口点函数 ServiceMain
  35. // 5.驱动程序入口点函数 Driver
  36. //參数1,HINSTANCE hInstance 应用程序实例句柄
  37. //參数2。HINSTANCE hPrevInstance前一个程序实例
  38. //參数3。LPSTR lpCmdLine 是一个用户运行应用程序时传入的參数
  39. //參数4,int nShowCmd假设有窗体以什么形态显示窗体,最大化,最小化
  40. //reset window status 又一次设置window状态
  41.  
  42. /*
  43. C4996以前不是警告么?如今升级啦?
  44.  
  45. 尝试这个
  46. 1.Project Properties > Configuration Properties > C/C++ > General > SDL checks关掉
  47.  
  48. 其它方法:
  49. 2.#pragma warning(disable: 4996)
  50. 3。
  51.  
  52. /wd 4996
  53. */
  54.  
  55. BOOL ReSetWindow(DWORD dwFlag, BOOL bForce)
  56. {
  57. //推断又一次设置的标志
  58. switch (dwFlag)
  59. {
  60. case EWX_LOGOFF:
  61. case EWX_REBOOT:
  62. case EWX_SHUTDOWN:
  63. case EWX_POWEROFF:
  64. break;
  65. default:
  66. return FALSE;
  67. }
  68. //获取电脑系统版本号
  69. OSVERSIONINFO osvi = { 0 };
  70. osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  71.  
  72. if (!GetVersionEx(&osvi))
  73. {
  74. return FALSE;
  75. }
  76.  
  77. DWORD highVersion;
  78. DWORD lowVersion;
  79. //获取主版本号号
  80. highVersion = osvi.dwMajorVersion;
  81. //获取次版本号号
  82. lowVersion = osvi.dwMinorVersion;
  83.  
  84. DWORD plat = osvi.dwPlatformId;
  85.  
  86. if (plat == VER_PLATFORM_WIN32_NT)
  87. {
  88. EnableShutDownPriv();
  89. }
  90.  
  91. //在window中通常是占领不同的位数表示不同的值,一般通过|来获取两个或两个以上的效果
  92. dwFlag = bForce ?
  93.  
  94. dwFlag | EWX_FORCE : dwFlag|EWX_FORCEIFHUNG;
  95. ExitWindowsEx(dwFlag, 0);
  96. }
  97. INT_PTR CALLBACK DialogProc(
  98. _In_ HWND hwndDlg,
  99. _In_ UINT uMsg,
  100. _In_ WPARAM wParam,
  101. _In_ LPARAM lParam
  102. )
  103. {
  104. TCHAR tStr[20] = { 0 };
  105. switch (uMsg)
  106. {
  107. case WM_INITDIALOG:
  108. {
  109. //获取窗体句柄
  110. HWND hComBox = GetDlgItem(hwndDlg, IDC_COMBO1);
  111. //往combobox中插入值
  112. SendMessage(hComBox, CB_INSERTSTRING, 0, (LPARAM)_T("注销"));
  113. SendMessage(hComBox, CB_INSERTSTRING, 1, (LPARAM)_T("重新启动"));
  114. SendMessage(hComBox, CB_INSERTSTRING, 2, (LPARAM)_T("关机"));
  115. //选择button
  116. SendMessage(hComBox, CB_SELECTSTRING, 0, (LPARAM)_T("注销"));
  117. //获取屏幕大小
  118. int witdh = GetSystemMetrics(SM_CXSCREEN);
  119. int height = GetSystemMetrics(SM_CYSCREEN);
  120. RECT rect;
  121. GetWindowRect(hwndDlg, &rect);
  122. //获取对话框的大小
  123. int dlgW = rect.right - rect.left;
  124. int dlgH = rect.top = rect.bottom;
  125.  
  126. //设置窗体位置
  127. SetWindowPos(hwndDlg, 0, witdh / 2 - dlgW / 2, height / 2 - dlgH / 2, dlgW, dlgH, SWP_SHOWWINDOW);
  128.  
  129. }
  130. break;
  131. case WM_COMMAND:
  132. {
  133. switch (wParam)
  134. {
  135. case IDOK:
  136.  
  137. GetDlgItemText(hwndDlg, IDC_COMBO1, tStr, 20);
  138. if (wcscmp(tStr, _T("注销")))
  139. {
  140. ReSetWindow(EWX_LOGOFF, FALSE);
  141. }
  142. else if (wcscmp(tStr, _T("重新启动")))
  143. {
  144. ReSetWindow(EWX_REBOOT, FALSE);
  145. }
  146. else if (wcscmp(tStr, _T("关机")))
  147. {
  148. ReSetWindow(EWX_SHUTDOWN, FALSE);
  149. }
  150. break;
  151. case IDCANCEL:
  152. if (MessageBox(NULL,_T("是否关闭"),_T("提示"),MB_OKCANCEL)==IDOK)
  153. {
  154. EndDialog(hwndDlg, IDCANCEL);
  155. }
  156. break;
  157. default:
  158. break;
  159. }
  160. }
  161. break;
  162. default:
  163. break;
  164. }
  165. return 0;
  166. }
  167.  
  168. int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
  169. {
  170. if (strcmp(lpCmdLine, "/r") == 0)
  171. {
  172. ReSetWindow(EWX_REBOOT, FALSE);
  173. }
  174. else if (strcmp(lpCmdLine,"/f")==0)
  175. {
  176. ReSetWindow(EWX_LOGOFF, FALSE);
  177. }
  178. else if (strcmp(lpCmdLine,"/s")==0)
  179. {
  180. ReSetWindow(EWX_SHUTDOWN, FALSE);
  181. }
  182. else
  183. {
  184. DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DialogProc);
  185. }
  186.  
  187. return 0;
  188. }

VC驿站黑客编程(关机,重新启动,注销)的更多相关文章

  1. C# 实现系统关机、注销、重启、休眠、挂起

    原文:C# 实现系统关机.注销.重启.休眠.挂起 核心代码如下: using System; using System.Text; using System.Diagnostics; using Sy ...

  2. 书评第001篇:《C++黑客编程揭秘与防范》

    本书基本信息 作者:冀云(编著) 出版社:人民邮电出版社 出版时间:2012-6-1 ISBN:9787115280640 版次:1 页数:265 字数:406000 印刷时间:2012-6-1 开本 ...

  3. VC++动态链接库(DLL)编程深入浅出(zz)

    VC++动态链接库(DLL)编程深入浅出(zz) 1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用 ...

  4. 用VC进行COM编程所必须掌握的理论知识

    一.为什么要用COM 软件工程发展到今天,从一开始的结构化编程,到面向对象编程,再到现在的COM编程,目标只有一个,就是希望软件能象积方块一样是累起来的,是组装起来的,而不是一点点编出来的.结构化编程 ...

  5. Python黑客编程基础3网络数据监听和过滤

    网络数据监听和过滤 课程的实验环境如下: •      操作系统:kali Linux 2.0 •      编程工具:Wing IDE •      Python版本:2.7.9 •      涉及 ...

  6. Python黑客编程2 入门demo--zip暴力破解

    Python黑客编程2 入门demo--zip暴力破解 上一篇文章,我们在Kali Linux中搭建了基本的Python开发环境,本篇文章为了拉近Python和大家的距离,我们写一个暴力破解zip包密 ...

  7. 今天逛VC驿站 的收获

    1.C++ 如何定义一个定长字符串, 若不足位数,就补字符串"0"? eg: CString str1 = “123”;不足20位,前面补“0”,实现效果为“00000000000 ...

  8. 【转】VC++消息钩子编程

    VC++消息钩子编程

  9. VC++网络高级编程

    内含<VC网络高级编程>电子书 及源代码. 第一章.TCP/IP协议.第二章.Winsock网络编程接口:第二章.Visual C++与网络编程:第四章.基本网络编程技术:第五章.Teln ...

随机推荐

  1. 洛谷——P3914 染色计数

    P3914 染色计数 题目描述 有一颗NN个节点的树,节点用1,2,\cdots,N1,2,⋯,N编号.你要给它染色,使得相邻节点的颜色不同.有MM种颜色,用1,2,\cdots,M1,2,⋯,M编号 ...

  2. sdoi2018酱油鸡

    ruand1滚粗啦,然后过来写游记 四月是你の省选... day -1 老师突然告诉我们说 day2 回来参加月考,心态爆炸. day0 坐车,颓,和队爷zpd补了b站翻唱2017top100,晚上收 ...

  3. NOIP2010关押罪犯

    题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示 ...

  4. 【树链剖分】【分块】【最近公共祖先】【块状树】bzoj1984 月下“毛景树”

    裸题,但是因为权在边上,所以要先把边权放到这条边的子节点上,然后进行链更新/查询的时候不能更新/查询其lca. #include<cstdio> #include<cmath> ...

  5. Python中xPath技术和BeautifulSoup的使用

    xpath基本知识 XPath语法:使用路径表达式来选取XML或HTML文档中的节点或节点集 路径表达式 nodename:表示选取此节点的所有子节点 /    : 表示从根节点选取 //   :选择 ...

  6. 软件配置篇-MySQL下载及安装

    1.进入MySQL官网下载 下载地址:https://dev.mysql.com/downloads/mysql/ 选择合适的版本下载. 2.安装MySQL 解压后文件夹一般名为:mysql-x.x. ...

  7. BUG:Yii登录时 101 net::ERR_CONNECTION_RESET

    Bug描述:YII web入口登录,无法登录一直等待,最终重定向 原因:设置的默认路由DefauRoute中的控制器中有错误,导致无法跳转找指定的路由规则 解决方案:这就多亏了SourceTree了, ...

  8. 【POI】对于POI无法处理超大xls等文件,官方解决方法【已解决】【多线程提升速率待定】

    本次使用POI处理xlsx文件,莫名的遇到了一个无法逾越的问题. 总共71个xlsx文件,单个文件最大达到50M以上,71个xls文件摆在那里就有3-4G的大小. 在起始处理的时候,发现原本适用于正常 ...

  9. Oracle Service Bus Socket Adapter调整的参数

    之前在一个客户中做压力测试时候Oracle Service Bus性能大概达到900tps左右,和客户期望的1600tps有很大差距. 在研究了Socket Adapter的工作原理之后,判断可能是O ...

  10. Coherence生产环境异常定位过程

    8月1日前广西发生了一次地震, 8月份前又发生了好几次台风,估计对地下的光缆有点损害(比如5根断了2根之类),感觉家里的网速都慢了好多,在客户那里部署的coherence缓存环境也出现了问题,两台hp ...