キーボードイベントの送信


core  2006-07-13 14:09:55  No: 62504  IP: 192.*.*.*

キーボードイベントを特定のプロセスにて発生させるには、
どうしたらよいでしょうか?
keybd_eventを使うと、フォーカスがあるプロセスで、
キーボードイベントが起こると思うのです。

まだ学び始めたばかりの初心者で、変な質問だったらごめんなさい。
よろしくおねがいします。

編集 削除
subru  2006-07-13 18:54:56  No: 62505  IP: 192.*.*.*

特定のプロセスのWindowハンドルを使って
PostMessageまたはSendMessageを使ってみてはいかがでしょうか。

編集 削除
キー  2006-07-14 14:04:41  No: 62506  IP: 192.*.*.*

SetFocusでキーボードフォーカスを与えて
keybd_eventでイベントを起こす感じかと。
押したキーは離すことも忘れずにー

編集 削除
通りすがり  2006-08-21 15:15:51  No: 62507  IP: 192.*.*.*

keybd_eventを使う前にSetForegroundWindow関数で目的のウインドウに
フォーカスを移してから行ってみては?
また、keybd_eventではなくSendInput関数で記述するのはどうかな?

#define _WIN32_WINNT       (0x0500)
#include <windows.h>

/* キーの設定用関数 */
static VOID FuncSetKeybrd( LPINPUT lpKey, WORD wVKey, BOOL bKeyDown )
{
        lpKey->type           = INPUT_KEYBOARD;
        lpKey->ki.wVk         = wVKey;
        lpKey->ki.wScan       = (WORD)MapVirtualKey( wVKey, 0 );
        lpKey->ki.dwFlags     = (bKeyDown ? 0 : KEYEVENTF_KEYUP);
        lpKey->ki.dwExtraInfo = 0;
        lpKey->ki.time        = 0;
}

/* キーボードイベントの送信 */
static VOID FuncExecWinKey( VOID )
{
        INPUT     Key[ 16 ];
        LPINPUT lpKey = Key;
        
        FuncSetKeybrd( lpKey++, 'A', TRUE );                // 'A'キーを押す
        FuncSetKeybrd( lpKey++, 'A', FALSE );               // 'A'キーを離す
        FuncSetKeybrd( lpKey++, 'B', TRUE );
        FuncSetKeybrd( lpKey++, 'B', FALSE );
        FuncSetKeybrd( lpKey++, 'C', TRUE );
        FuncSetKeybrd( lpKey++, 'C', FALSE );
        FuncSetKeybrd( lpKey++, VK_CONTROL, TRUE );
        FuncSetKeybrd( lpKey++, 'J', TRUE );
        FuncSetKeybrd( lpKey++, 'J', FALSE );
        FuncSetKeybrd( lpKey++, VK_CONTROL, FALSE );
        FuncSetKeybrd( lpKey++, '1', TRUE );
        FuncSetKeybrd( lpKey++, '1', FALSE );
        FuncSetKeybrd( lpKey++, '2', TRUE );
        FuncSetKeybrd( lpKey++, '2', FALSE );
        FuncSetKeybrd( lpKey++, '3', TRUE );
        FuncSetKeybrd( lpKey++, '3', FALSE );
        SetForegroundWindow( FindWindow(TEXT("Notepad"),NULL) );      // メモ帳のウインドウハンドルを検索&設定
        SendInput( (UINT)(lpKey - Key), Key, sizeof(INPUT) );
}
/*
●動作
①"ABC"を入力
②[改行]を入力
③"123"を入力
*/

編集 削除