Sign in to follow this  
Followers 0
lgvlgv

[SOLVED] some help with shellexecute!

8 posts in this topic

#1 ·  Posted (edited)

Hi all!

Im trying to execute a program that are specified in a ini file like this but shellexecute ignore the @windowsdir or any @variable i put in, what im i doing wrong?

; Ini file
[Utforskaren]
exe= explorer.exe
arg= , C:
wrk= @WindowsDir
ico= @WindowsDir & "\explorer.exe"
dsc= Utforskaren

the execute is from an array like this

[3]|explorer.exe|, C:|@WindowsDir|@WindowsDir & "\explorer.exe"|Utforskaren

ShellExecute($aIcon[$iIconIndex][0], $aIcon[$iIconIndex][1], $aIcon[$iIconIndex][2])
ConsoleWrite("! Consolewrite ->Shellexecute: " & $aIcon[$iIconIndex][0] &" | "& $aIcon[$iIconIndex][1] &" | "& $aIcon[$iIconIndex][2] & @CRLF)

and result is this

! Consolewrite ->Shellexecute: explorer.exe | , C: | @WindowsDir

Edited by lgvlgv

Share this post


Link to post
Share on other sites



Try this and see if that is what you want:

$t = '@WindowsDir & "explorer.exe"'
ConsoleWrite('$t = ' & $t & @crlf )
$t = Execute($t)
ConsoleWrite('$t = ' & $t & @crlf )

Visit the SciTE4AutoIt3 Download page for the latest versions  - Beta files                                How to post scriptsource        Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites

not sure i understand i tried this

ConsoleWrite('$t = ' & $t & @crlf )
       local $t = $aIcon[$iIconIndex][2]
       ConsoleWrite('$t = ' & $t & @crlf )
       ShellExecute($aIcon[$iIconIndex][0], $aIcon[$iIconIndex][1], $t)
       ConsoleWrite("! Consolewrite ->Shellexecute: " & $aIcon[$iIconIndex][0] &" , "& $aIcon[$iIconIndex][1] &" , "& $t & @CRLF)

but still it reads the @windowsdir as @windowsdir and not like "C:windows" ?

Share this post


Link to post
Share on other sites

this works "ConsoleWrite(@WindowsDir)" -> =C:windows

but not when i get @WindowsDir from an array and put as variable.

Share this post


Link to post
Share on other sites

It thing I was trying to make you understand is that putting @WindowsDir in a string doesn't mean that AutoIt3 will know about this.

The Execute() Function will take a literal string and assumes it contains something to Execute.

in your case, you are retrieving some AutoIt3 Macro's from a INI file, which will be stored in a variable as literal string. So perform an Execute() function on that String and you will find what you are looking for.

Jos


Visit the SciTE4AutoIt3 Download page for the latest versions  - Beta files                                How to post scriptsource        Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites

thx

It thing I was trying to make you understand is that putting @WindowsDir in a string doesn't mean that AutoIt3 will know about this.

The Execute() Function will take a literal string and assumes it contains something to Execute.

in your case, you are retrieving some AutoIt3 Macro's from a INI file, which will be stored in a variable as literal string. So perform an Execute() function on that String and you will find what you are looking for.

Jos

LOL, dident realize that execute was an actuall command ;)

Thank you very mutch for ur patience with me .

What is the best way to use execute or stringreplace? $aIcon[$i][2]=StringReplace($aIcon[$i][2],'@WindowsDir',@WindowsDir,0,2)

Regards L

Share this post


Link to post
Share on other sites

thx very mutch, it so fun yet i know so little ;)

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

    • DagSa
      By DagSa
      I have some problem to make my ini-file work properly. Purpose is to install program at windows 7 - 10 but think it work at XP also.
       I have included a fragment of code, but all my errors are there. It should be run by user privilege.
      The test code point out what is not working:
      Code is create a directory in %appdata%, and create a ini-file if not there. (This write of file work!)
      When change the settings only one of the two parameters are changed. One value should be changed (don't work), and the other should be added (work!). Editing manually by notepad does not allow to save it.  I want the code to be able to change everything in ini-file.
      1. First of all, the ini-file is not writeable by user when look at file properties and also directory properties. Any way to change this?
      2. Is %appdata% wrong directory? I want all user to have access to the settings but its enough if only by control of the program.
      It make me crazy its writeable sometimes, and sometimes not. Any ideas?
      /Dag
      AppData_INI-test.au3
    • l3ill
      By l3ill
      Hi All,
      Here is a little GUI I built a while back to learn how to use INI files to store information ( variables ) between opening and closing certain programs.
      I just recently pulled it back out and cleaned it up and debugged it, if you find any bugs please kill them.
      The FTP connection part was just so it would have purpose... 
      To cut down on clutter there are no labels, hover mouse over to see what things are.
      cya,
      Bill
    • akira2891
      By akira2891
      Hi i have problem with reading data from INI file.
      So i need when i put in search field "Test" to get in listbox all results under number 1= with "Test" in name and so my list need to look like this
      [5018] Test name 2 [5218] Test name 1 [5458] Test name and when i click on item from list that he appears on $hNameInput
      Look on image http://prntscr.com/83i7a6
      this is my ini file
      [5018] 0=test1 1=Test name 2 2=0 3=1 [5218] 0=test1 1=Test name 1 2=0 3=1 [5458] 0=test1 1=Test name 2=0 3=1 [5468] 0=test1 1=Name no 1 2=0 3=1 [5345] 0=test1 1=Name no 2 2=0 3=1 And here is autoit code
      #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <GUIListBox.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form=C:\Users\Mario\Documents\renamer.kxf $hGUI = GUICreate("Form1", 684, 364, 607, 439) GUICtrlCreateGroup(" Search ", 8, 16, 342, 297) GUICtrlCreateLabel("Search for text", 22, 40, 73, 17) $hSearchInput = GUICtrlCreateInput("", 23, 60, 185, 21) $hFinddAllButton = GUICtrlCreateButton("Find All", 222, 58, 75, 25) GUICtrlCreateLabel("Found Items ( click to edit )", 22, 102, 131, 17) $hList = GUICtrlCreateList("", 22, 120, 313, 175) GUICtrlCreateGroup("", -99, -99, 1, 1) GUICtrlCreateGroup(" Edit Item", 355, 16, 321, 137) GUICtrlCreateLabel("Name", 372, 40, 32, 17) $hNameInput = GUICtrlCreateInput("", 371, 60, 289, 21) $hSaveButton = GUICtrlCreateButton("Save", 587, 112, 75, 25) GUICtrlCreateLabel("Item ID", 372, 95, 38, 17) $hItemID = GUICtrlCreateInput("", 369, 112, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_READONLY)) GUICtrlCreateGroup("", -99, -99, 1, 1) $hOpenIniButton = GUICtrlCreateButton("Open INI for Edit", 8, 328, 105, 25) $hWriteIniButton = GUICtrlCreateButton("Write Modified INI", 123, 328, 105, 25) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### Global $file While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $hOpenIniButton __openINI() Case $hFinddAllButton Local $iFileExists = FileExists($file) If Not $iFileExists Then MsgBox(48, "Error", "test.ini not found!") EndIf Local $aArray = IniReadSection($file, "5018") If Not @error Then For $i = 1 To $aArray[0][0] GUICtrlSetData($hList, $aArray[$i][1] & @CRLF) Next EndIf EndSwitch WEnd ; open ini Func __openINI() Global $file = FileOpenDialog("Open INI for edit", "", "INI files (*.ini)") If FileExists($file) Then $sFile = FileOpen($file) If @error Then MsgBox(48, "Error", "Error = " & @error & ", Extended = " & @extended) Else GUICtrlSetState($hOpenIniButton, $GUI_DISABLE) EndIf Else MsgBox(48, "Error", "Error = " & @error & ", Extended = " & @extended) EndIf EndFunc  
    • meows
      By meows
      Func Button2Click() ;==> SonoLvl2 ******************************************************* SoundPlay(@ScriptDir & "\schoolbell.wav", 1) Local $Test2 = IniRead(@ScriptDir & "\runer.ini", "Levels", "LComplete1", "Default Value") If $Test2 = 1 Then ; $updatepid = RunWait(@ScriptDir & "\SonoLvl2\SonoLvl2_.exe", "", @SW_SHOWDEFAULT) Else MsgBox(4096, "", "You did not complete Lesson1") EndIf ;MsgBox($MB_SYSTEMMODAL, "Bug Report Environment", _DebugBugReportEnv()) IniWrite(@ScriptDir & "\runer.ini", "Levels", "LComplete2", "2") EndFunc ;==>Button2Click I have tried PID checks and updatepid per the help file and they just didn't work out. and usually caused errors. Then (not included I tried making a separate function to write to a INI file. that was a lesson in frustration and defeat. It worked.. just the same as the code in the function now. as soon as you click the button and the runwait line starts the ini gets updated. The file can only be written to after runwait is running is closed. Also tried the ProcessWait, ProcessWaitClose,  ShellExecute, ShellExecuteWait
      Then in desperation I tried a Debug i read about
      Func Button2Click() ;==> SonoLvl2 ******************************************************* $__iLineNumber=162 & ' - SoundPlay(@ScriptDir & "\schoolbell.wav", 1)•' SoundPlay(@ScriptDir & "\schoolbell.wav", 1) $__iLineNumber=163 & ' - Local $Test2 = IniRead(@ScriptDir & "\runer.ini", "Levels", ...•' Local $Test2 = IniRead(@ScriptDir & "\runer.ini", "Levels", "LComplete1", "Default Value") $__iLineNumber=164 & ' - If $Test2 = 1 Then•' If $Test2 = 1 Then $__iLineNumber=165 & ' - $updatepid = RunWait(@ScriptDir & "\SonoLvl2\SonoLvl2_.exe", ...•' $updatepid = RunWait(@ScriptDir & "\SonoLvl2\SonoLvl2_.exe", "", @SW_SHOWDEFAULT) Else $__iLineNumber=167 & ' - MsgBox(4096, "", "You did not complete Lesson1")•' MsgBox(4096, "", "You did not complete Lesson1") EndIf ;MsgBox($MB_SYSTEMMODAL, "Bug Report Environment", _DebugBugReportEnv()) $__iLineNumber=173 & ' - IniWrite(@ScriptDir & "\runer.ini", "Levels", "LComplete2", ...•' IniWrite(@ScriptDir & "\runer.ini", "Levels", "LComplete2", "2") EndFunc ;==>Button2Click unfortunately I was not smart enough to get it to work for me. What I wanted was a Debugger that explains what each line does and why. Then I figured out that isn't happening.