Jump to content

Problem w/ ListBox while trying to automate Total Commander


Recommended Posts

I'm trying to automate a plugin for Total Commander that mounts ISO's. However when I try to search for a string in a ListBox, it returns 0. The control has no text, so I'm using the classname. I don't know if I am doing something wrong, or it is something weird with Total Commander.

#Include <GuiList.au3>

Dim $sInputBoxAnswer = GetImageName()
ValidateInputBox($sInputBoxAnswer)
WinActivate("Total Commander")
Send("^t")  ;Duplicate tab
Send("!{UP}");Select directory path
Send("\\\Virtual Disks\{ENTER}");Activate plugin

;Check for image name
Dim $sLB1 = "TMyListBox1"
Dim $sLB2 = "TMyListBox2"
Dim $sActivePane
Dim $iListIndex = _GUICtrlListFindString($sLB1, $sInputBoxAnswer)
MsgBox(262144,'Debug line ~14','Selection:' & @lf & '$iListIndex' & @lf & @lf & 'Return:' & @lf & $iListIndex & @lf & @lf & '@Error:' & @lf & @Error);### Debug MSGBOX

If $iListIndex == $LB_ERR Then
    $iListIndex = _GUICtrlListFindString($sLB2, $sInputBoxAnswer)
Else
    $sActivePane = $sLB1
EndIf

If $iListIndex <> $LB_ERR Then
    $sActivePane = $sLB2
    _GUICtrlListSetCaretIndex($iListIndex, $sActivePane)
Else
;MsgBox features: Title=Yes, Text=Yes, Buttons=OK, Icon=Critical
    MsgBox(16,"Fatal Error!","Unable to find the specified Image name!")
EndIf

Func GetImageName()
;InputBox features: Title=Yes, Prompt=Yes, Default Text=No, Width=300, Height=150
    Dim $sInputBoxAnswer = InputBox("Image to Mount","Enter the name of the Image to Mount:",""," ","300","150","-1","-1")
    Return $sInputBoxAnswer
EndFunc

Func ValidateInputBox($sInputBoxAnswer)
    Select
        Case @Error = 0;OK - The string returned is valid
            If StringLen($sInputBoxAnswer) < 1 Then
            ;MsgBox features: Title=No, Text=Yes, Buttons=OK, Icon=Warning
                MsgBox(48,"Input not provided!","Please enter an Image Name!")
                GetImageName()
                ValidateInputBox($sInputBoxAnswer)
            EndIf

       Case @Error = 1;The Cancel button was pushed
           Exit

       Case @Error = 3;The InputBox failed to open
        ;MsgBox features: Title=No, Text=Yes, Buttons=OK, Icon=Critical
            MsgBox(16,"Fatal Error!","An error occured!  Aborting script!")
            Exit
    EndSelect
EndFunc
Link to comment
Share on other sites

TMyListBox is not a standard Listbox, it's a custom listbox so you'll have to find some other way to get the information if the method you tried doesn't work.

You could try ControlCommand but once again this may not work on custom ListBoxes.

gl

SciTE for AutoItDirections for Submitting Standard UDFs

 

Don't argue with an idiot; people watching may not be able to tell the difference.

 

Link to comment
Share on other sites

Since that won't work, I decided to try using the the QuickSearch feture of TC to highlight the file name. However, I've run into another strange behavior. When I run the following command, I end up with 0 in the commandline:

Send("{ESC}!"+ $sInputBoxAnswer)

If I do this

Send("{ESC}!Da")

I end up with 'Da' in the quicksearch bar.

In the 1st command, the value of the variable is 'Data'. I don't know why I'm getting the strange behavior.

Link to comment
Share on other sites

Ok, now for the next problem:

;Check for image name
Send("{ESC}!" & $sInputBoxAnswer & "{ESC}")
Send("^{ENTER}")
If ControlClick("Total Commander", "", "Edit1") Then
    Dim $sFileSelected = _GUICtrlEditGetSel("Edit1")
    MsgBox(262144,'Debug line ~14','Selection:' & @lf & '$sFileSelected' & @lf & @lf & 'Return:' & @lf & $sFileSelected & @lf & @lf & '@Error:' & @lf & @Error);### Debug MSGBOX
EndIf

$sFileSelected is empty after this, but I get the debug msgbox, so I know the control was clicked and when you click on it, all the text is selected automatically.

Link to comment
Share on other sites

It's working now, if anyone is interested:

Dim $sInputBoxAnswer = GetImageName()
ValidateInputBox($sInputBoxAnswer)
WinActivate("Total Commander")
Send("^t");Duplicate tab
Send("!{UP}");Select directory path
Send("\\\Virtual Disks\{ENTER}");Activate plugin

;Check for image name
Send("{ESC}!" & $sInputBoxAnswer & "{ESC}")
Send("^{ENTER}")
If ControlClick("Total Commander", "", "Edit1") Then
    Dim $sFileSelected = ControlGetText("Total Commander", "", "Edit1")
EndIf
If StringTrimRight($sFileSelected, 5) <> $sInputBoxAnswer Then
;MsgBox features: Title=Yes, Text=Yes, Buttons=OK, Icon=Critical
    MsgBox(16,"Fatal Error!","Unable to find the specified Image name!")
    Exit
EndIf

Send("{ESC}{ENTER}")
If WinWaitActive("Properties", "", 5) Then
    Dim $sMountStatus = ControlGetText("Properties", "", "Static3")
    Dim $iStringPos = StringInStr($sMountStatus, "unmounted")
    If $iStringPos Then
        $sMountStatus = "Mounted";What the status will be *after* the current operation
    Else
        $sMountStatus = "Unmounted"
    EndIf
    Dim $sDriveLetter = ControlGetText("Properties", "", "ComboBox1")
    ControlClick("Properties", "", 1)
    If $sMountStatus = "Mounted" Then
    ;MsgBox features: Title=Yes, Text=Yes, Buttons=OK, Icon=Info
        MsgBox(64,"Image Mounted","The image " & $sInputBoxAnswer & " was mounted on " & $sDriveLetter)
    Else
        MsgBox(64,"Image Unmounted","The image " & $sInputBoxAnswer & " was unmounted from " & $sDriveLetter)
    EndIf
    Send("^w")
Else
;MsgBox features: Title=Yes, Text=Yes, Buttons=OK, Icon=Critical
    MsgBox(16,"Fatal Error!","The Virtual Disks Property dialog did not open!")
    Exit
EndIf


Func GetImageName()
;InputBox features: Title=Yes, Prompt=Yes, Default Text=No, Width=300, Height=150
    Dim $sInputBoxAnswer = InputBox("Image to Mount","Enter the name of the Image to Mount:",""," ","300","150","-1","-1")
    Return $sInputBoxAnswer
EndFunc

Func ValidateInputBox($sInputBoxAnswer)
    Select
        Case @Error = 0;OK - The string returned is valid
            If StringLen($sInputBoxAnswer) < 1 Then
    ;MsgBox features: Title=No, Text=Yes, Buttons=OK, Icon=Warning
                MsgBox(48,"Input not provided!","Please enter an Image Name!")
                GetImageName()
                ValidateInputBox($sInputBoxAnswer)
            EndIf

       Case @Error = 1;The Cancel button was pushed
           Exit

       Case @Error = 3;The InputBox failed to open
;MsgBox features: Title=No, Text=Yes, Buttons=OK, Icon=Critical
            MsgBox(16,"Fatal Error!","An error occured!  Aborting script!")
            Exit
    EndSelect
EndFunc
Edited by robinsiebler
Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...