Jump to content

MHz

Member
  • Posts

    1,691
  • Joined

  • Last visited

  • Donations

    0.00 USD 
  • Country

    Australia

Everything posted by MHz

  1. This is a different way to handle closing the CDRom tray. This works without specifying the drive letter literally in registry. It also uses AutoIt to handle the tray functions of opening (eject) or closing. If $CMDLINE[0] Then Switch $CMDLINE[1] Case 'help', '/?', '-?' ; show help MsgBox(0x40000, Default, 'Switches are:' & @CRLF & _ 'open <drive letter:>' & @CRLF & _ 'close <drive letter:>' & @CRLF & _ 'register' & @CRLF & _ 'unregister') Case 'open' CDTray($CMDLINE[2], 'open') Case 'close' CDTray($CMDLINE[2], 'closed') Case 'register' ; copy this compiled executable to system directory If Not FileCopy(@ScriptFullPath, @SystemDir & '\CDTray.exe', 1) Then MsgBox(0x40000, 'Close CD Tray Installation', _ 'Unable to copy "' & _ @ScriptFullPath & '" to "' & @SystemDir & '\CDTray.exe"') Exit 1 EndIf ; register CDTray.exe in registry $data = '"' & @SystemDir & '\CDTray.exe" close "%1"' If RegWrite('HKCR\Drive\shell\close', '', 'REG_SZ', 'Close Tray') _ And RegWrite('HKCR\Drive\shell\close\command', '', 'REG_SZ', $data) Then MsgBox(0x40000, 'Close CD Tray Installation', _ 'Close CD Tray Installation has completed successfully!') Else ; show error MsgBox(0x40000, 'Close CD Tray Installation', _ 'Close CD Tray Installation has not been added to registry') Exit 2 EndIf Case 'unregister' ; unregister CDTray.exe from registry If RegDelete('HKCR\Drive\shell\close') = 1 Then MsgBox(0x40000, 'Close CD Tray UnInstallation', _ 'Close CD Tray UnInstallation has completed successfully!') Else ; show error MsgBox(0x40000, 'Close CD Tray Installation', _ 'Close CD Tray Installation has not been removed from registry') Exit 3 EndIf EndSwitch EndIf Compile it to make it work correct before using. Edit: A note of usage: Use the command CDTray.exe register to install the compiled executable. Use CDTray.exe unregister to uninstall it. Use CDTray.exe close <drive letter:> to close drive tray and CDTray.exe open <drive letter:> to open drive tray. Of course the context menu method is available as well when registered.
  2. Hi darksimoon, The behavior is documented by Microsoft so it is by design. The %CDROM% variable may not work in your answer file. I would just try using OemFilesPath="\$OEM$".
  3. This example is based off the beta installer so text maybe different but same conditions should apply. #RequireAdmin $title = 'eBoostr 3.0 (BETA) Setup' Run("eBoostr.exe") ; handle the language window if appears and choose english AdlibEnable('_Language') WinWait($title, 'Welcome to the eBoostr') ControlClick($title, 'Welcome to the eBoostr', '&Next >') ; disable use of Adlib function AdlibDisable() WinWait($title, 'License Agreement') ControlClick($title, 'License Agreement', 'I &Agree') ; you can finish the code Exit Func _Language() If WinExists('Installer Language', 'Please select a language') Then ControlCommand('Installer Language', 'Please select a language', 'ComboBox1', 'SelectString', 'English') If StringInStr(WinGetText('Installer Language', 'Please select a language'), 'English') Then ControlClick('Installer Language', 'Please select a language', 'OK') EndIf EndIf EndFunc I used #RequireAdmin as UAC in Vista requires it to allow automation to happen. The script is incomplete but it handles the 1st 3 windows and you can complete it if you wish.
  4. Hi yocarim Your code seems OK up to the ControlClick function. The parameters of ControlClick is shown below and I will describe the parameters of concern. ControlClick ( "title", "text", controlID [, button [, clicks [, x [, y ]]]] ) You seem to have the "title" and "text" parameters correct. The controlID can be the text of the control such as being "OK", or can be the ClassnameNN such as being "Button1" (ensure text case is correct) or if needed advanced uses such as class, handle and so on. The "button" parameter can only be "", "left", "middle", "right", "primary", "main", "secondary" or "menu" thus your value used seems incorrect. Perhaps try this ControlClick($title, "Please select a language.", "OK") or try this ControlClick($title, "Please select a language.", "Button1") I would not use the optional parameters unless you absolutely need to use them.
  5. Put the Do keyword on a line of it's own to avoid the error condition. Do Sleep(200) Until ControlCommand($title, , 'Button2', 'IsEnabled', '') ControlClick($title, "", "[CLASS:Button; INSTANCE:2]") You can use [ CODE ] ... [/ CODE ] tags (without spaces in the tags) to post code segments in this forum.
  6. Controlclick() normally works with an inactive window so this may do the task as being 1 line. If WinWait("setup") And ControlClick("setup", "", "[CLASS:Button; INSTANCE:##]") Then WinWaitClose("setup")
  7. Back to 1st post as possible easy fix. If this is using CMD then you may try using "Start /Wait" to help with wait though a spawned process from msiexec maybe causing it to return early. AutoItMacrogenerator is the easy option to create an automated installation script. You just run the program located in the Scite4AutoIt3 install at "C:\Program Files\AutoIt3\SciTE\AutoItMacroGenerator". I prefer to run it standalone rather then thrtough the editor so I can see lines added instantly. Click the red button to start recording, click the title of each window shown during installation and then click the controls (buttons, etc) needed. You should then get a quick and basic script for installation after completing the whole process of recording. Unless the installer is Java or HTML based then I would expect the window and controls to be seen and recorded. Ensure that the recorder is in fact running. The screen recorder can be used though it is not what I would refer as using functions suitable for automated installations. The screen recorder is more suitable for general desktop automation. The above script seems incomplete. "winwaitdelay" is an option to wait time before interaction from the next line of code. It is not a concern to use normally. lol, I accept humor. Yes, I prefer manual by using AutoIt Info Tool to gather information from the windows though I may sometimes use AutoItMacrogenerator as a lazy method. Doing it manually will help you learn. Using AutoItMacrogenerator is an easy option to begin with is why I mentioned it. So if you can get a good start with the script then I can try to help you when you have problems. If Ghost installs fine using switches then you can try using ProcessWait() and ProcessWaitClose() on the spawned process to ensure wait time until end of installation so automation can be minimized.
  8. If you put the effort in getting the ID3 tags correct, then programs like MP3Tag can rename and organize the files programmatically based on the ID3 information. This allows you to change the filenames in seconds rather then doing tedious manual handling to do the same objective. Further renaming from an example of "%artist% - %title%" to something like "%number% - %title%" is easy and quick based on correct ID3 tags.
  9. Hi tym, The code displayed looks like template code generated from CMenu or SendToA3x. There is a help file included with these programs with a installation script example provided. You are going to need to use the "AutoIt Info Tool" supplied with AutoIt3 installation to get window titles, window text, control identification classes and what ever else is needed. You can also use AutoItMacrogenerator which is perhaps already supplied else you can get with an installation of Scite4AutoIt3 which contains it and can be used to generate an automated installation script with the values mentioned above filled in. This is a script I have in use from a template created by SendToA3X. The principle is the same as adding in needed info though I placed the functions within a separate include script. #region - VobSub install script - (Automated with WinWait functions) #include <Common_Functions.au3> Opt('TrayIconDebug', 1) Break(False) ; Installer. $executable = 'VobSub 2.23.exe' ; Default group folder in startmenu. $group = 'VobSub' ; Installation folder in Program Files. $directory = '' ; Run the installer. $pid = _Automated() $title = 'VobSub 2.23 Setup' If WinWait('Installer Language', 'Please select a language', 60) Then ControlClick('Installer Language', 'Please select a language', 'OK') WinWait($title, 'Welcome to the VobSub Setup') ControlClick($title, 'Welcome to the VobSub Setup', '&Next >') WinWait($title, 'Choose Components') ControlClick($title, 'Choose Components', '&Next >') WinWait($title, 'Select the folder to install VobSub') ControlClick($title, 'Select the folder to install VobSub', '&Install') WinWait($title, 'Installation Complete') ControlClick($title, 'Installation Complete', '&Close') Else _Abort() EndIf ProcessWaitClose($pid) ; Remove shortcuts. If _Programs('VobSub Configure.lnk') Then If FileMove($group & '\DirectVobSub Configure.lnk', 'Audio-Video\', 9) _ And FileMove($group & '\VobSub Configure.lnk', 'Audio-Video\', 9) Then DirRemove($group, 1) EndIf EndIf Exit #endregion Ask if you need more help.
  10. Welcome to the forum RandomClown, AutoIt supports only the operators under "Language Reference" catagory in the help file supplied within the installation of AutoIt3. You may use as Nick White displays or you could use a For...Next loop that is suitable for limited looping by using a counter variable. Using AdlibEnable() function may also be suitable for detection in your script. The choice is for you to make. I made example code below. ; title of test window $title = 'Target Window' ; create a window to test with GUICreate($title) GUISetState() ; run the _Adlib() function every 2 seconds to check for the test window AdlibEnable('_Adlib', 2000) Sleep(2000) ; activate the test window if needed If Not WinActive($title) Then WinActivate($title) EndIf ; loop 10 times For $i = 1 To 10 ; check if test window is active If WinActive($title) Then ; disable the _Adlib() function check AdlibDisable() ; show the result SplashTextOn('For...Next Loop', 'Window is active', 200, 50) Sleep(2000) SplashOff() ; enable the _Adlib() function check AdlibEnable('_Adlib', 2000) ; exit the For...Next Loop ExitLoop EndIf Sleep(500) Next Sleep(5000) Exit Func _Adlib() ; Adlib function to show result while the main code is executing SplashTextOn('_Adlib() function', 'Window is active', 200, 50) Sleep(1000) SplashOff() Sleep(250) EndFunc Single line If...Then... are allowed though your mention of removing 3 lines is beyond my understanding to answer with the information supplied.
  11. You can use RunOnceEx or GuiRunOnce to install those applications when the services mentioned are running. See the Unattended guide for more information on how to do this.
  12. removed? they wont be removed but they shouldnt get installed when u install your windows from a fresh install AFAIK, removing the component files from the Windows setup files was not mentioned. In Windows XP, if you go to the "Add or Remove Programs" applet in control panel and use the "Add/Remove Windows Components" then you may understand the terminology of "remove" that Microsoft and Bolgan refers to. Perhaps you were mistaken by the different meanings that remove may have. Sorry if I seem critical in my correction but I considered worth a mention. @Bolgan I have had same issue when using "UnattendMode=ProvideDefault" with a components section in Winnt.sif. The components window does not show during setup with the previous settings. You are perhaps better to omit the components section with using ProvideDefault or use another UnattendMode setting.
  13. MHz

    CMenu

    Hi Balders and welcome to MSFN. Thanks for the mention of appreciation. The editor and shell extension is not my property just for clarification. I make use of them as per conditions of the Revenger inc. license supplied with CMenuExtender. The CMenu.exe and some of the other support files is what I created. The copy to folder and move to folder preset options seem to want a static path to send to. I would recommend a script to do the custom operation that you want. I made a AutoIt3 script which when compiled may do what you have described as a custom starting path for the folder dialog. ; usage: script.exe copy|move source [ destination ] ; CMenu settings: ; Within editor, select New Item -> Custom command. ; Add suitable caption, browse for this compiled script and then ; add into the Commandline 'copy "custom path\to\copy\to"'. ; you can just use copy or move without any ; other parameter for default destination search. ; set the append file checkbox and then click OK button to accept. Global $action, $destination Switch $CMDLINE[0] Case 2 _CheckAction() $destination = FileSelectFolder($action & ' source to', '') If Not @error And $destination <> '' Then $source = $CMDLINE[2] _PerformAction() EndIf Case 3 _CheckAction() $destination = FileSelectFolder($action & ' source to', '', Default, $CMDLINE[2]) If Not @error And $destination <> '' Then $source = $CMDLINE[3] _PerformAction() EndIf Case Else _HelpMsgBox() EndSwitch Exit Func _CheckAction() ; set $action to copy or move Switch $CMDLINE[1] Case 'copy' $action = 'copy' Case 'move' $action = 'move' Case Else _HelpMsgBox() EndSwitch EndFunc Func _HelpMsgBox() ; show a Msgbox with helpful details Local $text = _ $CMDLINE[0] & ' parameters passed. 2 or 3 parameters required.' & @CRLF & @CRLF & _ 'Command used:' & @CRLF & _ $CMDLINERAW & @CRLF & @CRLF & _ 'Usage:' & @CRLF & _ '"' & @ScriptName & '" copy|move source [destination]' & @CRLF & @CRLF & _ 'Description:' & @CRLF & _ 'Use "copy" or "move" as 1st parameter.' & @CRLF & _ 'Use a valid source file or folder as 2nd parameter.' & @CRLF & _ 'Use an optional, valid destination folder path as 3rd parameter.' MsgBox(0, Default, $text) Exit EndFunc Func _PerformAction() ; call the copy or move function dependant on $action If $action = 'copy' Then _Copy($source, $destination) Else _Move($source, $destination) EndIf EndFunc Func _Copy($source, $destination) ; copy file or folder Local $oShellApp = ObjCreate("shell.application") If Not @error Then $oShellApp.NameSpace($destination).CopyHere($source) EndIf EndFunc Func _Move($source, $destination) ; move file or folder Local $oShellApp = ObjCreate("shell.application") If Not @error Then $oShellApp.NameSpace($destination).MoveHere($source) EndIf EndFunc Sample of settings window I would recommend to test it with some temporary test files to ensure it works ok before doing your required tasks. You may need AutoIt3 to compile the script into an executable. You can get AutoIt3 from here. Edit: The above script may not handle multiple marked files/folders as the context menu extension handles them differently. I maybe able to adapt the script to do multiple files if needed.
  14. Is this MyLockBox that you mention? I know AutoIt. If you want further help with MyLockBox then please give a link to the product. Perhaps Keepass maybe better for your needs (without prior knowledge of need) which uses Inno Setup so "/Verysilent" may work well.
  15. Sorry. My results are different for some reason. This will use the Ctrl+Alt+w hotkey ; path to webword directory $ww_path = @ProgramFilesDir & '\WordWeb' ; WordWeb NoTray executable $exe_notray = 'wwnotray.exe' ; WordWeb Tray executable $exe_tray = 'wweb32.exe' ; main window title $title = '[CLASS:TTHeDi]' Select Case WinActive($title) ; nothing to do Exit Case ProcessExists($exe_notray) And Not WinActive($title) ; restore and activate the window WinSetState($title, '', @SW_RESTORE) WinActivate($title) Case ProcessExists($exe_tray) And Not WinActive($title) ; run tray exe to activate the window _RunWordWeb($exe_tray) Case Else ; no process running so choose $exe_notray or $exe_tray to run _RunWordWeb($exe_tray) EndSelect Exit Func _RunWordWeb($file) ; check to ensure the file to run is available, else return if not If Not FileExists($ww_path & '\' & $file) Or $file = '' Then Return SetError(1) EndIf Switch $file Case $exe_notray ; run no tray exe to show window Run('"' & $ww_path & '\' & $exe_notray & '"') If Not @error Then ; wait for the window and then activate it WinWait($title, '', 5) WinActivate($title) EndIf Case $exe_tray ; run tray exe Run('"' & $ww_path & '\' & $exe_tray & '"') If Not @error Then ; wait for hidden tray icon window WinWait('WordWeb Tray Icon', '', 5) Sleep(500) ; if the window is not active, then use the hotkey If Not WinActive($title) Then WinActivate($title) Send('^!w') EndIf EndIf EndSwitch Sleep(500) ; another attempt to activate the window if needed If Not WinActive($title) Then WinActivate($title) EndIf EndFunc If you wish, you can run the no tray executable instead by changing the parameter of _RunWordWeb() in the Case Else part which shows a window which behave like a normal window. before: Case Else ; no process running so choose $exe_notray or $exe_tray to run _RunWordWeb($exe_tray) EndSelect after: Case Else ; no process running so choose $exe_notray or $exe_tray to run _RunWordWeb($exe_notray) EndSelect
  16. You have a tray executable and a no tray executable and also window states to consider. I chose the cover all known scenarios. ; path to webword directory $ww_path = @ProgramFilesDir & '\WordWeb' ; WordWeb NoTray executable $exe_notray = 'wwnotray.exe' ; WordWeb Tray executable $exe_tray = 'wweb32.exe' ; main window title $title = '[CLASS:TTHeDi]' Select Case WinActive($title) ; nothing to do Exit Case ProcessExists($exe_notray) And Not WinActive($title) ; restore and activate the window WinSetState($title, '', @SW_RESTORE) WinActivate($title) Case ProcessExists($exe_tray) And Not WinActive($title) ; run tray exe to activate the window _RunWordWeb($exe_tray) Case Else ; no process running so choose $exe_notray or $exe_tray to run _RunWordWeb($exe_tray) EndSelect Exit Func _RunWordWeb($file) ; check to ensure the file to run is available, else return if not If Not FileExists($ww_path & '\' & $file) Or $file = '' Then Return SetError(1) EndIf Switch $file Case $exe_notray ; run no tray exe to show window Run('"' & $ww_path & '\' & $exe_notray & '"') ; wait for the window and then activate it WinWait($title, '', 5) WinActivate($title) Case $exe_tray ; run instances of tray exe until the window is active Do Run('"' & $ww_path & '\' & $exe_tray & '"') If Not ProcessExists($exe_tray) Then ; something is incorrect so return from this function Return SetError(2) Else Sleep(250) ; activate the window WinActivate($title) EndIf Until WinActive($title) EndSwitch EndFunc Starting a 2nd instance of the tray process seems to bring up the window so I chose that idea rather then the hotkey idea. Note that the keyword "Else" likes it's own line in AutoIt3 except for "Case Else" as to your code error. Also "End If" needs to be "EndIf".
  17. Please look at these topics: How do i hide the install window in autoit Can i use autoit ... In the initial code above, Send() requires an active and visible window to send to so I would at least expect WinWaitActive() to be used. WinWait() only waits for the window to appear. Look at WinWait(), WinActivate() and WinWaitActive() when using Send() or Mouse*() functions. You can hide an automated installation with AutoIt depending on various conditions that the certain installer allows. You may need to look at using WinWait() with the Control*() functions to achieve this. WinMove() and WinSetTrans() may be worth a look at using. Just about anything is possible with using AutoIt as you just need to understand how to do it.
  18. I currently use VLC media player and Media Player Classic as my media players. VLC has it's own codecs for use including an AC3 decoder which is OK. For Media Player Classic, I use FDDShow for all codec decoders/encoders and use AC3Filter as the AC3 decoder because FFDShow is not as good with AC3 IMO.
  19. Try the idea that Yzöwl offers. If it fails then could you explain your setup some more so we may try to help you better. Some unknowns to consider Are you using "OEMPreInstall=Yes" in Winnt.sif and adding these installers to "$OEM$\$1\COOL_STUFF" ? What does OemPreInstall.cmd contain or do ? Your installers use no switches so are they SFX archives that use a suitable extract and execute setup method ? Known issues to consider Certain HKCU tweaks may not be accepted at T-12 stage of setup (cmdlines.txt). Add those certain tweaks at logon. Attaching any files mentioned above (mask any sensitive information) may also help to diagnose the issue.
  20. The bat file created is for a manual start to initiate setup. Since you are booting from CD, then the bat file is rather useless and can be disposed of. It is differcult to know exactly what is missing or incorrect but I do notice that you use "Yes" when I use "1" for the AutomaticUpdates value. Try changing the value from "Yes" to "1" and see if it makes a difference. I seem to remember some time ago that setup ignored the "YES", IIRC.
  21. I use an AutoIt script on XP Pro, much like your CMD script to do the last tasks in the setup. The shortcuts for IE and some others are created late when you arrive to the desktop. My script removes these shortcuts and do other tasks after a 10 second sleep so Windows Setup has fully complete. Upon completion, tasks are done, the HKCU\...\RunOnce entry is automatically removed and I see no more of it. The shortcuts do not return as you seem to describe. Why HKCU\...\RunOnce runs again for you is beyond me unless your CMD file adds the entry in again perhaps.
  22. Steam install will not work as you overwrite the registry entries with the following SendTo entries. The SendTo entries may fail as whitespace exists in the path in which no double quotes used to keep the path together as one string. I would guess that cleanup will work as expected. It is mentioned in the unattended guide about using quotes and using a backslash to escape them. Escaped double quotes will be added to registry where as the outer double quotes will not. Below shows your code with escaped double quotes added. Simply clicking on the CMD file adds the entries to the registry for you to examine for being correct. Remove the registry entries when the test is done. The entries of concern are the entries with known or possible whitespace but I double quoted all to show a thorough example.
  23. The issue would be that you execute RunOnceEx.cmd with GuiRunOnce which is after the event of the RunOnceEx key being processed. You can keep your current concept and make it work immediately by adding one line to RunOnceEx.cmd. Calling the ierunonce.dll can do this for you. RunOnceEx.cmd : RunOnceEx.cmd setlocal enableextensions set cdrom=%~d0 set key=HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnceEx reg add "%key%" /f /v title /d "Installing Applications" reg add "%key%\005" /f /ve /d "Registry Tweaks" reg add "%key%\005" /f /v 1 /d "%systemdrive%\install\xp\hklm.cmd" reg add "%key%\010" /f /ve /d "Adobe Acrobat Reader 9.0" reg add "%key%\010" /f /v 1 /d "%systemdrive%\install\acrobat\AdobeReader90.exe /sAll /rs" start /wait rundll32.exe iernonce.dll,RunOnceExProcess endlocal
  24. A count down timer is rather basic. What you want to happen once the count ends is could mean something. A versatile program that I use at times is Poweroff. Poweroff is freeware. It does more then just handling the PC power functions as it can show just a message, run a program etc. Some details can be found here.
  25. As you mention as posted here that you want to install from your %UserProfile% directories. The issue you are perhaps experiencing is that your %UserProfile% directories may not exist when Cmdlines.txt is executed. Only "Default User" and "All Users" profiles are available from Cmdlines.txt and any additional profiles created by the user are not available for use until they are logged into to at least once. So perhaps 7-Zip-v4.42.exe is not in the "Desktop" directory of the "Default User" profile? If you wish to continue with the idea of adding installers to your personal %UserProfile%, then consider adding the files when your account has been created and logged into at least once. The usual time to add files to your own profile would be using RunOnceEx or GuiRunOnce which occur when you are logged into your account.
×
×
  • Create New...