2012-04-12 5 views
4

私自身のAutoHotKeyスクリプトを書くのが初めてです。これはちょっと愚かなものです。AutoHotKey他のすべての実行をコピー(Ctrl-C)すると奇妙な問題が発生する

スクリプトの意図は、いくつかのテキストを選択して、ホットキー( - W ウィン)を押すようにユーザーのためです。メニューがポップアップし、メニュー項目がクリックされます。選択したテキストをクリップボードにコピーします。それは私が今しようとしているすべてです。

問題は初めて動作した後に失敗し、次に動作してから失敗するなどです。基本的に1回おきに動作します。

私は最新のAutoHotKey_l(ユニコード32ビット)でWin7 x64を実行しています。

私はClipWaitのタイムアウトを持っており、それは基本的に待機し、コピーしたテキストを受信しないと、問題のエラーレベル1決して

は、ここでは、コードです:

#SingleInstance force 
; EXAMPLE #2: This is a working script that creates a popup menu that is displayed when the user presses the Win-w hotkey. 

; Create the popup menu by adding some items to it. 
Menu, MyMenu, Add, Demo, Demo 

return ; End of script's auto-execute section. 

Demo: 
clipboard = ; Start off empty to allow ClipWait to detect when the text has arrived. 
Send ^c 
ClipWait, 2 ; Wait for the clipboard to contain text. 
if ErrorLevel = 1 
{ 
    MsgBox Copy failed 
} 
else 
{ 
    MsgBox Copy worked 
} 
return 

#w::Menu, MyMenu, Show ; i.e. press the Win-w hotkey to show the menu. 

すべてのヘルプは非常だろう感謝。

+1

あなたが見ているものを再現できません。 Win7 x64とまったく同じようにあなたのスクリプトを使うと、毎回「コピーされた」と表示されます。 AHKバージョン1.0.48.05。 – Jay

+1

これはさまざまなプログラムで試しましたか?私はあなたがテキストエリアや何かに焦点を当てていないどこかでそれを使用しているのだろうかと思います。 – Jay

+0

まあ、私はそれが何かばかげたことを知っていた。 :) あなたは正しいです。私はいつもNotepad ++でテストしていましたが、それはどこに問題があるかです。おそらく私はいくつかの他のテキストエディタ(UltraEdit、ワードパッドなど)で試したので、問題の原因となっているプラ​​グインや何かを持っているかもしれません。助けてくれてありがとう! – kman

答えて

7

散発的に動作するスクリプトや他のプログラムで別の動作をするスクリプトがある場合は、キーの押下時間やキーの遅延時間をシミュレートすることをお試しください。

これは、AutoHotkeyが送信する速度を処理するプログラムがないためです。
人工的なキーストロークです。

f1:: 
Send, {ctrl down} 
Sleep, 40 
Send, {c down} 
Sleep, 40 
Send, {c up} 
Sleep, 40 
Send, {ctrl up} 
Return 

我々はそれをより簡潔にするには、いくつかの方法があります。ここでは

は、最も基本的な例です。
最も簡単です(遅延中にブロックするため、スリープとは異なり、常に望ましいとは限りません)
は、SetKeyDelayコマンドです。これはSendEventおよびSendPlayモードでのみ機能します。

f2:: 
SetKeyDelay, 40 ; could be set at the top of the script instead. 
Send, {ctrl down}{c down}{c up}{ctrl up} 
Return 

AHK_Lは、forループと配列を利用することができます使用するものである:

f3:: 
For i, element in array := ["{ctrl down}","{c down}","{c up}","{ctrl up}"] { 
    Sendinput, %element% 
    Sleep, 40 
} Return 

そして、基本的なAHK(またはAHK_L)を使ってLoop, Parseを使用することができます。

f4:: 
list := "{ctrl down},{c down},{c up},{ctrl up}" 
Loop Parse, list, `, 
{ 
    Sendinput, %A_LoopField% 
    Sleep, 40 
} Return 

にです3つについて読むのに便利ですSendmodes
詳細はSend command's pageの下部にあります。

+0

ありがとう、あなたの情報は非常に有用だった。 – kman

関連する問題