一个Bitbtn、一个edit、一个Timer用来完成关机,把桌面清除完毕,留下张光秃秃的桌面就不动了,鼠标还能动,怎么回事? 程序如下:procedure TForm1.BitBtn1Click(Sender: TObject);
begin
begin
if strtodatetime(Edit1.Text)<=now then
begin
MessageBox(handle,'设置有误,请重来!','错误!',mb_ok or MB_ICONERROR);
exit;
end
else
if timer1.Enabled =false then
timer1.Enabled :=true;
end;
//隐藏主窗体form1
ShowWindow(form1.Handle,sw_hide);
end; //Timer,实现关机
procedure TForm1.Timer1Timer(Sender: TObject);
var
htoken:thandle;
tkp:token_privileges;
rr:dword;
t:tdatetime;
begin
t:=strtodatetime(Edit1.text);
if now>=t then
begin
openprocesstoken(getcurrentprocess(),token_adjust_privileges or token_query,htoken);
lookupprivilegevalue(nil,'seshutdownprivilege',tkp.privileges[0].luid);
//设定权限为1
tkp.PrivilegeCount:=1;
tkp.privileges[0].Attributes:=se_privilege_enabled;
//得到关机权限
adjusttokenprivileges(htoken,false,tkp,0,nil,rr);
//关闭计算机
exitwindowsex(ewx_force or ewx_shutdown or ewx_poweroff,0);
PostMessage(handle,wm_Destroy,0,0);
end;end;
begin
begin
if strtodatetime(Edit1.Text)<=now then
begin
MessageBox(handle,'设置有误,请重来!','错误!',mb_ok or MB_ICONERROR);
exit;
end
else
if timer1.Enabled =false then
timer1.Enabled :=true;
end;
//隐藏主窗体form1
ShowWindow(form1.Handle,sw_hide);
end; //Timer,实现关机
procedure TForm1.Timer1Timer(Sender: TObject);
var
htoken:thandle;
tkp:token_privileges;
rr:dword;
t:tdatetime;
begin
t:=strtodatetime(Edit1.text);
if now>=t then
begin
openprocesstoken(getcurrentprocess(),token_adjust_privileges or token_query,htoken);
lookupprivilegevalue(nil,'seshutdownprivilege',tkp.privileges[0].luid);
//设定权限为1
tkp.PrivilegeCount:=1;
tkp.privileges[0].Attributes:=se_privilege_enabled;
//得到关机权限
adjusttokenprivileges(htoken,false,tkp,0,nil,rr);
//关闭计算机
exitwindowsex(ewx_force or ewx_shutdown or ewx_poweroff,0);
PostMessage(handle,wm_Destroy,0,0);
end;end;
改为:
Timer1.Enabled:=false;
PostMessage(handle,wm_Destroy,0,0);
但是我不明白,直接设置Timer属性为false再在bitbtn上改为true为何不行??
再就是,这个关机程序适合Win98、95么?
再次谢谢! 晚上给你结帐!