アプリケーションの二重起動を抑制する

PowerBuilder Tips

方法

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

Tips 一覧を見る
PowerBuilder マイグレーション