請問要如何使Windows自動關閉程式及關機 |
答題得分者是:pgdennis
|
pprayer
高階會員 ![]() ![]() ![]() ![]() 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
|
pgdennis
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
引言: 有時候開著電腦而人卻必須要離開,但是在人回來之前想先把電腦關閉。 似乎可以用ExitWindowsEx來關閉電腦,可以直接使用嗎? 若要先關閉執行中程式,有什麼函式是可以找出所有在執行中的程式、關閉執行中的程式?文件裡面有提到這個參數,試試看 EWX_FORCE Forces processes to terminate. When this flag is set, Windows does not send the messages WM_QUERYENDSESSION and WM_ENDSESSION to the applications currently running in the system. This can cause the applications to lose data. Therefore, you should only use this flag in an emergency
------
星期一,二...無窮迴圈@@ |
ko
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
|
pprayer
高階會員 ![]() ![]() ![]() ![]() 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
感謝兩位的回答。 我在Win2000上面試 ExitWindowsEx(EWX_FORCE ,0)
會關閉所有程式回到登入畫面
用 ExitWindowsEx(EWX_SHUTDOWN ,0) 或 ExitWindowsEx(EWX_POWEROFF ,0)
則...沒有反應,我不知道怎麼形容,該行程式碼有跑過,但是跑過之後什麼也沒發生。 在Help裡面提到:
Windows NT: The calling process must have the SE_SHUTDOWN_NAME privilege.
跟這個有關係嗎?
|
pgdennis
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
應該是這樣
http://home.kimo.com.tw/bruce0829/share.htm
BCB的
以程式控制 Windows 2000 關機 //------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { HANDLE hToken; TOKEN_PRIVILEGES tkp; OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken); LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, false, &tkp, 0, (PTOKEN_PRIVILEGES)null, 0); // 下面八個動作中任選一種執行 .... // 一般關閉,關閉前會詢問其它執行中的程式是否存檔 //ExitWindowsEx(EWX_LOGOFF,0); // 登出, 重新登入使用者 //ExitWindowsEx(EWX_REBOOT,0); // 重新開機 //ExitWindowsEx(EWX_SHUTDOWN,0); // 結束作業系統,出現"您可以放心關機畫面" //ExitWindowsEx(EWX_POWEROFF,0); // 結束作業系統,並關閉電源(僅支援ATX 規格) // 強制關閉,其它執行中的應用程式資料並不會被儲存 //ExitWindowsEx(EWX_LOGOFF | EWX_FORCE,0); // 登出, 重新登入使用者 //ExitWindowsEx(EWX_REBOOT | EWX_FORCE,0); // 重新開機 //ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,0); // 結束作業系統 //ExitWindowsEx(EWX_POWEROFF | EWX_FORCE,0); // 結束作業系統,並關閉電源 (僅支援ATX 規格) }永遠追不上技術更新的速度~~ ![]()
------
星期一,二...無窮迴圈@@ |
pprayer
高階會員 ![]() ![]() ![]() ![]() 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
引言: 應該是這樣 http://home.kimo.com.tw/bruce0829/share.htm BCB的對不起,到這邊為止我一直無法看懂,可否麻煩解釋一下 像是tkp,OpenProcessToken,LookupPrivilegeValue,AdjustTokenPrivileges 這些對應到Delphi的話是什麼呢? 發表人 - pprayer 於 2003/07/18 09:13:55以程式控制 Windows 2000 關機 //------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { HANDLE hToken; TOKEN_PRIVILEGES tkp; OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken); LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, false, &tkp, 0, (PTOKEN_PRIVILEGES)null, 0); |
pgdennis
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
另外一個delphi範例http://www.infojet.cz/program/delphi/tips/tip0016.html,修改如下,在win98,winxp pro測試ok
function SetPrivilege( sPrivilegeName:string;bEnabled:boolean ) : boolean; var TPPrev, TP : TTokenPrivileges; Token : THandle; dwRetLen : DWord; begin Result := False; OpenProcessToken( GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token ); TP.PrivilegeCount := 1; if( LookupPrivilegeValue( Nil, PChar( sPrivilegeName ), TP.Privileges[0].LUID ) )then begin if( bEnabled )then begin TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; end else begin TP.Privileges[0].Attributes := 0; end; dwRetLen := 0; Result := AdjustTokenPrivileges( Token, False, TP, SizeOf( TPPrev ), TPPrev, dwRetLen ); end; CloseHandle( Token ); end; procedure TForm1.Button1Click(Sender: TObject); begin SetPrivilege('SeShutdownPrivilege',true); ExitWindowsEx(EWX_REBOOT or EWX_FORCE,0); end;永遠追不上技術更新的速度 發表人 - pgdennis 於 2003/07/18 15:19:48
------
星期一,二...無窮迴圈@@ |
ko
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
pprayer你好:
關於
引言:我在Win2000上面試 ExitWindowsEx(EWX_FORCE ,0) 會關閉所有程式回到登入畫面 用 ExitWindowsEx(EWX_SHUTDOWN ,0) 或 ExitWindowsEx(EWX_POWEROFF ,0) 則...沒有反應,我不知道怎麼形容,該行程式碼有跑過,但是跑過之後什麼也沒發生。那是因為你不夠權限,可以讓windows允許你的關機指令 因此 引言: function SetPrivilege( sPrivilegeName:string;bEnabled:boolean ) : boolean; .. .... ...... ........ end;就是要拿雞毛當令箭,告訴win我有權限關機...
------
====================== 昏睡~ 不昏睡~ 不由昏睡~ |
qoo1234
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
|
qoo1234
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
|
pprayer
高階會員 ![]() ![]() ![]() ![]() 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |