Sinds jaar en dag gebruik ik al volgende code om commands te sturen naar Q3 engine-based games.
Tot zover werkte dit steeds voor Q3, RTCW, COD, ...
Maar onlangs dacht ik het ff uit te proberen op Doom 3, nieuwe game-engine. Blijkt dat daar de WM_SETTEXT wel lukt, maar de WM_CHAR enter message heeft een biep als resultaat.
Zou dit op een manier kunnen geblokt worden als je weet dat het manueel wel lukt? (je kan enteren in dat textveld)
Ik heb al een tijdje zitten te zoeken achter eventuele workarounds, maar steeds zonder resultaat
.
Was het proberen waard, maar niet met resultaat:
Kreeg ik niet aan het werk, deed gewoon niets:
Ik kreeg de focus maar niet gezet, keybd_event leek wel te werken (maar niet op het juiste window). :
Iemand een oplossing voor dat focus probleem eventueel?
Is er eventueel (nog) een andere manier waarop het wel zou lukken?
Of ziet iemand een reden waarom het op de originele wijze niet werkt?
C#:
1
2
3
4
5
6
7
8
9
| [DllImport("user32.dll",EntryPoint="SendMessage", CharSet=CharSet.Auto)] private static extern int SendMessage( int hwnd, int uMsg, int wParam, StringBuilder lParam); private const int WM_CHAR = 0x0102; private const int WM_SETTEXT = 0x000c; ... SendMessage(this.TXT_COMMAND_WINDOW_HANDLER, WM_SETTEXT, command.Length, new StringBuilder(command)); SendMessage(this.TXT_COMMAND_WINDOW_HANDLER, WM_CHAR, 13, new StringBuilder()); |
Tot zover werkte dit steeds voor Q3, RTCW, COD, ...
Maar onlangs dacht ik het ff uit te proberen op Doom 3, nieuwe game-engine. Blijkt dat daar de WM_SETTEXT wel lukt, maar de WM_CHAR enter message heeft een biep als resultaat.
Zou dit op een manier kunnen geblokt worden als je weet dat het manueel wel lukt? (je kan enteren in dat textveld)
Ik heb al een tijdje zitten te zoeken achter eventuele workarounds, maar steeds zonder resultaat
Was het proberen waard, maar niet met resultaat:
C#:
1
| SendMessage (this.TXT_COMMAND_WINDOW_HANDLER, NEXTDLGCTL, 0, new StringBuilder()); |
Kreeg ik niet aan het werk, deed gewoon niets:
C#:
1
2
3
4
5
6
| private const int WM_KEYDOWN=0x0100; private const int VK_RETURN = 0x0D; ... SendMessage(this.TXT_COMMAND_WINDOW_HANDLER, WM_KEYDOWN, 13, new StringBuilder()); // of deze : //SendMessage(this.TXT_COMMAND_WINDOW_HANDLER, WM_KEYDOWN, VK_RETURN, new StringBuilder()); |
Ik kreeg de focus maar niet gezet, keybd_event leek wel te werken (maar niet op het juiste window). :
C#:
1
2
3
4
5
6
7
8
9
10
11
12
| [DllImport("user32")] public static extern int PostMessage(int hWnd, int msg, int wParam, int lParam); [DllImport("user32")] private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); private const int WM_SETFOCUS = 0x0007; private const int VK_RETURN = 0x0D; ... int returnValue = PostMessage(test, WM_SETFOCUS, 0, 0); keybd_event(VK_RETURN,0,0,0); |
Iemand een oplossing voor dat focus probleem eventueel?
Is er eventueel (nog) een andere manier waarop het wel zou lukken?
Of ziet iemand een reden waarom het op de originele wijze niet werkt?
ZOEM!