autohotkey论坛这个帖子里有
Invert window colors - AutoHotkey Community
全局反色和单个窗口反色的代码。
单个窗口反色需要配置UIA,较为复杂。
全局反色ctrl shift f 触发。
#NoEnv
#SingleInstance Force
SetBatchLines -1
DllCall("LoadLibrary", "Str", "Magnification.dll")
Initialized := False
OnExit, Uninitialize
InvertMatrix := [-1, 0, 0, 0, 0
, 0, -1, 0, 0, 0
, 0, 0, -1, 0, 0
, 0, 0, 0, 1, 0
, 1, 1, 1, 0, 1]
VarSetCapacity(MagEffectInvert, 100, 0)
Addr := &MagEffectInvert
For I, V In InvertMatrix
Addr := NumPut(V, Addr + 0, "Float")
Return
; ----------------------------------------------------------------------------------------------------------------------
Uninitialize:
If (Initialized)
DllCall("Magnification.dll\MagUninitialize")
ExitApp
; ----------------------------------------------------------------------------------------------------------------------
^+f::
If (Initialized)
Initialized := DllCall("Magnification.dll\MagUninitialize", "UInt") & 0
Else If (Initialized := DllCall("Magnification.dll\MagInitialize", "UInt"))
DllCall("Magnification.dll\MagSetFullscreenColorEffect", "Ptr", &MagEffectInvert)
Return#NoEnv
#SingleInstance Force
SetBatchLines -1
DllCall("LoadLibrary", "Str", "Magnification.dll")
Initialized := False
OnExit, Uninitialize
InvertMatrix := [-1, 0, 0, 0, 0
, 0, -1, 0, 0, 0
, 0, 0, -1, 0, 0
, 0, 0, 0, 1, 0
, 1, 1, 1, 0, 1]
VarSetCapacity(MagEffectInvert, 100, 0)
Addr := &MagEffectInvert
For I, V In InvertMatrix
Addr := NumPut(V, Addr + 0, "Float")
Return
; ----------------------------------------------------------------------------------------------------------------------
Uninitialize:
If (Initialized)
DllCall("Magnification.dll\MagUninitialize")
ExitApp
; ----------------------------------------------------------------------------------------------------------------------
^+f::
If (Initialized)
Initialized := DllCall("Magnification.dll\MagUninitialize", "UInt") & 0
Else If (Initialized := DllCall("Magnification.dll\MagInitialize", "UInt"))
DllCall("Magnification.dll\MagSetFullscreenColorEffect", "Ptr", &MagEffectInvert)
Return```