[Win32] KeyboardInput naar andere app sturen, unicode?

Pagina: 1
Acties:

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 16-05 11:22
Is het mogelijk om keyboardinput wat géén virtual-keycode heeft naar een andere applicatie te sturen, zoals ë, é, è?

Sowieso wil ik graag weten of dit persé met SendInput (nee, keybd_event is superseded) moet gebruiken, of dat het ook met SendMessage kan (aangezien dan de ontvangende applicatie misschien niet persé de focus hoeft te hebben, maar ook de verwerking van m'n messages veel makkelijker is).

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
INPUT input;

input.type = INPUT_KEYBOARD;
input.ki.wVk = 0;
input.ki.wScan = 'ë';

while (true)
{
    input.ki.dwFlags = KEYEVENTF_UNICODE;
    ::SendInput(1, &input, sizeof(input));

    input.ki.dwExtraInfo = KEYEVENTF_UNICODE | KEYEVENTF_KEYUP;
    ::SendInput(1, &input, sizeof(input));
}

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 16-05 11:22
Ok, na enig onderzoek ben ik zelf tot de oplossing gekomen welke ik jullie niet wilde onthouden daar de vraag op internet best veel langskomt. Na het (ontzettend grappig geschreven) stukje van Elvis Rox gelezen te hebben, bleek ik de methode van PostMessage icm AttachThreadInput ook op WM_CHAR toe te kunnen passen :)

C++:
1
2
3
4
5
DWORD idAttach   = ::GetWindowThreadProcessId(::GetForeGroundWindow(), NULL);
DWORD idAttachTo = ::GetCurrentThreadId();

::AttachThreadInput(idAttach, idAttachTo, TRUE);
::PostMessage(::GetFocus(), WM_CHAR, 'ë', 0x8001);


Alleen de lParam heb ik nog niet aangepast, maar dat bleek niet uit te maken...
Misschien heeft iemand er ooit nog wat aan B)

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack