OSのシャットダウン時に、プログラムの終了処理をしたいのですが、
どうすればできますか?(AB4.24です。)
WM_QUERYENDSESSIONを使えば良さそうなのですが、その先がわかりません。
よろしくお願いいたします。
OSシャットダウン時の終了処理の書き方
-
- 記事: 217
- 登録日時: 2006年2月05日(日) 17:10
- お住まい: 東京都
Re: OSシャットダウン時の終了処理の書き方
とりあえずコールバック関数を以下の様に記載すれば実現できます。
ちなみにWindows10でしょうか?
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
SELECT CASE dwMsg
CASE WM_QUERYENDSESSION
'Windows シャットダウン処理
MessageBox(hMainWnd,"Windows10(1909) シャットダウンします","TEST",MB_OK)
CASE ELSE
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
END SELECT
End Function
そこでWindows7とWindows10(1909)でテストしました。
Windows7では問題なく動作します。
Windows10の場合シャットダウンするとシャットダウン自体が中断されます。
なので期待通りに動作しないと思います。
まあ実行すればわかりますが。
ご確認願います。
よろしくお願いいたします。
ちなみにWindows10でしょうか?
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
SELECT CASE dwMsg
CASE WM_QUERYENDSESSION
'Windows シャットダウン処理
MessageBox(hMainWnd,"Windows10(1909) シャットダウンします","TEST",MB_OK)
CASE ELSE
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
END SELECT
End Function
そこでWindows7とWindows10(1909)でテストしました。
Windows7では問題なく動作します。
Windows10の場合シャットダウンするとシャットダウン自体が中断されます。
なので期待通りに動作しないと思います。
まあ実行すればわかりますが。
ご確認願います。
よろしくお願いいたします。
Re: OSシャットダウン時の終了処理の書き方
たかせ様
アドバイスありがとうございます。
環境はWin10です。
調べてみましたら、下記手順が必要な感じです。
1、WM_QUERYENDSESSIONにてFALSEを戻す。
2、WM_ENDSESSIONにて処理する。
下記の様に書いてみましたがFALSEを戻す所でWinowsがエラーを返します。
戻し方を教えて頂きませんか?
宜しくお願い致します。
アドバイスありがとうございます。
環境はWin10です。
調べてみましたら、下記手順が必要な感じです。
1、WM_QUERYENDSESSIONにてFALSEを戻す。
2、WM_ENDSESSIONにて処理する。
下記の様に書いてみましたがFALSEを戻す所でWinowsがエラーを返します。
戻し方を教えて頂きませんか?
宜しくお願い致します。
[ここをクリックすると内容が表示されます]
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
'Windowsシャットダウンを抑制する。
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
SELECT CASE dwMsg
CASE WM_QUERYENDSESSION
return FALSE
CASE WM_ENDSESSION
MessageBox(hMainWnd,"Windows10(1909) シャットダウンします","TEST",MB_OK)
CASE ELSE
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
END SELECT
End Function
'Windowsシャットダウンを抑制する。
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
SELECT CASE dwMsg
CASE WM_QUERYENDSESSION
return FALSE
CASE WM_ENDSESSION
MessageBox(hMainWnd,"Windows10(1909) シャットダウンします","TEST",MB_OK)
CASE ELSE
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
END SELECT
End Function
-
- 記事: 217
- 登録日時: 2006年2月05日(日) 17:10
- お住まい: 東京都
Re: OSシャットダウン時の終了処理の書き方
AB4.24ですよね?
CASE WM_QUERYENDSESSION
return FALSE
上記で記載だと一つ気になった点があります。
「return FALSE」の部分です。
おそらくC/C++のコーディング例を参考にされたと思います。
AB4.24の場合はGOSUB命令でサブルーチンを呼びだしRETURN命令により呼び出し元に復帰します。
GOSUB命令やRETURN命令についての詳細はABのヘルプを参照してください。
なので
CASE WM_QUERYENDSESSION
return FALSEを
CASE WM_QUERYENDSESSION
MainWndProc=FALSEに
変更すると良いと思いますが?
ご確認お願いします。
よろしくお願いいたします。
CASE WM_QUERYENDSESSION
return FALSE
上記で記載だと一つ気になった点があります。
「return FALSE」の部分です。
おそらくC/C++のコーディング例を参考にされたと思います。
AB4.24の場合はGOSUB命令でサブルーチンを呼びだしRETURN命令により呼び出し元に復帰します。
GOSUB命令やRETURN命令についての詳細はABのヘルプを参照してください。
なので
CASE WM_QUERYENDSESSION
return FALSEを
CASE WM_QUERYENDSESSION
MainWndProc=FALSEに
変更すると良いと思いますが?
ご確認お願いします。
よろしくお願いいたします。