Невозможно запустить автоматический инструмент Windows для автоматического запуска с AutoHotKey

13

Я пытаюсь заставить работать снайперский инструмент Windows 7, когда я нажимаю PRINTSCREENкнопку клавиатуры на клавиатуре AUTOHOTKEY.

Я был неудачным до сих пор, хотя. Вот что у меня есть для скрипта AutoHotKey.

Я пробовал это

PRINTSCREEN::Run, c:\windows\system32\SnippingTool.exe

и это

PRINTSCREEN::Run, SnippingTool.exe

и это

PRINTSCREEN::Run, SnippingTool

И все они дают мне ошибку, которая в основном говорит, что он не может найти файл, однако путь к файлу кажется правильным, я могу скопировать, вставить его в окно, и он открывает инструмент для разрезания, есть идеи, почему он не будет работать?


Вот полный код моего файла AHK ...

;
; AutoHotkey Version: 1.x
; Language:       English
; Platform:       Win7
; Author:         Jason Davis <friendproject@>
;
; Script Function:
; Template script (you can customize this template by editing "ShellNew\Template.ahk" in your Windows folder)
;

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.


/*
PRINTSCREEN = Will run Windows 7 snipping tool
*/
PRINTSCREEN::Run, c:\windows\system32\SnippingTool.exe
return
JasonDavis
источник

Ответы:

17

Вы случайно не используете 64-битную версию Windows 7?

Windows 7 (как и Vista, я считаю) реализует так называемое перенаправление файловой системы WoW64. Если это так, вам нужно указать AHK на каталог Sysnative:

PrintScreen :: Выполнить, "C: \ Windows \ Sysnative \ SnippingTool.exe"
Джон Т
источник
4

использование

PrintScreen :: Запустить C: \ Windows \ explorer.exe C: \ Windows \ system32 \ SnippingTool.exe

Это будет правильно вызывать исполняемый файл в границах перенаправления файловой системы WoW64

Стив
источник
4

Вы можете определить, нужно ли вам вызывать SnippingTool.exe из Sysnative или из windows32 в зависимости от того, работает ли autohotkey как процесс Wow64 или нет.

PrintScreen::LaunchSnippingTool()

; Determines if we are running a 32 bit program (autohotkey) on 64 bit Windows
IsWow64Process()
{
   hProcess := DllCall("kernel32\GetCurrentProcess")
   ret := DllCall("kernel32\IsWow64Process", "UInt", hProcess, "UInt *", bIsWOW64)
   return ret & bIsWOW64
}

; Launch snipping tool using correct path based on 64 bit or 32 bit Windows
LaunchSnippingTool()
{
    if(IsWow64Process())
    {
        Run, %windir%\Sysnative\SnippingTool.exe
    }
    else
    {
        Run, %windir%\system32\SnippingTool.exe
    }
}

Дополнительная информация и источник для IsWow64Process здесь: http://www.autohotkey.com/community/viewtopic.php?t=22277

jsbannis
источник
Я использовал %A_WinDir%вместо %windir%, с #noEnvотключенной настройкой.
jiggunjer