1. unit mainunit;
  2. {远程关机源码}
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, StrUtils;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. GroupBox1: TGroupBox;
  12. RadioButton1: TRadioButton;
  13. RadioButton2: TRadioButton;
  14. RadioButton3: TRadioButton;
  15. RadioButton4: TRadioButton;
  16. Button1: TButton;
  17. Button2: TButton;
  18. Label1: TLabel;
  19. RadioButton5: TRadioButton;
  20. RadioButton6: TRadioButton;
  21. GroupBox2: TGroupBox;
  22. Label2: TLabel;
  23. Edit1: TEdit;
  24. Button3: TButton;
  25. Label3: TLabel;
  26. Label4: TLabel;
  27. Edit2: TEdit;
  28. Edit3: TEdit;
  29. Label5: TLabel;
  30. Edit4: TEdit;
  31. Memo1: TMemo;
  32. Label6: TLabel;
  33. Button4: TButton;
  34. Button5: TButton;
  35. procedure FormShow(Sender: TObject);
  36. procedure FormCreate(Sender: TObject);
  37. procedure Button2Click(Sender: TObject);
  38. procedure Button1Click(Sender: TObject);
  39. procedure Button3Click(Sender: TObject);
  40. procedure Button4Click(Sender: TObject);
  41. procedure Button5Click(Sender: TObject);
  42. private
  43. { Private declarations }
  44. public
  45. { Public declarations }
  46. function GetWinVer: Byte;//获得当前操作系统的版本
  47. function SetPrivilege(PrivilegeName: string; Enable: Boolean): Boolean;//设置系统权限
  48. procedure ShutDownSystem(EWX_Type: Integer);//根据关机类型,执行操作
  49. function ShutDownRemote(lpMachineName: PChar; lpUsr: PChar; lpPwd: PChar; lpMsg: PChar; dwTimeOut: DWORD): Integer;
  50. end;
  51.  
  52. var
  53. Form1: TForm1;
  54.  
  55. implementation
  56.  
  57. {$R *.dfm}
  58. const
  59. EWX_FORCE= ;
  60. EWX_LOGOFF= ;
  61. EWX_SHUTDOWN= ;
  62. EWX_REBOOT= ;
  63. EWX_POWEROFF= ;
  64. EWX_SLEEP= ;
  65.  
  66. function TForm1.GetWinVer: Byte;
  67. var
  68. OS: TOSVersionInfo;
  69. begin
  70. OS.dwOSVersionInfoSize:= SizeOf(TOSVersionInfo);
  71. GetVersionEx(OS);
  72. case OS.dwPlatformId of
  73. VER_PLATFORM_WIN32s : Result:= ;//Windows 3.1x/32s
  74. VER_PLATFORM_WIN32_WINDOWS : Result:= ;//Windows 95
  75. VER_PLATFORM_WIN32_NT : Result:= ;//Windows NT
  76. else
  77. Result := ;
  78. end;
  79. end;
  80.  
  81. function TForm1.SetPrivilege(PrivilegeName: string; Enable: Boolean): Boolean;
  82. var
  83. NewState, PreviousState: TTokenPrivileges;
  84. Token: THandle;
  85. dwRetLen: DWORD;
  86. begin
  87. Result:= False;
  88. OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token);
  89. NewState.PrivilegeCount:= ;
  90. if(LookupPrivilegeValue(nil, PChar(PrivilegeName), NewState.Privileges[].Luid)) then
  91. begin
  92. if Enable then
  93. NewState.Privileges[].Attributes:= SE_PRIVILEGE_ENABLED
  94. else
  95. NewState.Privileges[].Attributes:= ;
  96. dwRetLen:= ;
  97. Result:= AdjustTokenPrivileges(Token, False, NewState, SizeOf(PreviousState), PreviousState, dwRetLen);
  98. end;
  99. CloseHandle(token);
  100. end;
  101.  
  102. function TForm1.ShutDownRemote(lpMachineName: PChar; lpUsr: PChar; lpPwd: PChar; lpMsg: PChar; dwTimeOut: DWORD): Integer;
  103. var
  104. hToken: THandle;
  105. nRet: Integer;
  106. tp, tpNew: TOKEN_PRIVILEGES;
  107. nr: _NETRESOURCE;
  108. dwRetLen, dwResult: DWORD;
  109. begin
  110. nRet := -;
  111. ZeroMemory(@nr, sizeof(nr));
  112. nr.dwType := RESOURCETYPE_ANY;
  113. nr.lpLocalName := '';
  114. nr.lpProvider := '';
  115. nr.lpRemoteName := lpMachineName;
  116. dwResult := WNetAddConnection2(nr, lpPwd, lpUsr, )- ;
  117.  
  118. if(dwResult = ) then
  119. begin
  120. if(OpenProcessToken(GetCurrentProcess(),
  121. TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)) then
  122. begin
  123. tp.PrivilegeCount := ;
  124. if(not(LookupPrivilegeValue(lpMachineName,
  125. 'SeRemoteShutdownPrivilege', tp.Privileges[].Luid))) then
  126. begin
  127. nRet := -; // 查找远程关机权限失败
  128. end
  129. else
  130. begin
  131. tp.Privileges[].Attributes := SE_PRIVILEGE_ENABLED;
  132. if(not(AdjustTokenPrivileges(
  133. hToken, false, tp, SizeOf(tp), tpNew, dwRetLen))) then
  134. begin
  135. nRet := -; // 调整远程关机权限失败
  136. end
  137. else
  138. begin
  139. if(InitiateSystemShutdown(
  140. lpMachineName, lpMsg, dwTimeOut, True, False)) then
  141. nRet :=
  142. else
  143. nRet := -; // 远程关机执行失败
  144. end;
  145. end;
  146. CloseHandle(hToken);
  147. end;
  148. end
  149. else
  150. nRet := -; // 连接到远程主机失败
  151. Result := nRet;
  152. end;
  153.  
  154. procedure TForm1.ShutDownSystem(EWX_Type: Integer);
  155. begin
  156. if GetWinVer= then
  157. begin
  158. SetPrivilege('SeShutdownPrivilege', True);//提升权限到可以关机
  159. if (not ExitWindowsEx(EWX_Type, )) then
  160. SetPrivilege('SeShutdownPrivilege', False);//如果关机不成功,还将权限设置回去
  161. end
  162. else //如果内核是Win9x,或者其他,则直接调用API函数
  163. ExitWindowsEx(EWX_Type, );
  164. end;
  165.  
  166. procedure TForm1.FormShow(Sender: TObject);
  167. begin
  168. RadioButton1.Checked:= True;
  169. Button1.SetFocus;
  170. end;
  171.  
  172. procedure TForm1.FormCreate(Sender: TObject);
  173. begin
  174. if GetWinVer= then
  175. Label1.Caption:= Label1.Caption + 'Windows NT'
  176. else
  177. Label1.Caption:= Label1.Caption + 'Windows 95/98';
  178.  
  179. Memo1.Text := '';
  180. Edit1.Text := '192.168.135.123';
  181. Edit2.Text := 'Administrator';
  182. Edit4.Text := '';
  183.  
  184. AnimateWindow(Handle, , AW_CENTER);
  185. end;
  186.  
  187. procedure TForm1.Button2Click(Sender: TObject);
  188. begin
  189. Close;
  190. end;
  191.  
  192. procedure TForm1.Button1Click(Sender: TObject);
  193. begin
  194. if(Application.MessageBox('Do you decide to Execute?', 'System Warning', MB_OKCANCEL + MB_OK)= IDOK) then
  195. begin
  196. if (RadioButton1.Checked) then
  197. ShutDownSystem(EWX_SHUTDOWN)
  198. else if (RadioButton2.Checked) then
  199. ShutDownSystem(EWX_REBOOT)
  200. else if (RadioButton3.Checked) then
  201. ShutDownSystem(EWX_LOGOFF)
  202. else if (RadioButton4.Checked) then
  203. ShutDownSystem(EWX_POWEROFF)
  204. else if (RadioButton5.Checked) then
  205. ShutDownSystem(EWX_FORCE)
  206. else if (RadioButton6.Checked) then
  207. ShutDownSystem(EWX_FORCEIFHUNG);
  208. end;
  209. end;
  210.  
  211. procedure TForm1.Button3Click(Sender: TObject);
  212. var
  213. strMsg, strCpt: string;
  214. dwTimeOut: DWORD;
  215. nRet: Integer;
  216. unIcon: UINT;
  217. begin
  218. if (Edit1.Text = '') or (Edit2.Text = '') then
  219. MessageBox(Handle, 'Input ComputerIP and UserName', 'System Warning',
  220. MB_OK + MB_ICONWARNING);
  221.  
  222. if Edit1.Text[] <> '\' then
  223. strCpt := '\\' + Edit1.Text;
  224.  
  225. try
  226. begin
  227. dwTimeOut := StrToInt(Edit4.Text);
  228. end;
  229. except
  230. begin
  231. dwTimeOut := ;
  232. end;
  233. end;
  234.  
  235. nRet := ShutDownRemote(PChar(Edit1.Text), PChar(Edit2.Text), PChar(Edit3.Text),
  236. PChar(Memo1.Text), dwTimeOut);
  237. unIcon := MB_ICONWARNING;
  238. case nRet of
  239. :
  240. begin
  241. strMsg := 'Shut' + strCpt + ' Successfully';
  242. unIcon := MB_ICONINFORMATION;
  243. end;
  244. -: strMsg := 'Search' + strCpt + ' Failed';
  245. -: strMsg := 'Adjust' + strCpt + ' Failed';
  246. -: strMsg := 'Shut' + strCpt + ' Failed';
  247. -: strMsg := 'Connect' + strCpt + ' Failed';
  248. else
  249. strMsg := 'Connect to ' + strCpt + 'faild' + # + 'Maybe Can not find the IP';
  250. //SysErrorMessage(nRet);
  251. end;
  252. MessageBox(Handle, PChar(strMsg), 'System FeedBack', MB_OK + unIcon);
  253. end;
  254.  
  255. procedure TForm1.Button4Click(Sender: TObject);
  256. var
  257. strCpt: string;
  258. begin
  259. if Edit1.Text[] <> '\' then
  260. strCpt := '\\' + Edit1.Text;
  261. if AbortSystemShutdown(PChar(strCpt)) then
  262. MessageBox(Handle, 'Abort Shut System successfully', 'System FeedBack', MB_OK+MB_ICONINFORMATION)
  263. else
  264. MessageBox(Handle, 'Abort Shut System failed', 'System FeedBack', MB_OK+MB_ICONWARNING);
  265. end;
  266.  
  267. procedure TForm1.Button5Click(Sender: TObject);
  268. begin
  269. Close;
  270. end;
  271.  
  272. end.

delphi控制本计算机和远程计算机关机等的更多相关文章

  1. c# Start/Stop/Check Status远程计算机的Windows Service

    static void Main(string[] args) { ConnectionOptions op = new ConnectionOptions(); // 登陆远程计算机的远程, op. ...

  2. ubuntu下唤醒或休眠远程计算机

    ubuntu让我明白,没有什么完美的东西,要想完美必须付出代价.要么花时间折腾,要么花时间赚钱买系统. 人生也是一样,所以不要期待什么完美.哪有那么好的人,在合适的时间合适的地点让你遇见,还对你有感觉 ...

  3. [原创]用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题

    用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题,原因是终端服务器授权方式设置为了"每 ...

  4. ECS Win2008 远程时提示"要登录到此远程计算机,您必须被授予允许通过终端登录登录的权限"的解决方法

    问题描述 ECS Windows 2008 远程登陆时提示"要登录到此远程计算机,您必须被授予允许通过终端登录登录的权限",如下图所示: 问题分析 组策略中做了设置不允许管理员组成 ...

  5. Win7 远程桌面 错误代码:5 异常处理(您的远程桌面会话即将结束 此计算机的虚拟内存可能不足。请关闭其他程序,然后重试连接远程计算机。如果问题仍然存在,请联系网络管理员或技术支持。)

    问题表现: 在用windows7 远程桌面连接其他电脑时,出现错误提示对话框—-标题为“严重错误(错误代码:5)”,内容为“您的远程桌面会话即将结束 此计算机的虚拟内存可能不足.请关闭其他程序,然后重 ...

  6. win 10 远程连接出现 "由于安全设置错误, 客户端无法连接到远程计算机. 确定你已登录到网络后.” 错误

    win 10 远程连接出现 "由于安全设置错误, 客户端无法连接到远程计算机. 确定你已登录到网络后.” 错误 解决方法如下: Step 1:打开"本地安全策略"- Wi ...

  7. PC-如何提高计算机的启动和关机的速度?

    如何提高计算机的启动和关机的速度? 一.bios的优化设置 在bios设置的首页我们进入"advanced bios features"选项,将光标移到"frist bo ...

  8. (转)WS2008远程桌面连接时提示:“要登录到此远程计算机,您必须被授予允许通过终端服务登录的权限”的解决办法

    原文:http://www.chunfengxiyu.com/ws2008-mstsc-privilege.html WS2008远程桌面连接时提示:“要登录到此远程计算机,您必须被授予允许通过终端服 ...

  9. 关于win8.1“连接被远程计算机关闭”的一种解决方案

    我就是连接的时候出现"连接被远程计算机关闭",然后想着可能是win8更新之后网络协议 出问题了,后来无意中发现e信在第一次启动的时候会在网络适配器中会多出很多网卡,其中三个是带感叹 ...

随机推荐

  1. python运算符&优先性

    (1)算数运算符:  +      -      *      /      //(求整)      %(求余)      ** (2)比较运算符:  >      <     >  ...

  2. Python: 如何写一个异常

    例子1 try: #test area function() except Exception, e: print e.message 例子2:用raise抛出一个异常 if bool_var is ...

  3. asp.net网站中增删文件夹会导致Session或cache等等丢失

    因为这会导致网站资源本身重新加载. 如果要改变文件和文件夹,一般应该是对 app_data 下进行操作.

  4. Python并发编程二(多线程、协程、IO模型)

    1.python并发编程之多线程(理论) 1.1线程概念 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于 ...

  5. 【Jmeter自学】Jmeter实战-web程序(六)

    1.确认测试被测对象 **网站 windows环境 2.需求: 并发登录性能测试 3.场景设置: 1s增加2个线程,运行2000次 分别查看20,,60并发下的表现 4.监控 成功率 响应时间 标准差 ...

  6. Python下的opencv小问题大智慧

    1.今晚日了狗了,图像显示不按照预期出现,然后突然就好了...... 2.根据第一个问题举一个例子,另一个我没保存... 是不是分不清楚????   plt.imshow(wjy2, cmap='gr ...

  7. linux问题集

    Too many authentication failures for root (code 2) 原因:服务器可能由于装了一下安全软件导致有时用ssh远程工具登陆不了,提示太多认证失败for ro ...

  8. java-代码生成器

    package ormRex; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import ...

  9. Wed Jul 04 18:01:38 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended

    Wed Jul 04 18:01:38 CST 2018 WARN: Establishing SSL connection without server's identity verificatio ...

  10. samba配置中常见错误收集.txt

    在命令行输入命令: ~$ smbclient -L \\127.0.0.1按要求输入密码后,提示出错:session setup failed: NT_STATUS_LOGON_FAILURE 这是因 ...