SendKeys problem

R

Rod Armour

I'm having trouble with the SendKeys command in Excel 2002 (Win2k). I
am trying to send commnands to a Win2k dialogue box (Power Option
Properties), but the SendKeys command "^(TAB)" does not change tabs in
the dialogue box like it does when typed manually on the keyboard.
(According to Excel VBA help, "^(TAB)" = Ctrl+Tab). I have tried
numerous other Sendkeys commands, but none of them act like Ctrl+Tab.
Does anyone know how I can change tabs in a windows dialogue box using
SendKeys? Or how I can get Win2k to interpret SendKeys commands
"correctly"? Failing that, does anyone know how to turn hibernate on
and off using an Excel macro?

Part of my simple script:

Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "^{ESC}", True 'presses the Start button
Application.Wait Now + TimeValue("00:00:01")
WshShell.SendKeys "{DOWN}", True 'highlights a link to Power Option
'Properties
Application.Wait Now + TimeValue("00:00:01")
WshShell.SendKeys "{ENTER}", True 'opens Power Option Properties
Application.Wait Now + TimeValue("00:00:02")
WshShell.SendKeys "^{TAB}", True 'problem is here, this does NOT
'switch tabs within the dialogue box!

Any help greatly appreciated ... Many thanks,

Rod Armour
 
R

Rod Armour

Thanks for the reply Colo -- wow, that's an impressive code! However,
I finally found the problem with SendKeys. Control commands like "Tab"
have to be typed in brackets (this is NOT mentioned in Excel VBA
help!). So, to send Crtl+Tab requires the command

SendKeys "(^{TAB})"

That solved the problem.

Another link gave me the answer
http://www.tek-tips.com/gviewthread.cfm/lev2/4/lev3/32/pid/707/qid/717062

These comments were also helpful:
http://www.cpcug.org/user/clemenzi/technical/Languages/DOSSendKeys.htm#VisualBasic)

So here's a simple code that will turn hibernate on and off in Win2k
WITH a shortcut to "Power Options Properties" placed topmost on the
Start menu:

Sub HibernateOnOff()

Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "^{ESC}", True
Application.Wait Now + TimeValue("00:00:01")
WshShell.SendKeys "{DOWN}", True
Application.Wait Now + TimeValue("00:00:01")
WshShell.SendKeys "{ENTER}", True
Application.Wait Now + TimeValue("00:00:02")
WshShell.SendKeys "(^{TAB})", True 'This was the "trick"!
Application.Wait Now + TimeValue("00:00:01")
WshShell.SendKeys "(^{TAB})", True
Application.Wait Now + TimeValue("00:00:01")
WshShell.SendKeys "%H", True
Application.Wait Now + TimeValue("00:00:01")
WshShell.SendKeys "%A", True
Application.Wait Now + TimeValue("00:00:01")
WshShell.SendKeys "(%{F4})", True

End Sub

It's not very elegant, but it works. I may still use your code 048 to
reenter hibernatation (after re-enabling it). I'll work on the problem
later today. But the sendkeys issue is resolved by bracketing the
control commands.

Thanks again for the help! I'll post another note here later
describing the final result.

Rod
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top