No.3ベストアンサー
- 回答日時:
★Windows の終了阻止について
・ポイントは『WM_QUERYENDSESSION』メッセージです。→知っていましたか?
・プロシージャ関数内で上記のメッセージをキャッチして『0』をリターンすれば終了を
阻止できます。→『DefWindowProc』では通常『1』を返します。『1』をリターンすれば
Windows が終了できることになります。ただし、他のソフトで『0』をリターンしていれば
Windows は終了処理を中止します。
・『WM_QUERYENDSESSION』メッセージは Windows が終了するときに、全てのウィンドウに
送られるため、どれか1つのソフト(自作ソフトなど)が『0』をリターンすれば終了を
阻止できることになるのです。→すごく簡単です。
サンプル1:ウインドウの場合
case WM_QUERYENDSESSION:
return( 0 );
サンプル2:ダイアログの場合
case WM_QUERYENDSESSION:
SetWindowLong( hDlg, DWL_MSGRESULT, 0 );
return( TRUE );
※ダイアログの場合は、SetWindowLong 関数で『DWL_MSGRESULT』を指定して『0』を返して下さい。
最後に:
・関連メッセージとして『WM_ENDSESSION』があります。
このメッセージは『WM_QUERYENDSESSION』で終了可能とされたとき(1をリターンしたとき)に
送られてきます。つまり『WM_QUERYENDSESSION』メッセージで『1』をリターンした場合に
その結果を『WM_ENDSESSION』に伝える事になります。ですから『0』をリターンしていた場合は
『WM_ENDSESSION』メッセージは発生しないことになります。
・以上。おわり。
お願い:
・私は Windows のシャットダウン、再起動、ログオフなどの ExitWindowEx() 関数を使った終了は
ミニソフトなどに組み込んで使っていますが、『休止状態(H)』、『スタンバイ(S)』の方法が
分からずにいます。もしよければ参考になる URL や方法を『この回答へのお礼』に記述して
くれませんか?お願いします。
今回の件では、ありがとうございました。
ウインドープロシージャー内に組み込んでみます。
そこで、お礼になるかどうか?下記の方法しか知りません。
ご存知でしたらごめんなさい。
以前に何処かで検索したのですが・・・記憶がありません。
HANDLEhToken;
TOKEN_PRIVILEGES tknPri;
// アクセストークンを開く
if ( OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) == FALSE ) {}
// ローカル一意識別子と特権名を取得
if ( LookupPrivilegeValue( NULL,SE_SHUTDOWN_NAME,&(tknPri.Privileges[0].Luid) ) == FALSE ) {}
tknPri.PrivilegeCount = 1;
tknPri.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// アクセストークンを有効にする
if ( AdjustTokenPrivileges( hToken,FALSE,&tknPri,0,NULL,NULL ) == FALSE ) {}
// shutdown後、電源を切る
//if ( ExitWindowsEx( EWX_POWEROFF,0 ) == FALSE ) {}
//#define EWX_LOGOFF 0
//#define EWX_SHUTDOWN 1
//#define EWX_REBOOT 2
//#define EWX_FORCE 4
//#define EWX_POWEROFF 8
//休止
if ( SetSystemPowerState( 0,FALSE) == FALSE ) {}
//第1パラメータは 0=休止 ; 1=スタンバイ
//第2パラメータは 各アプリケーションに
//サスペンドしても良いか問い合わせる(FALSE)か、
//強制的にサスペンドする(TRUE)かを選択するものである。
No.4
- 回答日時:
★情報提供、有り難うございました。
・これから『SetSystemPowerState』関数について調べたいと思います。
・『OpenProcessToken』、『LookupPrivilegeValue』、『AdjustTokenPrivileges』の部分は
私が知っている方法と同じようです。
・休止状態、スタンバイは『SetSystemPowerState』API関数のようですね。
7777777v さん有り難うございます。
最後に:
・この質問に回答して良かったです。
・以上。おわり。→私も自作ソフトに『休止状態』、『スタンバイ』機能を組み込みます。
参考URL:http://www.winapi-database.com/Message/WM/index. …
No.2
- 回答日時:
★回答者 No.1 さんへの補足。
・既に『無効』に設定していても何故か『エラー報告ダイアログ』が表示されることがあります。
これはかなり重度の高い致命的エラーの場合です。→この場合は表示されてしまうようです。
・また自動的に閉じる機能は標準(Windows機能)ではありませんね。
最後に:
・ソフトを自作できるのであれば、勝手に終了されないように出来ますよ。→ただし、
タスクマネージャの強制終了を選択すると、そちらが優先されますので阻止は難しいです。
・通常の終了ダイアログと同じ『シャットダウン・再起動』での終了ならば阻止できます。
ただし、阻止できるようにするには、自作ソフトを作成できればのお話ですよ。
・以上。おわり。→自作できる場合はアドバイスします。
この回答への補足
回答者:Oh-Orangeさん
ありがとうございます・・・
私はVC++で休止の実行ファイルを作ってデスクトップに貼り付けて、休止を1クリックで簡単にできるようにしています。
今のところ、本件は解決していますが、今後の勉強のためにアドバイスを頂ければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- その他(プログラミング・Web制作) マウスオーバー→ホイール回転でスクロールできない 2 2022/10/31 10:06
- Outlook(アウトルック) 【 Windows 10 】アドレス帳に正しくインポートを完了させたい。 3 2023/04/23 13:41
- Visual Basic(VBA) Application.Dialogs(xlDialogFileDelete).Showの件 1 2023/02/22 10:02
- デスクトップパソコン windows7を使っているパソコンでの質問です。先日動作が遅く再起動かけると「windowsを起動 9 2022/06/16 21:31
- その他(ソフトウェア) F-BASICで計算中の実行が中途で勝手に止まり、大変困っています。 2 2023/03/02 16:15
- Windows 10 数年前からWindows10 の Update ができないです。なぜですか? 7 2022/11/09 06:03
- デスクトップパソコン 初めまして、おはようございます。 此の度ヤフオクよりDELL Workstation〔PRECISI 4 2023/04/28 09:03
- BTOパソコン 数時間使用しない状態からPCを起動に失敗後、 自動修復画面で再起動をすると正常に動き出す 3 2022/09/26 22:01
- デスクトップパソコン ドキュメントホルダーを選択すると「場所が利用出来ません」というメッセージが表示される 4 2023/01/15 07:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
windows XPにてCDFS形式のCD...
-
pingの応答で「General Failure...
-
MS32DLL.dll.vbsについて。
-
Google Chromeを開くと、「警告...
-
Office 2016 Mac
-
アップルはマイクロソフトの傘...
-
windows vista isoダウンロード
-
Runtime Error! の解決方法
-
ディスクレスPCゲームのバック...
-
Ad-Ware Freeがエラー2343でイ...
-
Administratorでログインしても...
-
インストロ―ルIDはどうすれば...
-
InstallShield 関係のインスト...
-
トロンとマイクロソフトの家電...
-
ウインドウズ98のパソコンを...
-
マイクロソフトのハロウィン文...
-
itunes アンインストール出来...
-
CentOSにてCPUが認識しない
-
Photo Loderで・・・
-
ホームページのトップページが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pingの応答で「General Failure...
-
Mcafeeを入れたらWindowsの動作...
-
windows XPにてCDFS形式のCD...
-
CEF Initialion Error
-
PCでのCD再生時の音割れ
-
印刷物の文字をWordにコピーで...
-
「あんしんスキャンが予期せず...
-
パソコンが週1~週2くらいで...
-
エプソンダイレクトのPCの初期化
-
ソフトとドライバーの違いをお...
-
非アクティブウィンドウで自動...
-
デフラグはセーフモードで実行...
-
『識別情報を検証できません』...
-
起動時に毎回エラーが表示され...
-
ネカフェのパソコンの様に電源...
-
デジカメラの『画像とビデオの...
-
*レジストリ編集するソフトない...
-
拡張子「reg」のファイルとリカ...
-
タスクマネージャーのプロセス
-
「Windows FAXとスキャン」が見...
おすすめ情報