(По запросу OP я переместил ответ из комментариев сюда)
Если вы хотите попробовать стороннюю программу, вы можете попробовать AutoHotKey (позвольте использовать аббревиатуру AHK далее)
Это долгоживущий проект с открытым исходным кодом, позволяющий по-разному назначать "горячие клавиши" для любых программ, а также для операционной системы. Он не ограничивается общими комбинациями Ctrl+, но также позволяет создавать фразу в виде строки для различной автоматизации. Это может быть простой назначатель горячих клавиш или мощные скрипты для полнофункциональной автоматизации, которые можно использовать практически как замену скриптов bat
, cmd
, vbs
, ps
.
Простейший вариант использования, как спросил OP, - это может быть просто одна строка в скрипте AHK, которая выглядит следующим образом:
F4::WinActivate, ahk_exe /full/path/to/program_that_need_to_be_activated
Где F4
- это горячая клавиша (функциональная клавиша на клавиатуре), но может быть практично любое сочетание клавиш и даже струн.
Это может быть автоматизировано, например, - нажав клавишу F4
активируйте требуемую программу, и, если процесс не запущен, запустите и активируйте (установите фокус и перенесите его вперед, или установите Z-индекс), таким образом скрипт будет выглядеть так:
F4:: ; Comment: Use F4 key to activate or start firefox
{
if WinExist("ahk_exe firefox.exe")
WinActivate, ahk_exe firefox.exe
else
Run, firefox.exe
}
Return
; next is hot key for another program
; We assigning here Windows key + z to activate Notepad++
#z::
{
np = C:\Program Files (x86)\Notepad++\notepad++.exe
if WinExist("ahk_exe %np%")
WinActivate, ahk_exe "%np%"
else
Run, "%np%"
}
Return
; Find and activate Firefox by Windows class by WinKey+x
DetectHiddenWindows, On
#x::
{
fp = C:\Program Files\Mozilla Firefox\firefox.exe
if WinExist("ahk_class MozillaWindowClass")
WinActivate, ahk_class MozillaWindowClass
else
Run, "%fp%"
}
Return
AHK довольно прост в настройке и поставляется с богатым файлом chm
(справка), который охватывает множество пользовательских случаев, которые включают примеры от того, как настроить интерфейс AHK GUI и до использования COM-объектов для автоматизации. Сценарии AHK можно объединить в один файл сценария или несколько файлов, которые можно запускать по требованию.
AHK поддерживает компиляцию скриптов, которая упрощает его распространение как скомпилированную программу, которая делает то же самое, что и автономная установка AHK
PS
Ниже представлено решение AHK для Firefox
с расширением MinTrayR (которое скрывает firefox в системном трее)
Я пытался найти более элегантное решение, но, посмотрев на исходный код MinTrayR , я обнаружил, что он не использует оконные сообщения WM_USER
и принимает только стандартные сообщения ОС, которые потребуют много усилий, чтобы найти правильный дескриптор кнопки Firefox в системном трее программно. Хотя я считаю, что это все еще возможно, я использовал следующую стратегию: скрипт AHK ищет определенное изображение (значок firefox на панели задач) на экране и дважды щелкает по нему нажатием горячей клавиши.
Хотя это легко реализовать, потребуется несколько начальных шагов на стороне пользователя:
- Сверните Firefox (далее FF).
Убедитесь, что значок FF виден в sys.tray
(В Control Panel\All Control Panel Items\Notification Area Icons
установить статус Firefox как Show icon and notification
)
- Нажмите PrintScreen, пока значок FF виден в системном трее. (Это помещает скриншот в буфер обмена.)
- Откройте программу обработки изображений, такую как
Paint
.
- Вставьте содержимое буфера обмена (то есть скриншот).
- Выберите регион, который не меняется и который уникален для значка Firefox на панели задач. (Выберите его как можно ближе, чтобы поймать только глобус с лисой. Используйте масштабирование, чтобы точно выбрать область значка)
Crop
выделенную область и сохранить ее как C:\Users\Public\Pictures\ff.png
После этого вы можете начать использовать следующий скрипт AHK, чтобы развернуть Firefox из системного трея, или запустить новый экземпляр Firefox, если он не запущен, с помощью горячих клавиш WinKey+v .
(Если вы используете 32-битную версию Firefox, замените строку
C:\Program Files\Mozilla Firefox\firefox.exe
с
C:\Program Files (x86)\Mozilla Firefox\firefox.exe
)
#NoEnv
#v::
{
ffIconFile = C:\Users\Public\Pictures\ff.png
fp = C:\Program Files\Mozilla Firefox\firefox.exe
Processname=firefox.exe
Process, Exist, %Processname%
If !ErrorLevel
{
MsgBox, % "Process " Processname " does not exist. Going to start a new one"
Run, "%fp%"
Return
}
pid := ErrorLevel
IfWinNotActive, % "ahk_pid " pid
{
CoordMode Pixel
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, %ffIconFile%
if ErrorLevel = 2
MsgBox Could not conduct the search (icon file path ?).
else if ErrorLevel = 1
MsgBox Firefox icon could not be found on the screen.
else
{ ; MsgBox The icon was found at %FoundX%x%FoundY%.
x := FoundX + 10
y := FoundY + 10
Click %x%, %y%, 0
Click 2
}
}
}
Return