アプリケーションの二重起動を抑制する
2021/01/19
方法
PowerBuilder で作成されたアプリケーションの二重起動を抑制する方法として、アプリケーションがすでに起動されている場合は新たに起動せずに、そのアプリケーションをアクティブにする方法があります。
PowerBuilder 単体ではアプリケーションが実行されているかどうかを確認する機能はないため、Windows API の FindWindow 関数を使用してアプリケーションが起動しているか確認します。また、アプリケーションをアクティブにするには SetForegroundWindow 関数を利用します。
以下の例では、起動する Window のタイトルが「Main Window」のアプリケーションを確認し、存在する場合はアクティブにし、存在しない場合は起動します。
【例】
グローバル外部関数の宣言
PUBLIC FUNCTION unsignedlong FindWindow (long classname, string windowname) LIBRARY "user32.dll" ALIAS FOR FindWindowW PUBLIC FUNCTION int SetForegroundWindow (unsignedlong hwnd) LIBRARY "user32.dll"
Application オブジェクトの Open イベント
unsignedlong hwnd // これから開くウィンドウ "Main Window" の存在を確認 hwnd = FindWindow( 0, "Main Window") IF hwnd = 0 THEN // 存在しない場合はウィンドウを開く Open(w_main) ELSE // 既存のウィンドウをアクティブにし、アプリケーションを停止 SetForegroundWindow(hwnd) HALT CLOSE END IF
Tips情報
プロダクト :PowerBuilder
バージョン :2017R3