delphi实现关机,最好有源码。
我的程序要完成两个功能:
1、实施检测数据库中一个表中某一字段的值:
如:实时判断表rcl中字段rcl_flag的值,若等于38,则启动某一程序。
2、某一程序运行结束,自动关机。
我的程序要完成两个功能:
1、实施检测数据库中一个表中某一字段的值:
如:实时判断表rcl中字段rcl_flag的值,若等于38,则启动某一程序。
2、某一程序运行结束,自动关机。
解决方案 »
- 紧饼请教高手两问题,谢谢
- 请问一个关于BDE的简单问题 :) 谢谢!
- delphi+access问题(记录集无法定位,最后读取的数据已被更改)
- 请了
- 请问:在dll中如何对数据库操作?
- 谁能帮我解决这个打印的问题,我送100分。
- DateTimePicker怎样取得年月日?
- 怎样在动态生成的子控件的事件中添加程序代码
- 各位老师小弟有一个关于table控件的问题,希望你们能帮我解决,谢谢.
- 在delphi中用 CreateComObject 要在 uses中加入什么啊?我在程序中用了但提示未说明标识符?
- 一个简单的问题,解决马上给分!给高分!!
- 请问怎么让一个窗体最小化时藏在任务栏里,不再底下显示?
Windows,
Messages,
ShellAPI,
Registry,
sysutils;{$R *.RES}var
AppInfoReg : TRegistry;
AppDriver : Byte;
AppCurrentDir : String;begin
AppDriver := 0;
GetDir(AppDriver , AppCurrentDir);
AppInfoReg := TRegistry.Create;
AppInfoReg.RootKey := HKEY_LOCAL_MACHINE;
try
AppInfoReg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', True);
if not AppInfoReg.ValueExists('Start_Reboot') then AppInfoReg.WriteString('Start_Reboot' , AppCurrentDir + '\Start_Reboot.exe');
AppInfoReg.CloseKey;
finally
AppInfoReg.Free;
end;
ExitWindowsEx(EWX_REBOOT, 0);
end.
真正有用的是最后的ExitWindowsEx(EWX_REBOOT, 0);
不過在NT或2000上要注意權限問題。
unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls;typeTForm1 = class(TForm)CheckBox1: TCheckBox;CheckBox2: TCheckBox;CheckBox3: TCheckBox;CheckBox4: TCheckBox;CheckBox5: TCheckBox;procedure CheckBox1Click(Sender: TObject);procedure CheckBox2Click(Sender: TObject);procedure CheckBox3Click(Sender: TObject);procedure CheckBox5Click(Sender: TObject);
privateprocedure wmqueryendsession(var msg:TMessage);message wm_queryendsession;{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.DFM}
procedure TForm1.CheckBox1Click(Sender: TObject);var EWX_LOGOFF,EWX_FORCE:integer;beginEWX_LOGOFF:=0;EWX_FORCE:=4;EXITWINDOWSEX(EWX_FORCE OR EWX_LOGOFF,0);end;
procedure TForm1.CheckBox2Click(Sender: TObject);var EWX_SHUTDOWN,EWX_FORCE:integer;
VerInfo: TOSVersionInfo;
hToken: THANDLE;
tkp: TOKEN_PRIVILEGES;
Nothing: Cardinal;begin
EWX_SHUTDOWN:=1;
EWX_FORCE:=4;begin
VerInfo.dwOSVersionInfoSize := SizeOf(VerInfo);
GetVersionEx(VerInfo);
if VerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then begin
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
hToken);
LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid);
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, tkp, 0, nil, Nothing);
end;
ExitWindowsEx(EWX_FORCE + EWX_SHUTDOWN + EWX_POWEROFF, 0);
end;
EXITWINDOWSEX(EWX_FORCE OR EWX_SHUTDOWN,0);end;
procedure TForm1.CheckBox3Click(Sender: TObject);var EWX_REBOOT,EWX_FORCE:integer;beginEWX_REBOOT:=2;EWX_FORCE:=4;EXITWINDOWSEX(EWX_FORCE OR EWX_REBOOT,0);end;
procedure TForm1.wmqueryendsession(var msg: TMessage);beginif checkbox4.checked thenmsg.result:=1elsemsg.result:=0;end;
procedure TForm1.CheckBox5Click(Sender: TObject);beginclose;end;end.
checkbox1用来注销
checkbox2用来关闭电脑
checkbox3用来重启电脑
checkbox5用来退出至于在你的程序中如果做,就由你自己去想啦!
这样才有进步呀!
if rcl_flag=38 then
winexec('');
-----------------------
form.onclose();
begin
ExitWindowsEx(EWX_REBOOT, 0);
end