ไม่สามารถรับเครื่องมือ Windows snipping ให้ทำงานอัตโนมัติด้วย 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

คำตอบ:


17

คุณใช้ Windows 7 รุ่น 64 บิตโดยบังเอิญหรือไม่?

Windows 7 (รวมถึง Vista ที่ฉันเชื่อ) ใช้สิ่งที่เรียกว่า WoW64 Filesystem Redirection หากเป็นกรณีนี้คุณจะต้องชี้ 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


ฉันใช้%A_WinDir%แทน%windir%โดยที่การ#noEnvตั้งค่าถูกปิดใช้งาน
jiggunjer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.