1

私は AutoHotKey を初めて使用し、その文法に慣れていません。Webで検索しましたが、役に立つ例が見つかりません。

次の図を見てください。

+---+---+---+---+-------------------
| a | b | c | d |                         (1)
+---+---+---+---+-------------------
              ^
              |


+---+---+---+---+-------------------
| a | b | c | d |                         (2)
+---+---+---+---+-------------------
          ^
          |


+---+---+---+---+-------------------
| a | b | c | d |                         (3)
+---+---+---+---+-------------------
  ^
  |

+---+---+---+---+-------------------
| a | b | c | d |                         (4)
+---+---+---+---+-------------------
              ^
              |

いくつかの文字列を記録して、それらをナビゲートしたいと考えています。たとえば、プログラムの開始時に配列 my_array が作成されました。ユーザーが ctrl+c を押すと、選択されたテキスト (文字列 a としましょう) がクリップボードにコピーされ、my_array にも追加されました。ユーザーがもう一度 ctrl+c を押すと、b がクリップボードにコピーされ、my_array にも追加されました。(1) を参照してください。現在、a、b、c、d が my_array に追加され、d がクリップボードにあります。ユーザーが alt+left_arrow を押すと、c がクリップボードにコピーされました。(2) を参照してください。ユーザーが alt+left_arrow を 2 回押した場合、a はクリップボードにあります。(3) を参照してください。ユーザーは alt+right_arrow を 3 回押すと、d をクリップボードに戻すことができます ((4) を参照)。この時点で、ユーザーは引き続き ctrl+c を押してデータを my_array に追加し、alt+left_arrow または alt+right_arrow を押して配列内を移動してデータを取り戻すことができます。

実際、これは他のよく知られた言語では簡単に実装できますが、AutoHotKey で実装するのは困難です。誰でも助けることができますか?

前もって感謝します。

4

2 に答える 2

1

コピーしたExcelデータを配列に入れる例を次に示します。

MyClipBoard=%ClipBoard% ; Remove any non-text (format) data

Loop, parse, MyClipBoard, `n,`r ; Place Excel content from clipboard in 2 dimentional Array
{ ; Start-Loop Read through each Line (record) in the ClipBoard data from Excel
  FullRecord:=A_LoopField ; Put a whole row in the variable FullRecord
  RecordNumber:=A_Index ; Store the current record (row) number.
  Loop, parse, FullRecord, %A_Tab% ; Parse the row content (FullRecord) in separate fields
  { ; Start-Loop Read through each Field in the ClipBoard data from Excel
    FieldNumber:=A_Index ; Store the current Field number.
    Array%RecordNumber%_%FieldNumber% := A_LoopField ; Array1_1 is Excel Row 1 column A, Array1_2 = Excel Row 1 column B
  } ; End-Loop Read through each Field in the ClipBoard data from Excel
} ; End-Loop Read through each Line (record) in the ClipBoard data from Excel

あなたがあなたを動かすためにもっと多くの例が必要な場合は、私に知らせてください。
OKここにいくつかの例があります。Variable+=1の代わりにVariable++を使用するなど、他の回答の例を見ると、これをクリーンアップできます。

; Read data from text file into one dimentional Array
ArrayCount = 0
Loop, Read, %A_ScriptDir%\SearchTerms.txt ; This loop retrieves each line from the file, one at a time.
{
    ArrayCount += 1  ; Keep track of how many items are in the array.
    Array%ArrayCount% := A_LoopReadLine ; Store this line in the next array element.
}


TextCounter = 1
IniWrite, %TextCounter%, C:\Temp\SearchTerms.ini, Counter, Nr ; Write counter in ini so I can restart at latest counter

SearchText:= Array1 ; Put data from Array1 into variable SearchText
MouseClick, left
Send, %SearchText%{Enter}
SplashTextOn, 200, 20,Searchterm,F%TextCounter% %SearchText%
WinMove, Searchterm, , , 0
Return

Browser_Favorites::
IniRead, TextCounter, C:\Temp\SearchTerms.ini, Counter, Nr ; Read latest counter
TextCounter += 1
IniWrite, %TextCounter%, C:\Temp\SearchTerms.ini, Counter, Nr
SearchText:=Array%TextCounter% ; Put data from Array+number into variable SearchText

; Examples with Array of 2 deep.

MyClipBoard=%ClipBoard% ; Remove any non-text (format) data

Loop, parse, MyClipBoard, `n,`r ; Place Excel content from clipboard in 2 dimentional Array
{ ; Start-Loop Read through each Line (record) in the ClipBoard data from Excel
  FullRecord:=A_LoopField ; Put a whole row in the variable FullRecord
  RecordNumber:=A_Index ; Store the current record (row) number.
  Loop, parse, FullRecord, %A_Tab% ; Parse the row content (FullRecord) in separate fields
  { ; Start-Loop Read through each Field in the ClipBoard data from Excel
    FieldNumber:=A_Index ; Store the current Field number.
    Array%RecordNumber%_%FieldNumber% := A_LoopField ; Array1_1 is Excel Row 1 column A, Array1_2 = Excel Row 1 column B
  } ; End-Loop Read through each Field in the ClipBoard data from Excel
} ; End-Loop Read through each Line (record) in the ClipBoard data from Excel



DLCounter:=1
DLSub:=1
DLData:=Array%DLCounter%_1
While (DLData <> "")
{
    While (DLData <> "")
    {
        MsgBox, %DLData%
        DLSub += 1
        DLData:=Array%DLCounter%_%DLSub%
    }
    DLSub:=1
    DLCounter += 1
    DLData:=Array%DLCounter%_%DLSub%
}
Return

これは最もクリーンなコードではないかもしれませんが、何ができるかがわかります。

于 2013-01-29T08:40:24.113 に答える
0

Autohotkey には配列がありませんが、次のようにシミュレートできます。

global counterArray := 1
localCounter := counterArray
YourArray%localCounter %:= your_value

配列に新しい要素を追加するとき。

counterArray++
anotherLocalCounter := counterArray
YourArray%localCounter%:= your_value

このコードを関数に入れることもでき、それ自体がインクリメントします

ArrayExpand()
{
counterArray++
counter :=  counterArray
YourArray%counter %:=
}

重要: YourArray はグローバルであってはならず、YourArray%counter% のカウンターはグローバルであってはなりません。残りは問題ではありません。

于 2013-01-29T08:20:34.233 に答える