掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
フォーム無しのコンソール・アプリで FormCloseQuery の処理をするには? (ID:150110)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
メールでの質問のレスのために検索していたら,このページがヒットしました. ついでですので書き込みしておきます. 残念ながら,CanClose 相当の処理はできませんが,参考になるかと思います. [Ctrl] + [C] または [Alt] + [F4} あるいは [×] ボタンで閉じる時にダイアログを表示します. ダイアログは自動的に閉じます.[OK] ボタンをクリックする必要はありません. program Project1; {$APPTYPE CONSOLE} uses Winapi.Windows, Winapi.Messages, Vcl.Dialogs, Vcl.Forms; var FhConsole : HWND; //----------------------------------------------------------------------------- // SetConsoleCtrlHandler のコールバック関数 // 以下のイベントが使用可能 // 処理の変更 (閉じる処理の阻止等) はできない // // CTRL_C_EVENT : [Ctrl] + [C] の信号を受信 // CTRL_BREAK_EVENT : [Ctrl] + [Break] の信号を受信 // CTRL_CLOSE_EVENT : コンソールウィンドウを閉じる時の信号 // CTRL_LOGOFF_EVENT : ユーザーがログオフする時の信号 // CTRL_SHUTDOWN_EVENT : システムのシャットダウン時の信号 //----------------------------------------------------------------------------- function ConsoleEventProc(CtrlType: DWORD): Bool; stdcall; var LText : string; begin Result := True; LText := ''; case CtrlType of CTRL_C_EVENT: begin LText := '[Ctrl] + [C] のキー操作がありました.'; end; CTRL_CLOSE_EVENT: begin LText := 'ウィンドウが閉じようとしています'; end; else end; if LText <> '' then begin MessageBox(0, PChar(LText), '情報', MB_ICONINFORMATION); end; end; //----------------------------------------------------------------------------- begin Writeln('コンソールアプリのイベント'); // コンソールウィンドウのハンドルを取得 FhConsole := FindWindow(nil, PChar(Application.ExeName)); // イベントハンドラの設定 SetConsoleCtrlHandler(@ConsoleEventProc, True); SetConsoleMode(FhConsole, ENABLE_PROCESSED_INPUT); Readln; // ダイアログを見られるようにするためのタイムラグ Sleep(3000); end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.