9

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

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

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

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

ДОПОЛНЕНИЕ:

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

6 ответов6

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 будет сканировать этот скрипт. Если он соответствует какой-либо комбинации клавиш, которая предшествует :: , он выполнит следующую команду. Если оператор 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

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

Launchy

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

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

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

3

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

Например, я подключил Caps Lock+a к окну Firefox при переполнении стека, Caps Lock+s к Firefox у суперпользователя и 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.

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, и оно останется сфокусированным на активном окне.

1

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

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

1

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

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

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

образ

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .