Форум » » Запускалка файлов » Ответить

Запускалка файлов

SetQ: Сочинил я недавно вспомогательную программу для Пагесов, которая вот что делает: в страницу простого текста я вставляю пути к файлам с которыми мне приходится работать (файлы с чертежами, или текстовые файлы, или pdf-файлы), мне их надо открывать или открывать папку, в которой они лежат. Так вот, при нажатии контрол+правая кнопка мыши программа выделяет тройным ЛКМ весь абзац (а путь к файлу — это один абзац), копирует в буфер обмена, а потом RUN то что в буфере обмена. В результате документ открывается, а если это путь к программе, то программа запустится, а если эта программа лежит в systm32 каталоге, то можно написать просто mspaint (например) в одной строчке и щелкнуть по ней контрол+ПКМ, и программа запустится. А если щелкнуть Альт+ПКМ, то открывается папка, в которой лежит этот файл. Наверно не очень понятно описал, попробую завтра выложить здесь программу — она на ahk написано. Возможно, кому-нибудь будет нужна.

Ответов - 12

Carc: SetQ пишет: Сочинил я недавно вспомогательную программу для Пагесов, которая вот что делает: в страницу простого текста я вставляю пути к файлам с которыми мне приходится работать (файлы с чертежами, или текстовые файлы, или pdf-файлы), мне их надо открывать или открывать папку, в которой они лежат. Так вот, при нажатии контрол+правая кнопка мыши программа выделяет тройным ПКМ весь абзац (а путь к файлу — это один абзац), копирует в буфер обмена, а потом RUN то что в буфере обмена. В результате документ открывается, а если это путь к программе, то программа запустится, а если эта программа лежит в systm32 каталоге, то можно написать просто mspaint (например) в одной строчке и щелкнуть по ней контрол+ПКМ, и программа запустится. А если щелкнуть Альт+ПКМ, то открывается папка, в которой лежит этот файл. Наверно не очень понятно описал, попробую завтра выложить здесь программу — она на ahk написано. Возможно, кому-нибудь будет нужна. Интересно... 1) Но в принципе такое можно делать и через ссылки 2) + есть старинная команда "Открыть как URL" - выделяем текст, правой кнопкой, выбираем команду "Открыть как URL" - Пагесы просто передают ее в ShellExecute на самом деле. Ну например, написал я в тексте cmd.exe, выделил всю строку cmd.exe, + Shift+F10, выбираю открыть как URL = оп-па, запустился командный интерпретатор Windows.

SetQ: Carc пишет: 1) Но в принципе такое можно делать и через ссылки В том-то и задумка, чтобы без ссылок сделать. А ещё я сделал ash для раскраски путей к файлам и они выглядят как ссылки (другого цвета по крайней мере). Carc пишет: 2) + есть старинная команда "Открыть как URL" - выделяем текст, правой кнопкой, выбираем команду "Открыть как URL" - Пагесы просто передают ее в ShellExecute на самом деле. И здесь задумка как раз в том, чтобы ничего не выделять, контекстное меню не вызывать, в нужный пункт меню не целится.

Carc: SetQ пишет: В том-то и задумка, чтобы без ссылок сделать. А ещё я сделал ash для раскраски путей к файлам и они выглядят как ссылки (другого цвета по крайней мере). Дык отлично, лишний аш завсегда пригодиться... SetQ пишет: И здесь задумка как раз в том, чтобы ничего не выделять, контекстное меню не вызывать, в нужный пункт меню не целится. Ну разумно. Другой бы спорил. В принципе могу дать и ID этой команды, "Открыть как URL" - они вообще у меня редко меняются. А вообще, такое, конечно, не сложно сделать как плагин. Plugin API AP кстати дает прямой доступ к редактору текста (кагбэ компонет известен - RichEdit, HWND его апи наружу выдает). Выделить абзац в RichEdit можно и без кликов (ITextRange::Expand(tomPara) и готово... Хотя не в способах достижения результат дело, главное что бы глаз и пальцы радовало


SetQ: Вот ash: ; Путь на диске D [Pairs0] Color=0,127,50 Pairs0='D:\ ' Count=1 AutoColor=0 ; Путь на диске C [Pairs1] Color=100,0,50 Pairs0='C:\ ' Count=1 AutoColor=0 ; Путь в локальной сети [Pairs2] Color=0,0,125 Pairs0='\\ ' Count=1 AutoColor=0 Вот прога: #IfWinActive, Aml Pages 9. ;F2::Send ^{vk53} XButton1::PostMessage, 0x111, 32800, 0, ,Aml XButton2::PostMessage, 0x111, 32801, 0, ,Aml ~RButton & LButton::WinHide, Aml Pages ^RButton:: GoSub GetParagraph Run, %FullFileName%, , UseErrorLevel return !RButton:: GoSub GetParagraph Run, %dir%, , UseErrorLevel return #IfWinActive GetParagraph: MouseClick, left, , , 3 clipboard = Send ^{vk43} ClipWait MouseClick StringTrimRight, FullFileName, clipboard, 2 SplitPath, FullFileName, name, dir, ext, name_no_ext, drive return

SetQ: Carc пишет: В принципе могу дать и ID этой команды, "Открыть как URL" - они вообще у меня редко меняются. Давай! Какой? Carc пишет: А вообще, такое, конечно, не сложно сделать как плагин. Plugin API AP кстати дает прямой доступ к редактору текста (кагбэ компонет известен - RichEdit, HWND его апи наружу выдает). Выделить абзац в RichEdit можно и без кликов (ITextRange::Expand(tomPara) и готово... Тоже думал про плагин, на ahk несколько неестественно получилось.

Carc: SetQ пишет: Давай! Какой? #define ID_EDIT_OPEN_AS_URL 33235 В принципе, я могу вообще сервисную функцию в AP в Plugin API сделать, нечто вида [pre2] enum CMDS_OF_AMLPAGES {CMDAP_???, CMDAP_????} WORD CommandTypeOfAmlToRealCommandID(CMDS_OF_AMLPAGES cmd) {//будет список команд, она по нему будет возвращать реальный Command ID прямо из кода } [/pre2] Хотя повторюсь, эти ID я уж и не помню когда последний раз менялись. SetQ пишет: Тоже думал про плагин, на ahk несколько неестественно получилось. Да там и писать то немного. Можно через встраиваемые меню в Aml Pages, можно подписаться на события редактора текста, и что-то в них делать отследить тот WM_DBLCLK и .... что-то там... Наверное проще через меню: открыть абзац как путь: и поехали.

SetQ: Carc пишет: #define ID_EDIT_OPEN_AS_URL 33235 Ага, попробую прикрутить. А нет ли ещё такой команды с ID, которая бы копировала в буфер обмена весь текущий абзац текста?

Carc: SetQ пишет: Ага, попробую прикрутить. А нет ли ещё такой команды с ID, которая бы копировала в буфер обмена весь текущий абзац текста? #define ID_EDIT_COPY_RIGHT 33555 Копирование всегда из правой панели (не важно, что там панель папки, или текст, или что) А если без выделения, то такого в Aml Pages нет. Можно только через плагины сделать: есть HWND редактора текста (AP плагину его выдает), дальше с остановками везде ITextRange - получаем из HWND (TOM - Text Object Model) Дальше можно прямо из него без буфера обмена получить текст абзаца, а можно и выделение изменить. Дальше дело техники.

SetQ: Carc пишет: А если без выделения, то такого в Aml Pages нет. Можно только через плагины сделать: есть HWND редактора текста (AP плагину его выдает), дальше с остановками везде ITextRange - получаем из HWND (TOM - Text Object Model) Дальше можно прямо из него без буфера обмена получить текст абзаца, а можно и выделение изменить. Дальше дело техники. Наверно, с выделением текста проще. Кстати, если выделять текст вручную ЛКМ в области слева от текста, то в выделение попадает замыкающий символ перевода строки и запуск URL не срабатывет, надо в ручную с шифтом и стрелкой влево снять выделение последнего символа. Это ограничивает запускалку УРЛов по удобству.

Carc: SetQ пишет: Кстати, если выделять текст вручную ЛКМ в области слева от текста, то в выделение попадает замыкающий символ перевода строки и запуск URL не срабатывет, надо в ручную с шифтом и стрелкой влево снять выделение последнего символа. Это ограничивает запускалку УРЛов по удобству. О спасибо! за репорт! Поправлю, будет удалять лидирующие пробелы\переносы тогда перед выполнением.

SetQ: Carc пишет: Поправлю, будет удалять лидирующие пробелы\переносы тогда перед выполнением. И замыкающие! У меня такая строчка работает: StringTrimRight, FullFileName, clipboard, 2

Carc: SetQ пишет: И замыкающие! У меня такая строчка работает: Ну само собой. Я вот только думаю, а если в выделенном текста короткий путь, не попробовать ли его предварительно преобразовать в длинный через GetLongPathName?



полная версия страницы