次のエントリ: GDで画像編集 [perl]
キーコードの送信
2007-07-18-2 / カテゴリ: [programming][win][c] / [permlink]
キーボードエミュレーション、とでも言うのかな。
キーボードの入力をプログラムで行う。
winuser.h を include する。
単一キーの場合
キーコンビネーション (Shift - a => 'A')
コントロールなら VK_CONTROL とか。winuser.h に定義されてる。
正直よくわかってない^^;
会社のPCは「5分でスクリーンロックするよう設定すること」という社内ルールがあるが、PCを操作せずに参照しながら作業の時にすげーウザいので、240秒毎に Ctrl 押下イベントを上げ続けるアプリを(こっそり)作ってみた :p
まぁ、PCの参照onlyの作業ってあんまりないから作っただけで使ってないけど。
参考
ctrl + v のエミュレーション
SendInput - MSDN
API見た感じでは、nInputs(第1引数)とcbSize(第3引数)の値でまとめてイベント要求できそうなんだけど、うまくいかない…(戻り値が0になる)
キーボードの入力をプログラムで行う。
winuser.h を include する。
単一キーの場合
INPUT key; LPINPUT lpKey = &key; WORD wKey; wKey = 'A'; lpKey->type = INPUT_KEYBOARD; lpKey->ki.wVk = wKey; lpKey->ki.wScan = (WORD)MapVirtualKey(wKey, 0); lpKey->ki.dwFlags = 0; lpKey->ki.dwExtraInfo = 0; lpKey->ki.time = 0; SendInput((UINT)1, lpKey, sizeof(INPUT)); lpKey->ki.dwFlags = KEYEVENTF_KEYUP; SendInput((UINT)1, lpKey, sizeof(INPUT));アクティブなウインドウに a が入力される。'a' でなく 'A' なのがポイント?
キーコンビネーション (Shift - a => 'A')
// 'a' の SendInput の前に wKey = VK_SHIFT; lpKey->type = INPUT_KEYBOARD; lpKey->ki.wVk = wKey; lpKey->ki.wScan = (WORD)MapVirtualKey(wKey, 0); lpKey->ki.dwFlags = 0; lpKey->ki.dwExtraInfo = 0; lpKey->ki.time = 0; SendInput((UINT)1, lpKey, sizeof(INPUT)); // 'a'(KEYUP) の後に wKey = VK_SHIFT; lpKey->type = INPUT_KEYBOARD; lpKey->ki.wVk = wKey; lpKey->ki.wScan = (WORD)MapVirtualKey(wKey, 0); lpKey->ki.dwFlags = KEYEVENTF_KEYUP; lpKey->ki.dwExtraInfo = 0; lpKey->ki.time = 0; SendInput((UINT)1, lpKey, sizeof(INPUT));で、'A' が入力される。
コントロールなら VK_CONTROL とか。winuser.h に定義されてる。
正直よくわかってない^^;
会社のPCは「5分でスクリーンロックするよう設定すること」という社内ルールがあるが、PCを操作せずに参照しながら作業の時にすげーウザいので、240秒毎に Ctrl 押下イベントを上げ続けるアプリを(こっそり)作ってみた :p
まぁ、PCの参照onlyの作業ってあんまりないから作っただけで使ってないけど。
参考
ctrl + v のエミュレーション
SendInput - MSDN
API見た感じでは、nInputs(第1引数)とcbSize(第3引数)の値でまとめてイベント要求できそうなんだけど、うまくいかない…(戻り値が0になる)
次のエントリ: GDで画像編集 [perl]
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
最終更新時間: 2013-05-02 16:12