Its2l82die Posted February 7, 2010 Share Posted February 7, 2010 (edited) Hi, I'm trying to write a small script that will send "3" to a few applications that their titles are the same lets say "app". By using their handles I made the script to send "3" to each of them in turn. Now my problem is I don't exactly understand how DllCall() works so I'll show you what I wrote and maybe you guys could guide me and correct me if I have something wrong with the script. So here it is: HotKeySet("+x","Terminate") Func Terminate () Exit 0 EndFunc Const $WMKEYDOWN = 0x100 Const $key = 0x33 $hwnd=WinList("app") While 1 For $i=1 To $hwnd [0][0] DllCall("ggbp.dll","int","PostMessageA","HWnd",$hwnd [$i][1],"long",$WMKEYDOWN,"long",$key,"long") Next WEnd ggbp.dll is a dll that by what I was told bypasses a block that a certain program has on PostMessage, which disables the use of Send() and ControlSend() to the app. Using ggbp.dll and DllCall() is supposed to send the key "3" using the bypassed from of PostMessage which is PostMessageA. I don't really know how does PostMessage works if someone would be kind enough to show me the correct way to write it or at least explain what I'm doing wrong. Thanks. Edited February 7, 2010 by Its2l82die Link to comment Share on other sites More sharing options...
Richard Robertson Posted February 7, 2010 Share Posted February 7, 2010 You need to send a key up message too. Link to comment Share on other sites More sharing options...
Its2l82die Posted February 7, 2010 Author Share Posted February 7, 2010 (edited) Ok, got that now i started reading the the MSDN in microsofts website and now a lot is clear to me. Do I have to add an lparam at the end of my first DllCall()or is it unnecessary? And if I won't add a WM_KEYUP message it will act as if the key is still being pressed? Thanks for you replies EDIT:for some reason it doesn't work even with a Notepad. Where should I put my Dll, at the same location where the script is or where the autoit3.exe is? Edited February 7, 2010 by Its2l82die Link to comment Share on other sites More sharing options...
Richard Robertson Posted February 7, 2010 Share Posted February 7, 2010 Only sending a key down message would mean that the key is held down but never let go. You need both to make a whole key press. And yes, you need an lparam. Just send 0. Having it in the same directory as the script is fine. Link to comment Share on other sites More sharing options...
Its2l82die Posted February 7, 2010 Author Share Posted February 7, 2010 (edited) ok so this is how it looks after the revision but still it won't even send to the Notepad I don't know whats wrong with it =\ Thats how the new script looks like: HotKeySet("+x","Terminate") Func Terminate () Exit 0 EndFunc Const $WMKEYDOWN = 0x100 Const $WMKEYUP = 0x101 Const $key = 0x33 Const $lparam = 0 $hwnd=WinList("New Text Document - Notepad") While 1 For $i=1 To $hwnd [0][0] $ggbp = DllOpen("ggbp.dll") DllCall($ggbp,"int","ggPMA","hwnd",$hwnd [$i][1],"long",$WMKEYDOWN,"long",$key,"long",$lparam,"long") DllCall($ggbp,"int","ggPMA","hwnd",$hwnd [$i][1],"long",$WMKEYUP,"long",$key,"long",$lparam,"long") $ggbp = DllClose("ggbp.dll") Next WEnd Hope you can help. EDIT: No result even with user32.dll its not different in Windows 7 X64 right? Edited February 7, 2010 by Its2l82die Link to comment Share on other sites More sharing options...
Richard Robertson Posted February 7, 2010 Share Posted February 7, 2010 DllCall($ggbp,"int","ggPMA","hwnd",$hwnd [$i][1],"long",$WMKEYDOWN,"long",$key,"long",$lparam,"long") DllCall($ggbp,"int","ggPMA","hwnd",$hwnd [$i][1],"long",$WMKEYUP,"long",$key,"long",$lparam,"long") Should be DllCall($ggbp,"int","ggPMA","hwnd",$hwnd [$i][1],"long",$WMKEYDOWN,"long",$key,"long",$lparam,"long", 0) DllCall($ggbp,"int","ggPMA","hwnd",$hwnd [$i][1],"long",$WMKEYUP,"long",$key,"long",$lparam,"long", 0) Link to comment Share on other sites More sharing options...
Its2l82die Posted February 8, 2010 Author Share Posted February 8, 2010 (edited) Thanks for the reply well now it did work but it sends just one character and thats it, while its in a endless loop strange. maybe I should set the $lparam to something else? And for some reason I get this >Exit code: -1073741819 Edited February 8, 2010 by Its2l82die Link to comment Share on other sites More sharing options...
Richard Robertson Posted February 8, 2010 Share Posted February 8, 2010 You should have some break time between key presses. Some programs can't handle input as quickly as it can be simulated. That exit code isn't very useful though. Link to comment Share on other sites More sharing options...
Its2l82die Posted February 8, 2010 Author Share Posted February 8, 2010 (edited) Ok, well its not that the app is too slow I gave it a Sleep(200) still it sends only one character. Do you know by any change what is what is the exit code -1073741819 EDIT: Never mind I found my problem. the Iparam was unnecessary for some reason. Edited February 8, 2010 by Its2l82die Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now