|
| |
Top ▶ プログラミングサンプル ▶ グローバルフック(HSP)
C#でのグローバルフックは不完全なものしか作成できなかったので、
「 HSP(HOT SOUP PROCESSOR)」でグローバルフックを実現するサンプルを掲載させていただきます。
つーさ様作の「 KeyHook.dll」を使用させていただきます。
「KeyHook.dll」を実行ファイルと同じフォルダに置いて作成します。
サンプルは現場作業で、バーコードリーダーのみでコンピュータを操作することを想定したものです。
バーコードリーダーは読み取り後、「ENTER」を入力する設定にしています。
| HSP 「KeyHook.hsp」 |
#ifndef khHook
#ifndef GetKeyName
#module
#uselib "user32.dll"
#func GetKeyNameText "GetKeyNameTextA" int,prefstr,int
#defcfunc GetKeyName int _lparam
GetKeyNameText _lparam, 64
return refstr
#global
#endif
#uselib "KeyHook.dll"
#func _khHook "_kh_hook@8" int, int
#define khHook(%1) oncmd gosub %1, $9313 : _khHook hWnd, $9313
#func khUnhook onexit "_kh_unhook@0"
#define khKeyCode wParam
#define khKeyName GetKeyName(lParam)
#define khStat (lParam >> 30 & 3)
#endif
|
| HSP 「MonitorBarCode.hsp」 |
#include "keyhook.hsp"
// フックをセット
khHook *onKeyHook
if stat = 0 : dialog "フック失敗" : end
// 初期設定
title "MonitorBarCode"
screen 0 , 290 , 20 , 4 + 8
width ,, ginfo_dispx - 400 , 10
mes "このウインドウは閉じないでください。"
strBarCode = ""
stop
*onKeyHook
if khStat = 0 {
// コード(/-3-6-9-)が入力されたらバーコード入力ソフトを起動
if (strBarCode = "-3-6-9-") & (khKeyName = "Enter") {
exec dir_exe + "\\InputBarCode.exe"
return 1 // バーコードリーダから入力される'Enter'をキャンセル
}
strBarCode = strBarCode + khKeyName
// '/'が押されたらキーバッファをクリア
if khKeyName = "/" : strBarCode = ""
// 'Caps Lock'が押されたらキーバッファをクリア
if khKeyName = "Caps Lock" : strBarCode = ""
// 'Enter'が押されたらキーバッファをクリア
if khKeyName = "Enter" : strBarCode = ""
// 'Shift'が押されたらキーバッファをクリア
if khKeyName = "Shift" : strBarCode = ""
}
return
|
| |
|
|