Переход к определённой строке в cmd
- Author
- Message
-
Offline
- Posts: 41
- Joined: Wed Mar 23, 2016 1:18 pm
Переход к определённой строке в cmd
Искал команду для перехода к определённой строке/символу через командную строку, не нашёл. Имеется ли такая возможность?
-
Offline
- Posts: 348
- Joined: Mon Jun 03, 2019 2:33 am
Re: Переход к определённой строке в cmd
Dimsok
Посмотрел в справке-html, там есть раздел ком-строка, но нет указанной возможности, хотя имеет смысл. Но мне бы хотелось, чтобы в ком. строке была возможность "Открыть и найти слово", типа
а прыжок в позицию типа
то есть в строку 3, в строку 3 колонка 8, в позицию 10000
Посмотрел в справке-html, там есть раздел ком-строка, но нет указанной возможности, хотя имеет смысл. Но мне бы хотелось, чтобы в ком. строке была возможность "Открыть и найти слово", типа
Code: Select all
AkelPad.exe Find"найти слово"
Code: Select all
AkelPad.exe GoTo"3"
AkelPad.exe GoTo"3:8"
AkelPad.exe GoTo"-1:10000"
-
Offline
- Posts: 348
- Joined: Mon Jun 03, 2019 2:33 am
Dimsok wrote:И как это в комстроку прописать? "\AkelPad.exe" "file" GoTo"3:8", к примеру, спрашивает, создать новый файл C\go to 3:8?

Как вариант, можно скриптом, то есть после открытия ещё придётся нажать хоткей. А также я не нашёл возможности запустить скрипт на старте AkelPad. Но можно запустить скрипт AutoIt3 и вызвать команду прыжка.
-
Offline
- Posts: 348
- Joined: Mon Jun 03, 2019 2:33 am
Ну вот пример на AutoIt3:Dimsok wrote:Может, через какой-нибудь скрипт попробовать. Есть что-то похожее?
Ещё всякие команды для примера#include <SendMessage.au3>
#include <GuiRichEdit.au3>
; Запуск AkelPad
; Run('C:\ваш путь\AkelPad\AkelPad.exe')
; Ожидание максимум 5 секунд до момента, когда оно станет существующим
$hWnd = WinWait("[CLASS:AkelPad4]", "", 5) ; без таймаута (5) ожидание бесконечно
If Not $hWnd Then
MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
Exit
EndIf
; Ожидание 1 секунды зависит от количества файлов, иначе следующие команды отправятся в пустоту. Если AkelPad открыт, то задержка не нужна.
Sleep(1000)
$hEdit = ControlGetHandle($hWnd, "", "AkelEditW1")
If Not $hEdit Then
MsgBox(4096, 'Сообщение', 'Окно редактирования не найдено, завершаем работу скрипта')
Exit
EndIf
; Любой из вариантов
; _SendMessage($hEdit, 177, 122, 122)
_GUICtrlRichEdit_GotoCharPos($hEdit, 122)
#include <GuiRichEdit.au3>
; Запуск AkelPad
; Run('C:\ваш путь\AkelPad\AkelPad.exe')
; Ожидание максимум 5 секунд до момента, когда оно станет существующим
$hWnd = WinWait("[CLASS:AkelPad4]", "", 5) ; без таймаута (5) ожидание бесконечно
If Not $hWnd Then
MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
Exit
EndIf
$hEdit = ControlGetHandle($hWnd, "", "AkelEditW1")
If Not $hEdit Then
MsgBox(4096, 'Сообщение', 'Окно редактирования не найдено, завершаем работу скрипта')
Exit
EndIf
$info = ''
$info &= "Число строк" & @TAB & @TAB & _GUICtrlRichEdit_GetLineCount($hEdit) & @CRLF
$info &= "1-я видимая" & @TAB & @TAB & _GUICtrlRichEdit_GetNumberOfFirstVisibleLine($hEdit) & @CRLF
$info &= "Позиция начала строки" & @TAB & @TAB & _GUICtrlRichEdit_GetFirstCharPosOnLine($hEdit) & @CRLF
$info &= "Символов в строке" & @TAB & @TAB & _GUICtrlRichEdit_GetLineLength($hEdit, -1) & @CRLF
$info &= "Флаг модификации" & @TAB & @TAB & _GUICtrlRichEdit_IsModified($hEdit) & @CRLF
$info &= "В буфере вставляемые данные?" & @TAB & @TAB & _GUICtrlRichEdit_CanPaste($hEdit) & @CRLF
; $info &= "Включает флаг только чтение" & @TAB & @TAB & _GUICtrlRichEdit_SetReadOnly($hEdit) & @CRLF
MsgBox(0, 'Сообщение', $info)
-
Offline
- Site Admin
- Posts: 6403
- Joined: Thu Jul 06, 2006 7:20 am
Вариант №1
Вариант №2
Code: Select all
AkelPad.exe "c:\File.txt" /if(`SendMain(1204 /*AKD_GOTO*/, 0x1 /*GT_LINE*/, "10:3")`, "", "")
Code: Select all
AkelPad.exe "c:\File.txt" /Call("Scripts::Main", 1, "EvalCmd.js", `AkelPad.SendMessage(AkelPad.GetMainWnd(), 1204 /*AKD_GOTO*/, 0x1 /*GT_LINE*/, "10:3");`)
Last edited by Instructor on Mon Aug 05, 2019 6:58 am, edited 2 times in total.
-
Offline
- Posts: 348
- Joined: Mon Jun 03, 2019 2:33 am
Пример чего?Dimsok wrote:Покажите пример.
Вызов команды показали выше.
В скрипт EvalCmd.js добавь команду выделения текста
Code: Select all
AkelPad.SetSel(5, 10);
Code: Select all
// Получаем позицию символа в начале указанной строки
function GetBeginLine(nLine)
{
return SendMessage(hEditWnd, 187 /*EM_LINEINDEX*/, nLine, 0);
}

-
Offline
- Posts: 3234
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
Dimsok
Для простого выделения можно использовать ком. строку Instructor'а с EvalCmd.js, но вместо AkelPad.SendMessage() вставить AkelPad.SetSel(5, 10);
Не надо в EvalCmd.js добавлять никаких команд по выделению. Нужно создать свой скрипт, в котором делаешь, что хочешь, а в командной строке вызываешь не EvalCmd.js, а свой скрипт. Передача параметров своему скрипту по аналогии с передачей параметров скрипту EvalCmd.js.AZJIO wrote:В скрипт EvalCmd.js добавь команду выделения текстаCode: Select all
AkelPad.SetSel(5, 10);
Для простого выделения можно использовать ком. строку Instructor'а с EvalCmd.js, но вместо AkelPad.SendMessage() вставить AkelPad.SetSel(5, 10);