ab.com コミュニティ

ActiveBasicを通したコミュニケーション
前回の訪問日時: 2024年4月13日(土) 01:52 現在時刻 - 2024年4月13日(土) 01:52

全ての表示時間は UTC+09:00 です




 [ 4 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2020年11月18日(水) 08:56 
OSのシャットダウン時に、プログラムの終了処理をしたいのですが、
どうすればできますか?(AB4.24です。)

WM_QUERYENDSESSIONを使えば良さそうなのですが、その先がわかりません。
よろしくお願いいたします。


ページトップ
   
 
投稿記事Posted: 2020年11月18日(水) 17:35 
オフライン

登録日時: 2006年2月05日(日) 17:10
記事: 215
お住まい: 東京都
とりあえずコールバック関数を以下の様に記載すれば実現できます。
ちなみに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の場合シャットダウンするとシャットダウン自体が中断されます。
なので期待通りに動作しないと思います。
まあ実行すればわかりますが。

ご確認願います。
よろしくお願いいたします。


ページトップ
   
 
投稿記事Posted: 2020年11月19日(木) 16:19 
たかせ様

アドバイスありがとうございます。
環境はWin10です。

調べてみましたら、下記手順が必要な感じです。

1、WM_QUERYENDSESSIONにてFALSEを戻す。
2、WM_ENDSESSIONにて処理する。

下記の様に書いてみましたがFALSEを戻す所でWinowsがエラーを返します。
戻し方を教えて頂きませんか?

宜しくお願い致します。


ページトップ
   
 
投稿記事Posted: 2020年11月20日(金) 15:52 
オフライン

登録日時: 2006年2月05日(日) 17:10
記事: 215
お住まい: 東京都
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に

変更すると良いと思いますが?
ご確認お願いします。
よろしくお願いいたします。


ページトップ
   
 
 [ 4 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Bing [Bot], CCBot & ゲスト[0人]


トピック投稿: 不可
返信投稿: 不可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean