Jump to content
Sign in to follow this  
ru2cool

_WinAPI_PostMessage() question

Recommended Posts

ru2cool

I am working on a project for my job and have run into a small snag. I need the program to send TAB & SHIFT + TAB to a hidden window. The following code works flawlessly for sending just TAB -

#include <WinAPI.au3>
#include <WindowsConstants.au3>

$window = HWnd(0x002D05D8)
_WinAPI_PostMessage($window, $WM_KEYDOWN, 0x09, 0)
_WinAPI_PostMessage($window, $WM_KEYUP, 0x09, 0)

However, when I try to add in the SHIFT key the program still only sends TAB. Example below -

#include <WinAPI.au3>
#include <WindowsConstants.au3>

$window = HWnd(0x002D05D8)
_WinAPI_PostMessage($window, $WM_KEYDOWN, 0x10, 0)
_WinAPI_PostMessage($window, $WM_KEYDOWN, 0x09, 0)
_WinAPI_PostMessage($window, $WM_KEYUP, 0x09, 0)
_WinAPI_PostMessage($window, $WM_KEYUP, 0x10, 0)

Any assistance with this would be greatly appreciated.

Share this post


Link to post
Share on other sites
MilesAhead

If JoneOne's suggestion doesn't work I would try SendMessage rather than PostMessage provided you have verified the window exists and you know it will respond. PostMessage doesn't wait for the message to be handled. Conceivably the message to hold shift down could be processed after the tab key message. Better to somehow actually change the state of the shift key if the regular Send and ControlSend don't work.

I also avoid SendMessage when PostMessage will do the job just because it avoids potential hangs. But if you need to guarantee the order of processing the messages you need to use SendMessage.

Edited by MilesAhead

Share this post


Link to post
Share on other sites
ru2cool

Thank you both very much for the information.

@JohnOne - I never thought of using ControlSend() to target the window itself but that actually worked perfectly. Example code below -

$window = HWnd(0x008A043A)

ControlSend($window, "", $window, "{TAB}")
Sleep(1000)
WinSetState($window, "", @SW_SHOW)
WinActivate($window)
Sleep(2000)
WinSetState($window, "", @SW_HIDE)
ControlSend($window, "", $window, "+{TAB}")
Sleep(1000)
WinSetState($window, "", @SW_SHOW)
WinActivate($window)
Sleep(2000)
WinSetState($window, "", @SW_HIDE)

@MilesAhead - I tried using the _SendMessage() function but it would still only send the TAB key. For the sake of learning, I would very much like to figure out how to send keys using both of those functions. If you are willing, I would be grateful for any further assistance. Example code below -

#include <SendMessage.au3>
#include <WindowsConstants.au3>

$window = HWnd(0x008A043A)

_SendMessage($window, $WM_KEYDOWN, 0x10, 0)
_SendMessage($window, $WM_KEYDOWN, 0x09, 0)
_SendMessage($window, $WM_KEYUP, 0x09, 0)
_SendMessage($window, $WM_KEYUP, 0x10, 0)

Share this post


Link to post
Share on other sites
MilesAhead

My #1 suggestion when learning is check the function return codes and error codes such as @error. I have no interest in banging my head against someone else's trial and error brick wall. It's work. If you want to learn do your own lifting.

Share this post


Link to post
Share on other sites
MilesAhead

Thank you for being honest.

You're welcome. JohnOne's approach is better. Sometimes it's a more productive use of time to abandon infeasible methods. Although a stubborn streak can be good for debugging, this language being a macro language it's not likely you will surpass the way it's done internally in a short time. Keep pluggin' away. ;)

Edited by MilesAhead

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.