WM_INPUTメッセージをアプリケーションに送信しようとしていますが、解決できないいくつかのハードルに遭遇します。次のようなRAWINPUT構造を作成しました。
//try sending 'W'
RAWINPUT raw = {0};
char c = 'W';
//header
raw.header.dwSize = sizeof(raw);
raw.header.dwType = RIM_TYPEKEYBOARD;
raw.header.wParam = 0; //(wParam & 0xff =0 => 0)
raw.header.hDevice = hDevice;
//data
raw.data.keyboard.Reserved = 0;
raw.data.keyboard.Flags = RI_KEY_MAKE; //Key down
raw.data.keyboard.MakeCode = static_cast<WORD>(MapVirtualKeyEx(c, MAPVK_VK_TO_VSC, GetKeyboardLayout(0)));
raw.data.keyboard.Message = WM_KEYDOWN;
raw.data.keyboard.VKey = VkKeyScanEx(c, GetKeyboardLayout(0));
raw.data.keyboard.ExtraInformation = 0; //???
//Send the message
SendMessage(hPSWnd, WM_INPUT, 0, (LPARAM)raw/*Raw input handle*/); //TODO: Handle to raw input
私が立ち往生している場所は少なくとも2つの位置です:
何か特別なものを渡す必要があります
raw.data.keyboard.ExtraInformation
かGetMessageExtraInfo()
、それとも、ここに何かを渡す必要はありませんか?WM_INPUTメッセージのLPARAMパラメータには、アドレスや構造自体ではなく、RAWINPUT構造へのハンドルが含まれています...このようなハンドルを作成するにはどうすればよいですか?
ウィンドウがアクティブウィンドウである必要があるため、SendInputを使用したくありません。私はすでにこれを行っており、正常に機能しましたが、別のウィンドウをアクティブにすると(もちろん)、前のウィンドウでは機能しなくなりました。
つまり、私が達成しようとしているのは、アクティブなアプリケーションである必要のないアプリケーションに入力を送信することです。