Autohotkey 切换高对比度主题-windows 10

Autohotkey 切换高对比度主题-windows 10,autohotkey,Autohotkey,我希望能够通过按F1键在Windows 10中切换高对比度主题 在Windows 10中切换高对比度主题的快捷方式是: Left Alt + Left Shift + Print Screen 这是我的剧本: #NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. ; #Warn ; Enable warnings to assist with detecting co

我希望能够通过按F1键在Windows 10中切换高对比度主题

在Windows 10中切换高对比度主题的快捷方式是:

Left Alt + Left Shift + Print Screen

这是我的剧本:

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

; Toggle HighContrast Theme: Alt + Shift + PrintScreen
F1::
Send !+{PrintScreen}
Return
使用以下命令:

F1::
Send {LAlt down}{LShift down}{PrintScreen}{LAlt Up}{LShift Up}
return
来自官方:

按use down类似:{LWin down}{RWin down}
Release use up like:{LWin up}{RWin up}

您可以通过手动运行.theme文件来应用设置。问题是它将打开“设置”对话框。此脚本将运行“高对比度1”主题文件,等待“设置”对话框打开,然后关闭它

编辑:添加了在两个主题之间切换的代码

hc := false
hctheme := "C:\Windows\Resources\Ease of Access Themes\hc1.theme"
stdtheme := "C:\Windows\Resources\Themes\theme1.theme"
; your personalized theme may be in
; C:\Users\{user.name}\AppData\Local\Microsoft\Windows\Themes\Custom.theme

F1::
  hc := !hc

  if (hc)
    run %hctheme%
  else
    run %stdtheme%

  WinWait Settings
  WinClose Settings
return

在测试这一点时,似乎操作系统中的Alt+PrtScr键盘组合挂得太低,以至于在默认情况下拍摄活动窗口的屏幕截图之前,自动热键无法覆盖该组合以添加Shift修改器。(环顾AHK论坛,这似乎也是共识。)

我确实找到了一些,在Win10 Pro上对其中的一些进行了轻微的修改:

F1:: ;toggle high contrast
    vSize := A_PtrSize=8?16:12
    VarSetCapacity(HIGHCONTRAST, vSize, 0)
    NumPut(vSize, &HIGHCONTRAST, 0, "UInt") ;cbSize
    ;SPI_GETHIGHCONTRAST := 0x42
    DllCall("user32\SystemParametersInfo", UInt,0x42, UInt,vSize, Ptr,&HIGHCONTRAST, UInt,0)
    vFlags := NumGet(&HIGHCONTRAST, 4, "UInt") ;dwFlags
    ;JEE_Progress(vFlags, 1000)
    if (vFlags & 1) ;HCF_HIGHCONTRASTON := 0x1
        vFlags -= 1
    else
        vFlags += 1
    ;JEE_Progress(vFlags, 1000)
    VarSetCapacity(HIGHCONTRAST, vSize, 0)
    NumPut(vSize, &HIGHCONTRAST, 0, "UInt") ;cbSize
    NumPut(vFlags, &HIGHCONTRAST, 4, "UInt") ;dwFlags
    ;SPI_SETHIGHCONTRAST := 0x43
    DllCall("user32\SystemParametersInfo", UInt,0x43, UInt,vSize, Ptr,&HIGHCONTRAST, UInt,0)
return

谢谢,但这只是截图。所以它不会切换主题。谢谢,它会更改主题,但不会切换(正如问题中提到的快捷方式所做的)。也许一个“IF(hc1.theme正在运行){run other.theme}ELSE(run hc1.theme)”会有所帮助,但我不知道这是否可能很容易做到更新假定在ahk脚本启动时标准主题正在运行。如果它处于高对比度模式,第一次按F1键时,它将保持在高对比度模式,然后切换。谢谢,它工作得很好,看起来研究得很好。不过,我会选择更容易理解的解决方案。