複数キーの同時入力をスクリプトで実装する
2022/08/03
方法
[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