2015-11-04 37 views
0

我是新來的編碼,我發現在網上卻無法得到下面的代碼到數組保存到一個記事本,而不是在一個MsgBox,我一直在嘗試不同的代碼段。的AutoIt - 保存到記事本,而不是MSGBOX

如果有人可以請給我答案,並調整代碼,以便它保存到記事本,而不是顯示在msgbox中,我更好地學習從拆散工作代碼作爲應用程序更好地嘗試修改/修復損壞/錯誤碼。

我將不勝感激!上述

感謝 銅

Global $Array = _WinGetCtrlInfo(WinGetTitle('')) 
Global $sOne = '[0][0] = ' & $Array[0][0] & @CR, $sTwo 
For $iCC = 1 To $Array[0][0] 
    $sOne &= '[' & $iCC & '][0] = ' & $Array[$iCC][0] & @CR 
    $sTwo &= '[' & $iCC & '][1] = ' & $Array[$iCC][1] & @CR 
Next 
MsgBox(64, 'WinInfo', StringTrimRight($sOne, 1) & @CR & StringTrimRight($sTwo, 1)) 

Func _WinGetCtrlInfo($hWin) 
    If IsString($hWin) Then $hWin = WinGetHandle($hWin) 
    Local $sClassList = WinGetClassList($hWin), $iAdd, $aDLL, $sHold 
    Local $sSplitClass = StringSplit(StringTrimRight($sClassList, 1), @LF), $aReturn[1][2] 
    For $iCount = UBound($sSplitClass) - 1 To 1 Step - 1 
     Local $nCount = 0 
     While 1 
      $nCount += 1 
      If ControlGetHandle($hWin, '', $sSplitClass[$iCount] & $nCount) = '' Then ExitLoop 
      If Not StringInStr(Chr(1) & $sHold, Chr(1) & $sSplitClass[$iCount] & $nCount & Chr(1)) Then 
       $sHold &= $sSplitClass[$iCount] & $nCount & Chr(1) 
       $iAdd += 1 
       ReDim $aReturn[$iAdd][2] 
       $aReturn[$iAdd - 1][0] = $sSplitClass[$iCount] & $nCount 
       $aDLL = DllCall('User32.dll', 'int', 'GetDlgCtrlID', 'hwnd', _ 
        ControlGetHandle($hWin, '', $sSplitClass[$iCount] & $nCount)) 
       If @error = 0 Then 
        $aReturn[$iAdd - 1][1] = $aDLL[0] 
       Else 
        $aReturn[$iAdd - 1][1] = '' 
       EndIf 
      EndIf 
     WEnd 
    Next 
    $aReturn[0][0] = $iAdd - 1 
    Return $aReturn 
EndFunc 

當前的代碼工作正常,並會編controlNN名單但該軟件,我用它用了數百個不同controlNN的,所以它不適合入消息框,我在網上搜索並試圖調整它以保存在記事本中,但仍然存在問題。再次

感謝 銅

+0

你真的應該嘗試從[AutoIt的求助]做教程(https://www.autoitscript.com/autoit3/docs/)第一......即使世界如何自動化的實例[記事本] (https://www.autoitscript.com/autoit3/docs/tutorials/notepad/notepad.htm)。你應該試着去'ClipPut(StringTrimRight($宋,1)@CR&StringTrimRight($ sTwo,1))'而不是使用MSGBOX,然後使用'發送( 「^ C」)'的記事本。 – Samoth

+1

如果你已經有你的數組,你想保存它,爲什麼不使用_FileWriteFromArray? – Xenobiologist

回答

0

可以代替MSGBOX這裏使用了AutoIt內置函數 'FILEWRITE'。

Global $Array = _WinGetCtrlInfo(WinGetTitle('')) 
Global $sOne = '[0][0] = ' & $Array[0][0] & @CR, $sTwo 
For $iCC = 1 To $Array[0][0] 
    $sOne &= '[' & $iCC & '][0] = ' & $Array[$iCC][0] & @CR 
    $sTwo &= '[' & $iCC & '][1] = ' & $Array[$iCC][1] & @CR 
Next 

;MsgBox(64, 'WinInfo', StringTrimRight($sOne, 1) & @CR & StringTrimRight($sTwo, 1)) 

FileWrite("D:/notepad.txt",StringTrimRight($sOne, 1) & @CR & StringTrimRight($sTwo, 1)) 

Func _WinGetCtrlInfo($hWin) 
    If IsString($hWin) Then $hWin = WinGetHandle($hWi n) 
    Local $sClassList = WinGetClassList($hWin), $iAdd, $aDLL, $sHold 
    Local $sSplitClass = StringSplit(StringTrimRight($sClassList, 1), @LF), $aReturn[1][2] 
    For $iCount = UBound($sSplitClass) - 1 To 1 Step - 1 
     Local $nCount = 0 
     While 1 
      $nCount += 1 
      If ControlGetHandle($hWin, '', $sSplitClass[$iCount] & $nCount) = '' Then ExitLoop 
      If Not StringInStr(Chr(1) & $sHold, Chr(1) & $sSplitClass[$iCount] & $nCount & Chr(1)) Then 
       $sHold &= $sSplitClass[$iCount] & $nCount & Chr(1) 
       $iAdd += 1 
       ReDim $aReturn[$iAdd][2] 
       $aReturn[$iAdd - 1][0] = $sSplitClass[$iCount] & $nCount 
       $aDLL = DllCall('User32.dll', 'int', 'GetDlgCtrlID', 'hwnd', _ 
        ControlGetHandle($hWin, '', $sSplitClass[$iCount] & $nCount)) 
       If @error = 0 Then 
        $aReturn[$iAdd - 1][1] = $aDLL[0] 
       Else 
        $aReturn[$iAdd - 1][1] = '' 
       EndIf 
      EndIf 
     WEnd 
    Next 
    $aReturn[0][0] = $iAdd - 1 
    Return $aReturn 
EndFunc 
0

與其說MsgBox你可以運行記事本,並使用Send()鍵入文本到記事本中。

Global $Array = _WinGetCtrlInfo(WinGetTitle('')) 
Global $sOne = '[0][0] = ' & $Array[0][0] & @CR, $sTwo 
For $iCC = 1 To $Array[0][0] 
    $sOne &= '[' & $iCC & '][0] = ' & $Array[$iCC][0] & @CR 
    $sTwo &= '[' & $iCC & '][1] = ' & $Array[$iCC][1] & @CR 
Next 
Run("notepad.exe") 
WinWaitActive("Unbenannt - Editor") 
Send($sOne) 
Send($sTwo) 

請注意,您必須修改空白記事本窗口的標題以與本地化相匹配。

這裏有一個關於這個話題的有趣教程:
https://www.autoitscript.com/autoit3/docs/tutorials/notepad/notepad.htm

正如你可以遵循Xenobiologist的建議,並使用_FileWriteFromArray直接寫入到一個文件,然後用記事本打開這個文件,這是快了很多的選擇:

#include <File.au3> 
Global $Array = _WinGetCtrlInfo(WinGetTitle('')) 
_FileWriteFromArray(@DesktopDir & "\output.txt", $Array) 
Run("notepad.exe " & @DesktopDir & "\output.txt", @WindowsDir, @SW_MAXIMIZE) 
相關問題