SendInput specify hWnd / improved ControlSend

Get help with using AutoHotkey and its commands and hotkeys
User avatar
jeeswg
Posts: 5759
Joined: 19 Dec 2016, 01:58
Location: UK

SendInput specify hWnd / improved ControlSend

16 Sep 2017, 09:08

I have this script that half works to send Ctrl+C to Notepad/Internet Explorer. It works, but then if I reload the script it ceases to work.

The final goal is to be able to send keys where SendInput does work, but where ControlSend doesn't work. Thanks for reading.

Code: Select all

;this script works but if I reload the script
;it then ceases to work correctly
q:: ;send ctrl+c without using Send/SendInput
;e.g. tested on Notepad (Windows 7) and Internet Explorer 11
;same results work correctly until reload
WinGet, hWnd, ID, A
ControlGetFocus, vCtlClassNN, % "ahk_id " hWnd
if !(vCtlClassNN = "")
	ControlGet, hWnd, Hwnd,, % vCtlClassNN, % "ahk_id " hWnd

vTIDAhk := DllCall("GetCurrentThreadId", Ptr)
VarSetCapacity(PBYTE1, 256, 0)
DllCall("GetKeyboardState", Ptr,&PBYTE1)

vTID := DllCall("GetWindowThreadProcessId", Ptr,hWnd, UPtr,0)
DllCall("AttachThreadInput", UInt,vTIDAhk, UInt,vTID, Int,1)
VarSetCapacity(PBYTE2, 256, 0)
NumPut(0x80, PBYTE2, 0x11, "UChar") ;VK_CONTROL := 0x11
DllCall("SetKeyboardState", Ptr,&PBYTE2)

ControlSend,, c, % "ahk_id " hWnd

DllCall("AttachThreadInput", UInt,vTIDAhk, UInt,vTID, Int,0)
DllCall("SetKeyboardState", Ptr,&PBYTE1)
return
Some related threads:
AutoHotkey source code: Send/ControlSend (modifier keys) - AutoHotkey Community
https://autohotkey.com/boards/viewtopic.php?f=5&t=26615
PostMessage plz help - AutoHotkey Community
https://autohotkey.com/boards/viewtopic.php?f=5&t=30925
homepage | tutorials | wish list | fun threads | donate
WARNING: copy your posts/messages before hitting Submit as you may lose them due to CAPTCHA

Return to “Ask For Help”

Who is online

Users browsing this forum: Bing [Bot], Elgin, Google [Bot], ndiaz, yeto and 134 guests