tcurran Posted May 9, 2017 Share Posted May 9, 2017 (edited) Here's a short UDF that will, at least in most cases, detect whether a window can be copied from or pasted to programmatically--for example, by Send()ing ctl-c, ctl-v. This is often disabled when programs (like your AutoIt script) run at a lower UAC integrity level than the application they are trying to operate on. #include <WinAPI.au3> Func _WindowIsPasteable($handle) ;accepts window handle; returns true or false whether a window will accept Ctl-C, Ctl-V Local $bCanPaste = True Local $hTestWindowPID = 0 Local $hTestWindowTID = _WinAPI_GetWindowThreadProcessId($handle, $hTestWindowPID) _WinAPI_AttachThreadInput(_WinAPI_GetCurrentThreadId(), $hTestWindowTID, True);attach to window we want to paste into $bCanPaste = _WinAPI_GetFocus() ;Test whether window is paste-able--returns False if it is not _WinAPI_AttachThreadInput(_WinAPI_GetCurrentThreadId, $hTestWindowTID, False);detach from window thread Return $bCanPaste EndFunc Pass it a window handle; it returns true or false whether a window will accept programmatic pasting. The function may not work on the CMD window, since it handles the clipboard uniquely. This function works by attaching to the program thread of the window whose handle it receives, then attempting to perform a GetFocus on that thread. In most cases, the attempt will fail if the window will not accept programmatic copy-paste. Edited May 9, 2017 by tcurran Link to comment Share on other sites More sharing options...
qwert Posted May 10, 2017 Share Posted May 10, 2017 Thanks for this. I hadn't considered such a method. But I do have a question: Quote the attempt will fail if the window will not accept programmatic copy-paste Can you point to documentation that explains this in more detail? Are there cases where a browser window, for example, would return False (='no paste')? Link to comment Share on other sites More sharing options...
tcurran Posted May 28, 2017 Author Share Posted May 28, 2017 qwert-- Those are excellent questions. This approach was suggested to me by "Joe" the developer of ArsClip. I adapted his approach to AutoIT, tested it in my particular application (it worked!!) and posted it here. Your question about browser windows is particularly trenchant, but--since I haven't tested it--I have no answer. Please post back here if you learn whether it does or doesn't work. 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