2015-04-28 3 views
0

Это мой первый скрипт AHK, и у меня возникли проблемы с его получением того, что я хочу. Используя комбинацию клавиш Ctrl + Alt + A в Блокноте, я хочу перейти к началу строки текста, выбрать первый символ, скопировать его в буфер обмена и проверить, что это за буква. Прямо сейчас, я просто пытаюсь проверить содержимое буфера обмена с помощью MsgBox, но есть проблема: MsgBox отображает его содержимое до команда копирования! Вот сценарий:AutoHotkey отображает MsgBox перед назначением переменной

#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. 
; #Warn ; Enable warnings to assist with detecting common errors. 
SendMode Input ; Recommended for new scripts due to its superior speed and reliability. 
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. 

#IfWinActive, ahk_class Notepad 

^!a:: 
    Send, {Home} 
    Send, {LShift Down}{Right}{LShift Up} 
    Send, ^c 
    MsgBox, %clipboard% 
return 

Запуск команды несколько раз, вы увидите, что она копирует выделенный текст после он отображает MsgBox. Он отображает текст из предыдущей команды. Любые идеи о том, что я могу делать неправильно?

Update: Казалось бы, что маленький кусочек сценария, который я забыл включить в вопрос может быть виновником: SendMode Input ; Recommended for new scripts due to its superior speed and reliability. Я обновил сценарий выше также. Когда я удаляю эту строку, она работает так, как ожидалось. Может ли кто-нибудь сказать мне, почему?

+0

Я не могу воспроизвести вашу ошибку. Ваш код работает отлично для меня. --- два незначительных намека: горячие клавиши, горячие клавиши и метки всегда должны заканчиваться «возвратом». Добавьте это в самую нижнюю часть вашего кода. --- '#ifWinActive, ahk_class Notepad' запускает начало раздела« Блокнот-только-горячая клавиша ». Возможно, вы захотите закрыть его с помощью '# ifWinActive' в самом низу кода. – Blauhirn

+0

Он также работает для меня. –

+0

Вы можете, однако, добавить 'keyWait, {ctrl}' после 'send^c' или использовать ключевое слово' setkeydelay' – Blauhirn

ответ

0

Удаление SendMode Input ; Recommended for new scripts due to its superior speed and reliability. исправило проблему.

+0

Пожалуйста, отметьте это как свое решение! – Blauhirn

0

Это просто, что вы не добавили строку return, в конец кода?

^!a:: 
    Send, {Home} 
    Send, {LShift Down}{Right}{LShift Up} 
    Send, ^c 
    MsgBox, %clipboard% 
return, 

в качестве альтернативы можно добавить задержку, команда для этого sleep, 1000 = 1 секунда.

Если это не удается, попробуйте следующее:

^!a:: 
    Send, {Home} 
    Send, {LShift Down}{Right}{LShift Up} 
    Send, ^c 
    sleep, 200 
    MsgBox, %clipboard% 
return, 
Смежные вопросы