Could somebody guide me to find out a windows API function to use in order to intercept a mouse click on certain button on a particular window. I have used spy ++ and learned that when I move the finder tool on to a button or any thing in the window I am able to read information about handler and other things. So is there a way to intercept mouse clicks and inject our code before some action is performed. Thank you very much for sharing any idea about this.
I can think of a couple different ways to approach this:
You can use SetWindowsHookEx()
to install a WH_CALLWNDPROC
message hook in the target window's thread, and then the hook callback can process window messages like WM_LBUTTON(DOWN|UP)
on the target window itself, or BN_CLICKED
on the target window's parent. The caveat is the callback needs to be implemented in a DLL so the hook can be injected into the target process. You can get the target window's thread ID using GetWindowThreadProcessId()
.
A variation of this would be to have SetWindowsHookEx()
install a WH_GETMESSAGE
hook instead, and then you can use PostMessage()
to post a custom window message to the target window. The hook callback can then use SetWindowLongPtr()
or SetWindowSubclass()
to subclass the target window directly, and/or its parent, for further message processing.
You can use SetWinEventHook()
to monitor EVENT_OBJECT_INVOKED
events, such as button clicks. No DLL is needed if you use the WINEVENT_OUTOFCONTEXT
flag, but the caveat is the installing thread needs an active message loop so events can be handled across process boundaries.