marusa122 wrote: ↑
Здравствуйте. Есть скрипт, который при нажатии комбинации клавиш должен вставлять номер строки в текстовом поле, текущие дату и время и определенную запись
На самом деле скрипт пропускает
первую строку, потому что StringSplit от пустой строки делает
ноль частей.
- Вы вводите 'да';
- AHK услужливо стирает эти буквы перед тем, как выполнять код;
- ControlGetText получает из поля пустую строку;
- StringSplit от пустой строки запишет в переменную Lines число 0.
- Вы прибавляете единичку, и вроде всё правильно...
- ...но на следующей строке StringSplit увидит перенос строки и запишет в Lines число 2.
Есть другой способ считать строки (и не только), через
StrReplace:
Code: Select all
...
StrReplace(OriginalText, "`n", "`n", Lines0) ; считаем, сколько в тексте переносов строк
LineNumber := Lines0 + 1 ; и прибавляем 1.
...
И еще проблема - в текстовом поле в браузере не считает, постоянно пишет "1)...". Что не так со скриптом?
Со скриптом всё в порядке, просто в браузере нет текстового поля Edit1. Там вообще нет привычных системных элементов — они сделаны чтоб работать и на Windows, и на Linux, и на MacOS, поэтому все кнопки и поля, которые там есть — самодельные, и через AHK к ним достучаться очень непросто.
Если Вас не раздражает мерцание и скачущий курсор, можно сделать чтение поля через выделение и копирование всего текста по Ctrl+A / Ctrl+C, а текст доставать из буфера обмена. В общем-то, надёжнее будет сразу в буфере обмена дописать нужное и вставить всё целиком.
Code: Select all
:*:да::
{
FormatTime, CurrentDateTime,, dd.MM H:mm
SetKeyDelay 0
Clipboard := "" ; Надеюсь, в буфере обмена не было ничего важного
SendInput ^a^c ; Выделяем и копируем весь текст
ClipWait, 1 ; Ждём, пока скопируется текст - вдруг браузер задумался.
OriginalText := Clipboard
StrReplace(OriginalText, "`n", "`n", LinesCount)
LineNumber := LinesCount + 1
Result := LineNumber . ") " . CurrentDateTime . " выполнено"
Clipboard .= Result
SendInput ^v ; Вставляем результат
Return
}
Привет :3