Надежные пользовательские сочетания клавиш Windows?

9

У меня есть глобальные сочетания клавиш Windows, назначенные нескольким различным экземплярам cmd.exe. Я делаю это, создавая ярлыки для cmd.exe на моем рабочем столе и назначая каждому из них уникальную комбинацию клавиш (например, CTRL + SHIFT + U). Довольно простые вещи. Я использую Win2K8 (R1 и R2).

Это работает просто отлично ... большую часть времени. Но с бешеной регулярностью, иногда это не так. Или это будет работать с большой задержкой (много секунд). Не имеет значения, какое приложение в данный момент имеет фокус (это может быть даже одна из командных подсказок). Неважно, какие ключи я назначаю (я пробовал несколько вариантов WIN, CTRL и SHIFT). Я заметил, что это часто, но не всегда, связано с тем, что explorer.exe так или иначе испытывает затруднения (скажем, окно обозревателя, открытое для недоступного общего файлового ресурса, или приложение, не отвечающее, или что-то еще). Другими словами, обработка клавиш быстрого вызова, кажется, очень чувствительна к несвязанной активности системы. Обратите внимание, что всякий раз, когда у меня возникает эта проблема, я всегда могу успешно нажать ALT + TAB в окне, в которое я хочу попасть, но это утомительно.

Я использую ярлыки для этих командных окон сотни раз в день, так что даже 1% отказов становится действительно раздражающим.

Есть ли способ исправить это, или есть какая-нибудь сторонняя утилита, которая НАДЕЖНО перехватывает пользовательские комбинации клавиш, чтобы привлечь внимание к любым приложениям, которые я хочу, способом, который не зависит от других системных действий?

ДОПОЛНЕНИЕ:

Есть свойство ярлыков Windows, которое я не хотел бы потерять при переходе на сторонние инструменты горячих клавиш: ярлыки Windows являются идемпотентными. Как только вы запустили ярлык для какого-либо приложения, повторное нажатие сочетания клавиш приведет вас к уже запущенному процессу - он не запустит новый процесс.

Питер Баер
источник

Ответы:

7

Используйте AutoHotkey. Язык сценариев не является стандартным и может быть сложным для изучения, но если все, что вы хотите сделать, это надежно запускать программы, это просто. Кроме того, вы можете использовать ярлыки для Windows! Используйте следующий пример скрипта и измените его под свои нужды. (Строки, начинающиеся с, ;являются комментариями.)

;win + alt + e ... unload ipod
#!E::
   run d:\Downloads\Apps\deveject\eject ipod.bat
   return

;win + w ... launch winamp
#w::
    run c:\program files (x86)\winamp\winamp.exe
    return

;win + a ... launch AS400
#a::
    run C:\Program Files (x86)\IBM\Client Access\Emulator\Private\1.ws
    return

;win + Shift a ... launch AS400 Printer
#+a::
    run C:\Program Files (x86)\IBM\Client Access\Emulator\Private\3.ws
    return

;win + ctrl + Shift a ... launch 2nd AS400 
#^+a::
    run C:\Program Files (x86)\IBM\Client Access\Emulator\Private\2.ws
    return

Сохраните это как файл .ahk на рабочем столе, установите autohotkey и запустите его.

Каждый раз, когда вы нажимаете любую комбинацию клавиш, AutoHotkey будет сканировать этот скрипт. Если он соответствует какой-либо комбинации клавиш, предшествующих a ::, он выполнит следующую команду. Если оператор return отсутствует, AHK продолжит сканировать скрипт на предмет совпадений после выполнения вашего оператора. Комбинации клавиш описаны ниже.

# = Windows Key
+ = Shift
^ = Control
! = Alt

Вы можете использовать их в любом сочетании с буквами клавиатуры. Одна комбинация, которую я считаю чрезвычайно полезной, заключается в следующем.

; ALT Backtick ... ctrl f4
!`::
    Loop, parse, RcvCtrlW, `,
    {
     IfWinActive %A_LoopField%
     {
        sendinput ^w
        Return
     }
    }
    sendinput ^{f4}
    return

; win Backtick ... alt f4
#`::
   sendinput !{f4}
   return   

Это Alt + `и Win +`. Когда этот скрипт запущен и я нажимаю alt + `, скрипт отправляет ctrl + F4. Win + `становится alt + F4.

Autohotkey - это в основном собственный язык программирования. У меня есть скрипты, которые имитируют "жесты рокера" в масштабе всей системы. У меня есть GMail как ярлыки для моей электронной почты. Если вы потратите время на изучение некоторых его приемов, вы можете сойти с ума. Lifehacker имеет целую кучу полезных скриптов для Autohotkey. Радоваться, веселиться!

Тим Кокер
источник
3
Хм - важной особенностью сочетания клавиш Windows, на которую я полагаюсь, является ее идемпотентность. Когда я в первый раз нажимаю CTRL + SHIFT + U, чтобы вызвать данное приглашение, он запускает cmd.exe. В следующий раз, когда я нажму на это комбо, если этот cmd.exe все еще работает, он просто выводит его вперед, вместо запуска другого экземпляра (что и делает команда запуска Autohotkey). Есть ли способ легко сделать это с AHK?
Питер Баер
3

Вот как я использую AutoHotKey таким образом, чтобы удовлетворить ваши идемпотентные требования.

В качестве примера я подключил Caps Lock+ aк окну Firefox в переполнении стека, Caps Lock+ sк Firefox в Super User и Caps Lock+ dк командной строке.

StartOrToggleMinimize(TheWindowTitle,TheAppPath)
{  
   SetTitleMatchMode, 2
   DetectHiddenWindows, Off
   IfWinActive, %TheWindowTitle%
   {
      WinMinimize, %TheWindowTitle%
   }
   else
   { 
      IfWinExist, %TheWindowTitle%
      {
         WinGet, winid, ID, %TheWindowTitle%
         DllCall("SwitchToThisWindow", "UInt", winid, "UInt", 1)
      }
      else
      {
         run %TheAppPath%
      }
   }
   return
}

; the actual hotkeys:
CapsLock & a::StartOrToggleMinimize("Stack Overflow", "c:\program files\mozilla firefox\firefox.exe -new-window stackoverflow.com")
CapsLock & s::StartOrToggleMinimize("Super User", "c:\program files\mozilla firefox\firefox.exe -new-window superuser.com")
CapsLock & d::StartOrToggleMinimize("cmd", "cmd")

Вы можете изменить режим соответствия названию, чтобы он был настолько ограничительным, насколько вам нужно. Если бы у меня была другая горячая клавиша, которая соответствовала «Mozilla Firefox» (например, вместо «Super User»), она бы циклически проходила по всем моим экземплярам Firefox, так как у каждого есть этот текст в заголовке окна, и я установил его в соответствии с текстом в любом месте в названии.

Этот скрипт в значительной степени основан на этой статье в LifeHacker.

yhw42
источник
Как этот сценарий можно изменить, чтобы НЕ быть идемпотентным? В частности, мне нужно несколько экземпляров программы, если я нажимаю сочетания клавиш (у меня работает putty, и мне нужно иметь возможность подключаться к 4+ серверам в любой момент времени, и мне не нужно тянуться за мышью )
Доктор J
Если в заголовке окна есть конкретный уникальный текст для каждого экземпляра, вы можете назначить горячие клавиши для соответствия этому тексту. См. Выше Caps+aи Caps+sвыше для двух разных случаев Firefox, @DoktorJ
yhw42
Но что, если я никогда не хочу, чтобы это соответствовало? Когда я переключаюсь между ними, я просто нажимаю ALT + TAB, поэтому мне не нужны ярлыки для каждого экземпляра PuTTY - мне просто нужен ярлык, который всегда открывает новый экземпляр PuTTY, независимо от того, сколько окон PuTTY у меня уже есть есть открыть. Будет ли это делать только вызов "run c: \ tools \ putty \ putty.exe" непосредственно из назначенной горячей клавиши?
Доктор J
@DoktorJ: Ой! Да. Именно так вы и сделаете. Хотя я думаю, вы также можете назначить горячие клавиши в свойствах ярлыков Windows. Я предполагал, что вы хотите Caps+1указать конкретный экземпляр PuTTY (который, на мой взгляд, лучше, чем AltTab :)).
yhw42
3

Еще одна альтернатива для быстрого и интуитивного запуска ваших программ:

Launchy

Launchy - это бесплатная утилита для Windows и Linux, которая поможет вам забыть о меню «Пуск», значках на рабочем столе и даже о вашем файловом менеджере.

Launchy индексирует программы в меню «Пуск» и может запускать документы, файлы проектов, папки и закладки всего несколькими нажатиями клавиш!

альтернативный текст

Готье
источник
Это похоже на поиск меню Пуск Win7.
Тео Белер
@Tyr: это так. Я начал использовать это в Windows XP, но продолжаю делать это в Win7. Я не очень часто искал меню «Пуск», но у меня сложилось впечатление, что Launchy все еще быстрее. Хотя я могу ошибаться в этом.
Готье
2

К сожалению, 6 лет спустя с Windows 10 существуют те же проблемы, и с недавним обновлением Windows 10 я обнаружил, что некоторые ярлыки / программы больше не являются идемпотентными ! Особенно Putty, где у меня есть несколько ярлыков для одного сеанса.

Поэтому я использую AutoHotKey и изменил функцию, которой поделились в этом потоке (на основе этой статьи в LifeHacker ), чтобы он использовал INI-файл для отслеживания каждого ярлыка. При этом не используется заголовок Windows каждой программы, так как он может измениться в Putty, если вы используете screen или SSH на другом сервере, функцию, которую я лично хочу сохранить!

Также включена функция «DeleteINIEntry ()», для которой можно создать ярлык, чтобы он удалял запись UniqueName из файла INI. Или вы можете просто вручную редактировать и изменять файл.

INIFilePath := "C:\Temp\AHK.ini"

RunOrSwitchWin( UniqueName, AppPath )
{  
    global INIFilePath
    IniRead, TargetID, %INIFilePath%, windowids, %UniqueName%
    ActiveID := WinExist("A")

    ; cannot use '=' here as comparing an integar to string doesn't work well
    IfEqual TargetID, %ActiveID%
    {
        WinMinimize 
        return
    }

    WinGet, AllIDs, list

    Loop, %AllIDs%
    {
        this_id := AllIDs%A_Index%

        ifEqual TargetID, %this_id%
        {
            DllCall("SwitchToThisWindow", "UInt", this_id, "UInt", 1)
            return
        }
    }

    run, %AppPath%,,, CurrentPID
    WinWait ahk_pid %CurrentPID%
    IniWrite, % WinExist("A"), %INIFilePath%, windowids, %UniqueName%

   return
}

DeleteINIEntry()
{
    global INIFilePath
    InputBox, UniqueName, Delete INI Entry, Enter UniqueName

    If ErrorLevel = 0
        IniDelete, %INIFilePath%, windowids, %UniqueName%

    return
}

^!3::DeleteINIEntry()

; Putty shortcuts. 
; ^!1 is NOT idempotent and will run it over and over again.
^!1::run "C:\Program Files\PuTTY\putty.exe"
^!2::RunOrSwitchWin( "session1", "C:\Program Files\PuTTY\putty.exe -load session1" )

Если вы не хотите, чтобы окно свернулось, просто закомментируйте (добавьте a;) строку WinMinimize, и оно останется сфокусированным на активном окне.

agalest
источник
1

Это не связанная деятельность, проводник - это процесс, который обрабатывает эти ярлыки.

Есть утилиты (например, http://www.vsisystems.com/keyboardshortcuts.htm ), которые претендуют на эту функциональность, но я не знаю, решит ли какая-нибудь из них проблему скорости.

Офир
источник
1

Если проводник занят, он не может обрабатывать ярлыки, поэтому требуется другая программа.

Простой и эффективный лаунчер PS Hot Launch VVL :

Это бесплатная утилита, которая позволяет вам определять свои собственные горячие клавиши, чтобы одним нажатием клавиши можно было запускать приложение, вставлять часто используемый текст, изменять громкость звука или что-то еще. Программа требует Win95 / 98 / ME или WinNT / 2000 / XP и отлично работает даже на медленных машинах. PS Hot Launch - прекрасная альтернатива меню «Пуск» и панели «Быстрый запуск».

образ

harrymc
источник