Sign in to follow this  
Followers 0
atnextc

Issues with WinExists and ControlClick on CRM Silent Install

6 posts in this topic

I have been trying to write a script to silently install CRM Outlook client for about the past 6 days. No matter what I have tried this doesn't seem to be doing anything.

Code is below. Any help is appreciated.

Opt("TrayIconDebug",1)
ShellExecute("R:\IT\SoftLib\CRM2011\CRM2011-Client-ENU-i386\SetupClient.exe")
winwait("Microsoft Dynamics CRM 2011 for Outlook Setup")
WinActivate("Microsoft Dynamics CRM 2011 for Outlook Setup")
WinExists("Microsoft Dynamics CRM 2011 for Outlook Setup","I &accept the license agreement")
ControlClick("Microsoft Dynamics CRM 2011 for Outlook Setup","I &accept the license agreement",1007)
WinExists("Microsoft Dynamics CRM 2011 for Outlook Setup","&Next")
ControlClick("Microsoft Dynamics CRM 2011 for Outlook Setup","&Next",1008)

WinExists("Microsoft Dynamics CRM 2011 for Outlook Setup","Install Now")
ControlClick("Microsoft Dynamics CRM 2011 for Outlook Setup","&Install Now",1019)
WinExists("Microsoft Dynamics CRM 2011 for Outlook Setup","The installation completed successfully.")
ControlClick("Microsoft Dynamics CRM 2011 for Outlook Setup","&Close",1038)

Share this post


Link to post
Share on other sites



when you hover your mouse over your autoit icon after running this, what line is it showing?

I also see a couple errors using winexists. That function as you use it will either return true or false, then move on to the next line.


010101000110100001101001011100110010000001101001011100110010000

001101101011110010010000001110011011010010110011100100001

My Android cat and mouse game
https://play.google.com/store/apps/details?id=com.KaosVisions.WhiskersNSqueek

We're gonna need another Timmy!

Share this post


Link to post
Share on other sites

It just sits at the first screen without ever selecting any boxes.

I have also tried this as well..

winwait("Microsoft Dynamics CRM 2011 for Outlook Setup")
WinActivate("Microsoft Dynamics CRM 2011 for Outlook Setup")
;sleep (10000)
If WinExists("Microsoft Dynamics CRM 2011 for Outlook Setup","I &accept the license agreement")Then
;controlgettext("Microsoft Dynamics CRM 2011 for Outlook Setup","",1007)
ControlClick("Microsoft Dynamics CRM 2011 for Outlook Setup","",1007)
;sleep (3000)
EndIf
If WinExists("Microsoft Dynamics CRM 2011 for Outlook Setup","&Next")Then
;controlgettext("Microsoft Dynamics CRM 2011 for Outlook Setup","Next",1008)
ControlClick("Microsoft Dynamics CRM 2011 for Outlook Setup","", 1008)
;sleep (3000)
EndIf
If WinExists("Microsoft Dynamics CRM 2011 for Outlook Setup","Install Now")Then
;controlgettext("Microsoft Dynamics CRM 2011 for Outlook Setup","Install Now",1019)
ControlClick("Microsoft Dynamics CRM 2011 for Outlook Setup","",1019)
EndIf
;Dim $done
;While Not $done
;Select
;Case WinExists("Microsoft Dynamics CRM 2011 for Outlook Setup","The installation completed successfully.")
ControlClick("Microsoft Dynamics CRM 2011 for Outlook Setup","",1038)
;EndIf
;$done = 1
;Case Else
;   Sleep(300)
;EndSelect
;WEnd
  
;controlgettext("Microsoft Dynamics CRM 2011 for Outlook Setup","",1038)

Share this post


Link to post
Share on other sites

in case you were not aware, anything on a line after a ; gets ignored by autoit.

you are a little closer, however you have 'If WinExists' so when autoit hits that line, if that window does not exist yet, then it will skip to the line after 'EndIf'


010101000110100001101001011100110010000001101001011100110010000

001101101011110010010000001110011011010010110011100100001

My Android cat and mouse game
https://play.google.com/store/apps/details?id=com.KaosVisions.WhiskersNSqueek

We're gonna need another Timmy!

Share this post


Link to post
Share on other sites

Here is the finised code for CRM for Outlook Client Update 6.

This is working great. However, the update to Rollup10 apparently uses a weird form....IE "the next button is Windows.app.Button..etc which in searching the forum those can't really be controlled in Auto it so I just used send keys and it works however it will affect the user if they are using the machine.

;This will execute the CRM Outlook Client with Update 6 Installed.
MsgBox(0,"CRM Update Install", "Please Close Outlook so CRM can be updated.")
ShellExecute("R:ITSoftLibCRM2011CRM2011-Client-ENU-i386.exe")
;This will extract the contents of the program to the users desktop in a folder called CRM.
Winwait("Browse For Folder")
WinActivate("Browse For Folder")
Send("{UP}")
SLeep(100)
Send("{UP}")
SLeep(100)
Send("{TAB}")
SLeep(100)
Send("{ENTER}")
Sleep(100)
Send("CRM")
SLeep(100)
Send("{ENTER}")
SLeep(100)
Send("{TAB}")
SLeep(100)
Send("{ENTER}")

;This will step through the steps in the install.
winwait("Microsoft Dynamics CRM 2011 for Outlook Setup")
WinActivate("Microsoft Dynamics CRM 2011 for Outlook Setup")
WinWait("Microsoft Dynamics CRM 2011 for Outlook Setup","I &accept the license agreement")
ControlClick("Microsoft Dynamics CRM 2011 for Outlook Setup","I &accept the license agreement",1007)
WinWait("Microsoft Dynamics CRM 2011 for Outlook Setup","&Next")
ControlClick("Microsoft Dynamics CRM 2011 for Outlook Setup","&Next",1008)

WinWait("Microsoft Dynamics CRM 2011 for Outlook Setup","Install Now")
ControlClick("Microsoft Dynamics CRM 2011 for Outlook Setup","&Install Now",1019)
WinWait("Microsoft Dynamics CRM 2011 for Outlook Setup","The installation completed successfully.")
ControlClick("Microsoft Dynamics CRM 2011 for Outlook Setup","&Close",1038)
MsgBox(0,"CRM Update Install", "The CRM Update is complete. You can now reopen Outlook.")

Share this post


Link to post
Share on other sites

Have you tried using the Window Info Tool that came with autoit on it to get the button's Class and Instance? You can use those to controlClick on it.


010101000110100001101001011100110010000001101001011100110010000

001101101011110010010000001110011011010010110011100100001

My Android cat and mouse game
https://play.google.com/store/apps/details?id=com.KaosVisions.WhiskersNSqueek

We're gonna need another Timmy!

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  
Followers 0

  • Similar Content

    • Ubermensch
      By Ubermensch
      Hello,
      I am currently trying to automatically click the "Yes" button in the ActiveX prompt/popup message after opening the IE (html).
      At 1st, I encounter the "Allow Blocked Content". I already resolve it just by changing settings in the IE Options. But after resolving the "Allow Blocked Content", there's a popup message appear.
      I have attached the ActiveX Prompt.
      Here is the 1st code that I try to use.
      #include <IE.au3> #include <MsgBoxConstants.au3> #include <WinAPI.au3> _IECreate("C:\Users\april\Documents\Logo\JRB\AutoIt\AutoBOT\AWD10\sampleAWD10.html",0,1,0) Local $oIE = _IEAttach("", "instance", 1) _IELoadWait($oIE) AdlibRegister("_ActiveXRun",250) Local $oLastName = _IEGetObjByName($oIE, "Text4") Local $oGetItem = _IEGetObjByName($oIE, "getitem") _IEAction($oGetItem, "click") MsgBox($MB_SYSTEMMODAL, "Form Element Value", _IEFormElementGetValue($oGetItem)) Func _ActiveXRun() $retWin = WinGetHandle("[Class:Button]","") $winTitle = "[HANDLE:" & $retWin &"]" $ctrlHandle = ControlGetHandle($winTitle,"", "[CLASS:Button; INSTANCE:2]") $ctrlTitle = "HANDLE:" & $ctrlHandle &"]" WinWaitActive($ctrlTitle,"[CLASS:Button; INSTANCE:2]",10) $k = ControlGetPos($winTitle, "","[CLASS:Button; INSTANCE:2]") $x = $k[0] $y = $k[1] WinActivate ($winTitle,"An ActiveX control on this page might be unsafe to interact with other parts of the page. Do you want to allow this interaction?") ControlFocus($winTitle,"An ActiveX control on this page might be unsafe to interact with other parts of the page. Do you want to allow this interaction?","[CLASS:Button; INSTANCE:2]") ControlClick($winTitle, "","[CLASS:Button; INSTANCE:2]","primary",1,$x,$y) ControlSend($winTitle, "", "[CLASS:Button; INSTANCE:2]", "{ENTER}", 0) EndFunc Here is the console output.
      >"C:\Program Files (x86)\AutoIt3\SciTE\..\AutoIt3.exe" "C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /prod /ErrorStdOut /in "C:\Users\april\Documents\Logo\JRB\AutoIt\AutoBOT\AWD10\AWD10.1.au3" /UserParams +>12:44:11 Starting AutoIt3Wrapper v.17.224.935.0 SciTE v.3.7.3.0 Keyboard:00000409 OS:WIN_10/ CPU:X64 OS:X64 Environment(Language:0409) CodePage:0 utf8.auto.check:4 +> SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE UserDir => C:\Users\april\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => C:\Users\april\AppData\Local\AutoIt v3\SciTE >Running AU3Check (3.3.14.2) from:C:\Program Files (x86)\AutoIt3 input:C:\Users\april\Documents\Logo\JRB\AutoIt\AutoBOT\AWD10\AWD10.1.au3 +>12:44:11 AU3Check ended.rc:0 >Running:(3.3.14.2):C:\Program Files (x86)\AutoIt3\autoit3.exe "C:\Users\april\Documents\Logo\JRB\AutoIt\AutoBOT\AWD10\AWD10.1.au3" --> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop "C:\Users\april\Documents\Logo\JRB\AutoIt\AutoBOT\AWD10\AWD10.1.au3" (31) : ==> Subscript used on non-accessible variable.: $x = $k[0] $x = $k^ ERROR ->12:44:24 AutoIt3.exe ended.rc:1 +>12:44:24 AutoIt3Wrapper Finished. >Exit code: 1 Time: 13.76 I also tried a simpler code.
      include <IE.au3> #include <MsgBoxConstants.au3> #include <WinAPI.au3> _IECreate("C:\Users\april\Documents\Logo\JRB\AutoIt\AutoBOT\AWD10\sampleAWD10.html",0,1,0) Local $oIE = _IEAttach("", "instance", 1) _IELoadWait($oIE) $k = ControlGetPos("[CLASS:#32770]", "","[CLASS:Button; INSTANCE:2]") $x = $k[0] $y = $k[1] ControlClick("[CLASS:#32770]", "","[CLASS:Button; INSTANCE:2]","primary",1,$x,$y) Local $oLastName = _IEGetObjByName($oIE, "Text4") Local $oGetItem = _IEGetObjByName($oIE, "getitem") _IEAction($oGetItem, "click") MsgBox($MB_SYSTEMMODAL, "Form Element Value", _IEFormElementGetValue($oGetItem)) There's no error in the console output for the 2nd code I have tried.
      And here is the Window Info for the ActiveX prompt.
      >>>> Window <<<< Title: Internet Explorer Class: #32770 Position: 580, 338 Size: 376, 146 Style: 0x94C808C4 ExStyle: 0x00010101 Handle: 0x00000000001516FA >>>> Control <<<< Class: Button Instance: 2 ClassnameNN: Button2 Name: Advanced (Class): [CLASS:Button; INSTANCE:2] ID: 1 Text: &Yes Position: 184, 77 Size: 80, 22 ControlClick Coords: 37, 12 Style: 0x50010000 ExStyle: 0x00000004 Handle: 0x00000000001215DE >>>> Mouse <<<< Position: 228, 120 Cursor ID: 0 Color: 0xFFFFFF >>>> StatusBar <<<< >>>> ToolsBar <<<< >>>> Visible Text <<<< &No An ActiveX control on this page might be unsafe to interact with other parts of the page. Do you want to allow this interaction? &Yes >>>> Hidden Text <<<<  

    • VeryGut
      By VeryGut
      I am unable to access an annyoing pop-up window an press the "No" button. So far I have tried a combination (including using coordinates etc.) of the following:
      ControlClick("[TITLE: Worksite; CLASS: #32770]", "&No", "[CLASS: Button2]")
      Doesnt seem to be working :C
      >>>> Window <<<< Title: WorkSite Class: #32770 Position: 786, 471 Size: 356, 162 Style: 0x94C801C5 ExStyle: 0x00010101 Handle: 0x00000000000209E2 >>>> Control <<<< Class: Button Instance: 2 ClassnameNN: Button2 Name: Advanced (Class): [CLASS:Button; INSTANCE:2] ID: 7 Text: &No Position: 158, 96 Size: 88, 26 ControlClick Coords: 40, 11 Style: 0x50010000 ExStyle: 0x00000004 Handle: 0x000000000004075E >>>> Mouse <<<< Position: 987, 604 Cursor ID: 0 Color: 0x3687CE >>>> StatusBar <<<< >>>> ToolsBar <<<< >>>> Visible Text <<<< &Yes &No Cancel Do you want to save the changes you made to 'TEST.xls'? >>>> Hidden Text <<<<
    • SorryButImaNewbie
      By SorryButImaNewbie
      Hello,
      I'm developing again (everybody ruuun! )
      I would like to develope a script that goes through basicly every user control on a window, and log things that happens, and maybe do some screenshots. I did something like this before.
      My problem, which I would like to avoid this time (to improve my understanding and skill) , was that when I was unable to get a ControlID or handler or anything, I simply did some math and clicked on the coordinates it should have been (for example, maxing the window, and knowing the initial set up I was ablo to calculate given control position). I know that this is a bad solution for a number of reasons. 
      Now I got authorization to install autoIT here, and i started to the work, AU3Info was unable to find anything on the window (this could be a problem, since autoIT doesn't see anything on it then, if I understood the help file) So I got the SimpleSpy script (source:
      )
      I added a bit of code to the original to display ID as well, what I received is this:
      Mouse position is retrieved 115-207
      At least we have an element title: [ADD] class: [Button] ID: [50000] (<-- coded this to display ID here as well)
      Having the following values for all properties: 
      Title is: <ADD>    Class   := <Button>    controltype:= <UIA_ButtonControlTypeId>    ,<50000>    , (0000C350)    10;187;120;35
      *** Parent Information top down ***
      3: Title is: <Compass>    Class   := <Window>    controltype:= <UIA_WindowControlTypeId>    ,<50032>    , (0000C370)    -8;-8;1936;1056
      "Title:=Compass;controltype:=UIA_WindowControlTypeId;class:=Window""    
      2: Title is: <>    Class   := <MainView>    controltype:= <UIA_CustomControlTypeId>    ,<50025>    , (0000C369)    0;23;1920;1017
      "Title:=;controltype:=UIA_CustomControlTypeId;class:=MainView""    
      1: Title is: <>    Class   := <TileNavigationView>    controltype:= <UIA_CustomControlTypeId>    ,<50025>    , (0000C369)    0;23;1920;967
      "Title:=;controltype:=UIA_CustomControlTypeId;class:=TileNavigationView""    
      0: Title is: <>    Class   := <AreasView>    controltype:= <UIA_CustomControlTypeId>    ,<50025>    , (0000C369)    0;132;1920;858
      "Title:=;controltype:=UIA_CustomControlTypeId;class:=AreasView""
       
      so far I wrote this script:
      WinActivate('Test') ;It works!! :D first official interaction Sleep(1000) ;1 sec sleep to be sure ControlClick('Test', '', '50000') If @error Then MsgBox($MB_SYSTEMMODAL, 'Error', 'ControlClick error') EndIf Sleep(1000) MsgBox(1,"Tracer message", 'ControlClick has happened') ;MouseClick() ;ControlCommand() AutoIt activates the window, but the click on the given button doesnt happen (I tried to write 50000 without ' ' on ID).
      M'I doing the @error part correctly ? (no error Msg has been displayed), sorry I rarely use AutoIT and seems to forget less and less after each neglect, but still I'm far from a proffessional
       
      Any help or suggestion is welcome, thank you for your time and insight!
    • ur
      By ur
      if ControlClick("[CLASS:MsiDialogCloseClass]"," ","[CLASS:SysTreeView32; INSTANCE:1]") Then $htreeview=ControlGetHandle($hwnd,"","[CLASS:SysTreeView32; INSTANCE:1]") ControlTreeView($hwnd," ",$htreeview,"Select","#4") The above code worked well to enable the martupgrade feature on windows 7.
      As part of our Installation Testing Automation before delivering the installer to end user.To confirm whether all the screens are working good.

      But it is not working on windows 10.
       
      $h= ControlTreeView($hwnd," ",$htreeview,"Select","#4") The $h is getting value 1,which means error.
    • Gordi300
      By Gordi300
      Hey everyone!! 
      I'm trying to make a program in VB.NET that click inside a picturebox of an app without moving the mouse (using ControlClick).
      My code is this:
      1) ControlClick("Form1", "", "[CLASS:PictureBox; INSTANCE:12]", "left", 1, 5, 5) 2) ControlClick("Form1", "", "[CLASS:PictureBox; INSTANCE:1]", "left", 1, 5, 5) The code is correct  but the problem is that 1) works perfectly and 2) doesn't work. 
      '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      Here I leave you the summary of each picturebox:
      >>>> Window <<<<
      Title:    Form1
      Class:    Form
      Position:    168, 0
      Size:    1030, 780
      Style:    0x16CA0000
      ExStyle:    0x00040100
      Handle:    0x00000000000B0092
       
      >>>> Control <<<<                PICTUREBOX 12
      Class:    PictureBox
      Instance:    12
      ClassnameNN:    PictureBox12
      Name:    
      Advanced (Class):    [CLASS:PictureBox; INSTANCE:12]
      ID:    28
      Text:    
      Position:    305, 721
      Size:    40, 40
      Style:    0x56010000
      ExStyle:    0x00000004
      Handle:    0x0000000000040520
       
      >>>> Control <<<<                PICTUREBOX 1
      Class:    PictureBox
      Instance:    1
      ClassnameNN:    PictureBox1
      Name:    
      Advanced (Class):    [CLASS:PictureBox; INSTANCE:1]
      ID:    4
      Text:    
      Position:    4, 176
      Size:    700, 533
      Style:    0x56010000
      ExStyle:    0x00000004
      Handle:    0x00000000000E02BE
       
      Thank you for you help!!!