Exetools

Exetools (https://forum.exetools.com/index.php)
-   General Discussion (https://forum.exetools.com/forumdisplay.php?f=2)
-   -   WinAPI: No WM_COMMAND Message? (https://forum.exetools.com/showthread.php?t=9788)

aldente 07-04-2006 22:25

WinAPI: No WM_COMMAND Message?
 
Hello!

I'm trying to remote control an application using SendMessage. When you send ALT+P to that application, it does what it should do, but I want to control it directly by sending a message. So I do NOT want to send KEYDOWN and KEYUP messages, but the message that invokes the proper function (normally WM_COMMAND). Instead, there are hundreds of strange other messages within less than one second.

The problem with this app is: There are no WM_COMMAND messages, like in 'normal' applications, so I'm a bit confused :mad: Maybe some API-expert can help me?

This is what happens after lifting the last key (press ALT, press P, lift P, lift ALT):

Code:

<00040> 0024094C P WM_KEYUP nVirtKey:VK_MENU cRepeat:1 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:1 fUp:1
<00041> 0024094C S message:0xBD01 [Benutzerdefiniert:WM_USER+47361] wParam:00000012 lParam:C0000001
<00042> 0024094C R message:0xBD01 [Benutzerdefiniert:WM_USER+47361] lResult:00000000
<00043> 003E07A6 S WM_NCHITTEST xPos:802 yPos:481
<00044> 003E07A6 R WM_NCHITTEST nHittest:HTCLIENT
<00045> 003E07A6 S WM_NCHITTEST xPos:802 yPos:481
<00046> 003E07A6 R WM_NCHITTEST nHittest:HTCLIENT
<00047> 003E07A6 S WM_SETCURSOR hwnd:003E07A6 nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
<00048> 003E07A6 S WM_NCHITTEST xPos:802 yPos:481
<00049> 003E07A6 R WM_NCHITTEST nHittest:HTCLIENT
<00050> 003E07A6 S WM_NCHITTEST xPos:802 yPos:481
<00051> 003E07A6 R WM_NCHITTEST nHittest:HTCLIENT
<00052> 004F07F2 S WM_SETCURSOR hwnd:003E07A6 nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
<00053> 004406DC S WM_SETCURSOR hwnd:003E07A6 nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
<00054> 006306FE S WM_SETCURSOR hwnd:003E07A6 nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
<00055> 004E07C6 S WM_SETCURSOR hwnd:003E07A6 nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
<00056> 004E07C6 R WM_SETCURSOR fHaltProcessing:False
<00057> 006306FE R WM_SETCURSOR fHaltProcessing:False
<00058> 004406DC R WM_SETCURSOR fHaltProcessing:False
<00059> 004F07F2 R WM_SETCURSOR fHaltProcessing:False
<00060> 003E07A6 R WM_SETCURSOR fHaltProcessing:False
<00061> 003E07A6 P WM_MOUSEMOVE fwKeys:0000 xPos:398 yPos:9
<00062> 003E07A6 S WM_NCHITTEST xPos:802 yPos:481
<00063> 003E07A6 R WM_NCHITTEST nHittest:HTCLIENT
<00064> 003E07A6 S WM_NCHITTEST xPos:802 yPos:481
<00065> 003E07A6 R WM_NCHITTEST nHittest:HTCLIENT
<00066> 003E07A6 S WM_NCHITTEST xPos:802 yPos:481
<00067> 003E07A6 R WM_NCHITTEST nHittest:HTCLIENT
<00068> 003E07A6 S WM_NCHITTEST xPos:802 yPos:481
<00069> 003E07A6 R WM_NCHITTEST nHittest:HTCLIENT
<00070> 003E07A6 S WM_NCHITTEST xPos:802 yPos:481
<00071> 003E07A6 R WM_NCHITTEST nHittest:HTCLIENT
<00072> 003E07A6 S WM_SETCURSOR hwnd:003E07A6 nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
<00073> 003E07A6 S WM_NCHITTEST xPos:802 yPos:481
<00074> 003E07A6 R WM_NCHITTEST nHittest:HTCLIENT
<00075> 003E07A6 S WM_NCHITTEST xPos:802 yPos:481
<00076> 003E07A6 R WM_NCHITTEST nHittest:HTCLIENT
<00077> 004F07F2 S WM_SETCURSOR hwnd:003E07A6 nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
<00078> 004406DC S WM_SETCURSOR hwnd:003E07A6 nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
<00079> 006306FE S WM_SETCURSOR hwnd:003E07A6 nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
<00080> 004E07C6 S WM_SETCURSOR hwnd:003E07A6 nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
<00081> 004E07C6 R WM_SETCURSOR fHaltProcessing:False
<00082> 006306FE R WM_SETCURSOR fHaltProcessing:False
<00083> 004406DC R WM_SETCURSOR fHaltProcessing:False
<00084> 004F07F2 R WM_SETCURSOR fHaltProcessing:False
<00085> 003E07A6 R WM_SETCURSOR fHaltProcessing:False
<00086> 003E07A6 P WM_MOUSEMOVE fwKeys:0000 xPos:398 yPos:9

I logged it three different times, maybe that can help you:

http://home.scarlet.be/~lb178476/test1.txt
http://home.scarlet.be/~lb178476/test2.txt
http://home.scarlet.be/~lb178476/test3.txt

Thanks in advance!


/Edit: Additional information:

The application is written in Delphi and uses the SpTBXLib (http://club.telepolis.com/silverpointdev/index.htm).

Mkz 07-05-2006 06:14

I think the key might be here:

Code:

<00174> 0024094C P WM_SYSKEYDOWN nVirtKey:VK_MENU cRepeat:1 ScanCode:00 fExtended:0 fAltDown:1 fRepeat:0 fUp:0
<00175> 0024094C S message:0xBD04 [Benutzerdefiniert:WM_USER+47364] wParam:00000012 lParam:20000001
<00176> 004206AA S message:0xB016 [Benutzerdefiniert:WM_USER+44054] wParam:00000012 lParam:20000001
<00177> 004206AA R message:0xB016 [Benutzerdefiniert:WM_USER+44054] lResult:00000000
<00178> 0024094C R message:0xBD04 [Benutzerdefiniert:WM_USER+47364] lResult:00000000
<00179> 0024094C P WM_SYSKEYDOWN nVirtKey:'P' cRepeat:1 ScanCode:00 fExtended:0 fAltDown:1 fRepeat:0 fUp:0
<00180> 0024094C S message:0xBD04 [Benutzerdefiniert:WM_USER+47364] wParam:00000050 lParam:20000001
<00181> 004206AA S message:0xB016 [Benutzerdefiniert:WM_USER+44054] wParam:00000050 lParam:20000001
<00182> 004206AA S message:0xB03F [Benutzerdefiniert:WM_USER+44095] wParam:00000000 lParam:01CB8420
....
<00200> 004206AA R message:0xB016 [Benutzerdefiniert:WM_USER+44054] lResult:00000001
<00201> 0024094C R message:0xBD04 [Benutzerdefiniert:WM_USER+47364] lResult:00000001

First when you press ALT, the user message USER+47364 message is sent, with wparam=12 and lparam=20000001, which in turn generates another message USER+44054.
Afterwards, you press P. This is the moment that things get done, when the key goes down and not up. Of course this always ends up being a decision of the developer, but for menus for instance, they appear when the key goes down and not up. Anyway, when P goes down there is this message once again, USER+43764, this time with wparam=50.
Have you tried sending this message? If you have, have you also tried sending it first with wparam=12 (ALT down), then with wparam=50 (P down)?

I believe the developer might have implemented triggering the action on the equivalent of the OnKeyDown event:
if Key = 'P' then ....

Which leads me to another suggestion. How about sending the WM_SYSKEYDOWN messages yourself? The WM_USER messages might be just for other stuff, maybe the action you want is executed directly in the key down event, without resorting to any further message exchanges.

aldente 07-05-2006 07:17

Hmm, obviously the WParam is just the value of the virtual key scancode, as you can see here:

Code:

{ Virtual Keys, Standard Set }
VK_CONTROL = 17; //=$11
{$EXTERNALSYM VK_MENU}
VK_MENU = 18; //=$12

(also fits for the other keys, I checked it)


Sending that myself works:

Code:

SendMessage($C0A52, WM_USER+47364, VK_MENU, $20000001);
SendMessage($C0A52, WM_USER+47364, Ord('P'), $20000001);

Thanks! Now all I have to do is to find a nice way to get that window handle...


All times are GMT +8. The time now is 23:41.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Always Your Best Friend: Aaron, JMI, ahmadmansoor, ZeNiX