• R/O
  • SSH
  • HTTPS

splnch: Commit


Commit MetaInfo

Revisión81 (tree)
Tiempo2007-07-18 23:55:54
Autorsetoppu

Log Message

SetSystemPowerState()対応。

IsPwr~系で無効とされた場合は警告を表示するむように修正。

Cambiar Resumen

Diferencia incremental

--- Plugins/ExitWin/branches/Suspend and Hibernation Test/ShtOp/ShtOp.dpr (revision 80)
+++ Plugins/ExitWin/branches/Suspend and Hibernation Test/ShtOp/ShtOp.dpr (revision 81)
@@ -16,9 +16,11 @@
1616 var
1717 UpParam: String;
1818 CanExit: Boolean;
19+ HelpDisp: Boolean;
1920 ExtMode: Integer;
2021 HibernateMode: Boolean;
2122 SuspendFlag: Boolean;
23+ SystemPowerState: Boolean;
2224 VerInfo: TOSVersionInfo;
2325 tpSv: TTokenPrivileges;
2426 i: Integer;
@@ -30,10 +32,14 @@
3032 SetSuspendState : TSetSuspendState;
3133 begin
3234 CanExit := False;
35+ HelpDisp := True;
3336 ExtMode := 0;
3437 HibernateMode := False;
3538 SuspendFlag := False;
39+ SystemPowerState := False;
3640 w := 0;
41+ VerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
42+ GetVersionEx(VerInfo);
3743 hPowrprof := LoadLibrary('PowrProf.dll');
3844 if hPowrprof <> 0 then
3945 begin
@@ -40,6 +46,12 @@
4046 @IsPwrSuspendAllowed := GetProcAddress(hPowrprof, 'IsPwrSuspendAllowed');
4147 @IsPwrHibernateAllowed := GetProcAddress(hPowrprof, 'IsPwrHibernateAllowed');
4248 @SetSuspendState := GetProcAddress(hPowrprof, 'SetSuspendState');
49+ end
50+ else
51+ begin
52+ IsPwrSuspendAllowed := nil;
53+ IsPwrHibernateAllowed := nil;
54+ SetSuspendState := nil;
4355 end;
4456 for i := 1 to ParamCount do
4557 begin
@@ -76,33 +88,64 @@
7688 end
7789 else if UpParam = 'SUSPEND' then
7890 begin
79- if Assigned(@IsPwrSuspendAllowed) and IsPwrSuspendAllowed() then
80- begin
81- HibernateMode := False;
82- SuspendFlag := True;
83- end;
91+ SystemPowerState := True;
92+ HibernateMode := False;
93+ SuspendFlag := True;
8494 end
8595 else if UpParam = 'HIBERNATION' then
8696 begin
87- if Assigned(@IsPwrHibernateAllowed) and IsPwrHibernateAllowed() then
88- begin
89- HibernateMode := True;
90- SuspendFlag := True;
91- end;
92- end;
97+ SystemPowerState := True;
98+ HibernateMode := True;
99+ SuspendFlag := True;
100+ end;
93101 end;
94102
95103 if SuspendFlag and Assigned(@SetSuspendState) then
96104 begin
97105 // サスペンド処理を追加
98- SetSuspendState(HibernateMode, False, False);
106+ if SetSuspendState(HibernateMode, False, False) then
107+ SystemPowerState := False;
108+ HelpDisp := False;
109+ end;
110+ if SystemPowerState then
111+ begin
112+ if HibernateMode and Assigned(IsPwrHibernateAllowed) then
113+ begin
114+ // 休止状態の場合
115+ if not IsPwrHibernateAllowed() then
116+ begin
117+ SystemPowerState := False;
118+ s := '休止状態に移行できませんでした。' + #13#10;
119+ end;
120+ end;
121+ if not HibernateMode and Assigned(IsPwrSuspendAllowed) then
122+ begin
123+ // サスペンドの場合
124+ if not IsPwrSuspendAllowed() then
125+ begin
126+ SystemPowerState := False;
127+ s := 'サスペンドに移行できませんでした。' + #13#10;
128+ end;
129+ end;
130+ if SystemPowerState then
131+ begin
132+ if VerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
133+ GetSE_SHUTDOWN(tpSv);
134+
135+ HibernateMode := not HibernateMode;
136+ SetSystemPowerState(HibernateMode, False);
137+
138+ if VerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
139+ ReleaseSE_SHUTDOWN(tpSv);
140+ end
141+ else
142+ begin
143+ s := s + '電源オプションの設定を確認してください。';
144+ MessageBox(0, PChar(s), '情報', MB_ICONINFORMATION);
145+ end;
99146 end
100147 else if CanExit then
101148 begin
102- VerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
103-
104- GetVersionEx(VerInfo);
105-
106149 if VerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
107150 GetSE_SHUTDOWN(tpSv);
108151
@@ -138,7 +181,7 @@
138181 if VerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
139182 ReleaseSE_SHUTDOWN(tpSv);
140183 end
141- else
184+ else if HelpDisp then
142185 begin
143186 s := 'Windows の終了を行います。' + #13#10
144187 + #13#10
Show on old repository browser