opening a windows exe and need to select the messagebox default value

rated by 0 users
This post has 7 Replies | 2 Followers

Top 500 Contributor
Posts 7
muralierd Posted: 04-24-2012 3:03 AM

Hi i have a requirement that i need to open a windows exe from powershell and that exe is having some messageboxes and it expects the user to select the options like ok or cancel.

i am doing some automation script so there is no user interventions. can u tell me how can i achieve this. if i run the ps1 file then how to send the messagebox's options from powershell.

 

Thanks

Murali 

Top 25 Contributor
Posts 287
Top Contributor

I'm not sure if I undestand your question..

I assume this exe you are talking about is not an installer or if it's there are no silent switches right?

I'm not sure if you want to create message boxes or if you want to automatically supply input to the message boxes..

You can create message boxes like this:

$msg = New-Object -ComObject Wscript.Shell

$msg.popup("Delete?",0,"Confirmation",1)

And you can pass input like this:

$input = New-Object -ComObject Wscript.Shell

$input.SendKeys("~")

Top 500 Contributor
Posts 7

hi first thanks for your replay. this is my first post in my past 6 years. 

Here is the situation

i am doing automation of deploying from powershell. 

i have custom created exe maybe from (windows application from dot net) 

i need to start that exe file from powershell, and when you run the exe file it is asking some input like "do you want to run this exe under debug mode" and the options are "Yes" and "No" after that it is asking someother question "Do you want to process..." and the options are same "OK" and "cancel".

My problem is i am using the start-process cmdlet to start the custom exe and how to pass the values for those messageboxes which is created inside the exe file.

for your information the exe doesn't have any parameter. I believe inside the code logic of that exe the messagebox was written.

 

if you have any doubt on the above situation then please let me know

here is the code 

$filename="$path\example.exe"

start-process $filename 

 

Thanks

Murali M

 

Top 25 Contributor
Posts 287
Top Contributor

Ok. Now I understand.

So as I said you can send keys to asnwer those questions.. But no interference can happen during the execution of the application and the sendkeys otherwise the keys sent would get lost.

When you run the application and get the first message box, any of the input boxes (eg. yes, no, cancel) are selected?

Also any of them have shortcuts? Like one letter is underlined so you can press alt + the letter?

Top 500 Contributor
Posts 7

yes first messagebox got a selection under OK 

and the second messagebox got a selection under YES(if i press Y then the yes button got selected)

if you could send me the script, in which line i need to write the send keys whether before calling the start-process or after. This could be very helpful for me.

Thanks

Murali M

Top 10 Contributor
Posts 640

So that you're aware, this isn't something PowerShell can do natively. It isn't designed to automate a GUI interface.

You can probably get it to do something for you... but it's going to be a hack. VBScript, with its SendKeys method, or AutoIt, a language intended for this sort of work, would be far more appropriate to the task. Both will let you do this much more easily, and will operate more consistently in this scenario.

If you really want to do this in PowerShell, look at http://huddledmasses.org/window-gui-automation-from-powershell/. That's a free add-in for PowerShell that lets you select a window and send key presses to it. Again, I think AutoIt would be a more appropriate solution to the task, but this should at least give you an option from within PowerShell.

Top 25 Contributor
Posts 287
Top Contributor

Yes, Don is right. AutoIt would be the recommended solution here. You have to learn it though.

If you still want to give the Poweshell SendKeys a try you can do something like:

$shell = New-Object -COMObject Wscript.Shell

$shell.Exec("C:\YourProgram.exe")

Start-Sleep(5) #It waits 5 seconds for your program to pop up. Change it to your requirements.

#Then if you need to send just a "Enter" you can do:

$shell.SendKeys("`r")

#If you need to send Alt + Y you can do:

$shell.SendKeys("`a"+"a")

I hope you understand this.. and remember that nothing can happen between the execution of the program and the SendKeys otherwise the keys will go somewhere else.

Top 500 Contributor
Posts 7

thanks for your help. it worked fine for me.

Page 1 of 1 (8 items) | RSS
Copyright 2012 PowerShell.com. All rights reserved.