Jump to content
Sign in to follow this  
Vieri

ControlSend DELETE key and BlockInput

Recommended Posts

Vieri

Hi,

The following code has several glitches. Maybe I'm writing it wrong.

1) I'm using Windows XP SP2 and BlockInput has no effect (user can type during autoit script execution). I understand it should block user input.

2) the expected behavior of the ControlClick call in the example below is the selection of the word "test". It is NOT selected.

3) ControlSend fails to send the {DELETE} key. The last ControlSend call in the example below writes " test" to Notepad after "This is a test" (so I get "This is a test test") but it does not delete anything (ie. the {DEL} or {DELETE} keys are not sent or are ignored).

Any ideas?

$WINTITLE = "[CLASS:Notepad]"
$WINTEXT = "This is a test"
$CONTROL = "[CLASS:Edit; INSTANCE:1]"

WinActivate($WINTITLE, $WINTEXT)

If @OSVersion <> "WIN_98" And @OSVersion <> "WIN_ME" Then
    BlockInput(1)
EndIf

ControlFocus($WINTITLE, $WINTEXT, $CONTROL)
ControlClick($WINTITLE, $WINTEXT, $CONTROL, 2)
ControlSend($WINTITLE, $WINTEXT, $CONTROL, "{DELETE}{DEL}")
ControlSend($WINTITLE, $WINTEXT, $CONTROL, " test{DEL}{DEL}{DEL}{DEL}{DEL}")

BlockInput(0)

Share this post


Link to post
Share on other sites
notsure

$WINTITLE = "[CLASS:Notepad]"
$WINTEXT = "This is a test"
$CONTROL = "Edit1"

WinActivate("Untitled - Notepad")

If @OSVersion <> "WIN_98" And @OSVersion <> "WIN_ME" Then
    BlockInput(1)
EndIf



ControlSend($WINTITLE, "", $CONTROL, "test")
controlsend($WINTITLE, "", $CONTROL, "{HOME}")
ControlSend($WINTITLE, "", $CONTROL, "{DELETE}{DEL}")

BlockInput(0)

You're trying to "delete" something after typing "test"..? That also does not work if you type "test" in notepad first, and then hit delete twice.

First use HOME, or use backspace.

Edited by notsure

Share this post


Link to post
Share on other sites
Vieri

First use HOME, or use backspace.

My bad. You're right. Point 3 was a silly mistake.

What about 1) and 2) ?

Any ideas?

Share this post


Link to post
Share on other sites
notsure

1) Does it work when you leave the If out?

2) That you click the control twice doesn't have to mean "doubleclick". I'd use something like this:

controlsend($WINTITLE, "", $CONTROL, "{HOME}{SHIFTDOWN}{END}{SHIFTUP}")

to select the whole text.

Im not sure what you're trying to accomplish with it, so i dont know wheter this is the right way to do it or not.

Edited by notsure

Share this post


Link to post
Share on other sites
Vieri

My bad. You're right. Point 3 was a silly mistake.

What about 1) and 2) ?

Any ideas?

Another dumb mistake.

This works:

ControlClick($WINTITLE, $WINTEXT, $CONTROL, "left", 2)

So I'm left only with point 1).

Share this post


Link to post
Share on other sites
Vieri

1) Does it work when you leave the If out?

I didn't try yet but @OSVersion yields WIN_XP.

Share this post


Link to post
Share on other sites
notsure

I didn't try yet but @OSVersion yields WIN_XP.

Try sleep(5000) after the ControlClick

Your code is too fast to notice the Blockinput with the eye.

Then you'll see it works, blocks mouse and keyboard.

Share this post


Link to post
Share on other sites
Vieri

Try sleep(5000) after the ControlClick

Your code is too fast to notice the Blockinput with the eye.

Then you'll see it works, blocks mouse and keyboard.

You're right! I used sleep(1000) and it worked.

Maybe Blockinput should check internally that it's really blocking (if possible) before returning. That way a "sleep" would not be necessary. If a dev sees this... ;-)

Thanks for your feedback!

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.