複数キーの同時入力をスクリプトで実装する

PowerBuilder Tips

方法

[Shift | Tab] キーといった複数キー入力の組み合わせを別の単一のキーに置き換えたい場合など、キーの同時入力をスクリプトによって実装するには、外部関数として定義した Windows API の keybd_event 関数を使用します。

たとえば、データウィンドウ上で [Shift | Tab] キー (フォーカスを前の項目に戻す) を [F4] キーで代替する場合は、データウィンドウ内の [pbm_dwnkey] をイベント ID にもつユーザーイベントを定義し、そのイベント内で user32.dll の keybd_event 関数を呼び出します。

keybd_event 関数は、引数により「キーを押す」、「キーを離す」という動作を指定でき、「キーを押す」命令のあと「キーを離す」命令を呼び出さない限り、そのキーは押し続けた状態となります。このため [Shift] キーを押す命令を呼び出した後で [Tab] キーを押す命令を呼び出すことでキーの同時押しを実装できます。

[Global External Function]

subroutine keybd_event(uint bVk,uint bScan,long dwFlags,long dwExtraInfo ) library 'user32.dll'

[グローバル関数]

キーを押す

global function integer of_presskey (integer ai_key);
keybd_event(ai_key,0,0,0)   
return 1
end function

キーを離す

global function integer of_releasekey (integer ai_key);
keybd_event(ai_key,0,2,0)   
return 1
end function

[データウィンドウの pbm_dwnkey のイベント]

CONSTANT INT VK_SHIFT = 16      // SHIFT キー
CONSTANT INT VK_TAB = 09        // TAB キー

// F4キー押下時
IF key = KeyF4! THEN

    //SHIFT キーと TAB キーを同時押し
    of_presskey(VK_SHIFT)
    of_presskey(VK_TAB)
    of_releasekey(VK_SHIFT)
    of_releasekey(VK_TAB)
    Yield()

END IF

 

Tips情報

プロダクト :PowerBuilder

バージョン :2019R3

Tips 一覧を見る
PowerBuilder マイグレーション
PowerBuilder学習、動画で始めちゃう?