Last active
December 3, 2023 04:19
-
-
Save jerrylususu/ca434b7c34c77968ceecd4b735af1fcf to your computer and use it in GitHub Desktop.
Utils.ahk
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; ====== IMPORTANT ====== | |
; If you're using Windows with locale zh-CN, use **GBK** encoding, not UTF8 | |
; Otherwise the notepad save script will not work! | |
; ====== IMPORTANT ====== | |
#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. | |
; 【右Ctrl+方向键】执行【Home/End/PgUp/PgDn】 | |
; https://meta.appinn.net/t/home-end-pgup-pgdn/17801 | |
>^Left:: | |
SendInput, {Home} | |
Return | |
>^Right:: | |
SendInput, {End} | |
Return | |
>^Up:: | |
SendInput, {PgUp} | |
Return | |
>^Down:: | |
SendInput, {PgDn} | |
Return | |
; Win+C: Open a new cmd window | |
#C:: | |
Run, Notepad.exe | |
Return | |
; Win+N: Open a new TED Notepad window | |
#N:: | |
Run, C:\Program Files (x86)\TED Notepad\TedNPad.exe | |
Return | |
; Win+V when in cmd: direct copy | |
#IfWinActive ahk_class ConsoleWindowClass | |
^V:: | |
SendInput {Raw}%clipboard% | |
return | |
#IfWinActive | |
;https://autohotkey.com/board/topic/148619-set-window-always-on-top-and-change-transparency/ | |
global WindowTitle := "Exolesco - Twitch" ;Default window name | |
global Transparency := 255 | |
refresh() | |
{ | |
ifWinActive, %WindowTitle% | |
{ | |
Winset, Transparent, %Transparency%, %WindowTitle% | |
} | |
} | |
!w:: ;Alt+W: Transparency down | |
if Transparency > 30 | |
{ | |
Transparency := Transparency - 50 | |
} else { | |
Transparency := 30 | |
} | |
refresh() | |
return | |
!q:: ;Alt+Q: Turn transparency up | |
if Transparency < 255 | |
{ | |
Transparency := Transparency + 50 | |
} else { | |
Transparency := 255 | |
} | |
refresh() | |
return | |
; Alt+T: set current window on top | |
!T:: Winset, Alwaysontop, , A | |
; http://blog.sachleen.com/posts/1370369043/snapping-windows-vertically-on-portrait-display/ | |
; dir 0 = top part | |
; dir 1 = bottom part | |
; size 0 = half of screen | |
; size 1 = third of screen | |
; Alt+E: choose the window for opcacity change | |
!e:: ;Set window | |
WinGetTitle, WindowTitle, A | |
return | |
+!s:: ;Alt+Shift+S: Save all notepad instance | |
ClipSaved := ClipboardAll ; 把剪贴板的所有内容保存到您选择的变量中. | |
LastClip := "" | |
WinGet, id, list, *无标题 - 记事本, ,, | |
Loop, %id% | |
{ | |
this_id := id%A_Index% | |
WinActivate, ahk_id %this_id% | |
Send ^A | |
Send ^C | |
Sleep 500 | |
WinMinimize, ahk_id %this_id% | |
WinGetClass, this_class, ahk_id %this_id% | |
WinGetTitle, this_title, ahk_id %this_id% | |
LastClip = %LastClip% `r`n-------`r`n %ClipBoard% | |
ToolTip , Saving All Untitled Notepad Instances `n%a_index% of %id%`nahk_id %this_id%`nahk_class %this_class%`n%this_title%`n | |
} | |
ClipBoard := LastClip | |
; ToolTip , %ClipBoard% | |
Run notepad.exe | |
Sleep 1000 | |
Send ^V | |
Sleep 1000 | |
Clipboard := ClipSaved ; 恢复剪贴板为原来的内容. 注意这里使用 Clipboard (不是 ClipboardAll). | |
ClipSaved = ; 在原来的剪贴板含大量内容时释放内存. | |
#Persistent | |
ToolTip, Done | |
SetTimer, RemoveToolTip, 2500 | |
return | |
RemoveToolTip: | |
SetTimer, RemoveToolTip, Off | |
ToolTip | |
return | |
return | |
+!d:: ;Alt+Shift+D: Close all untitled notepad instance | |
WinGet, id, list, *无标题 - 记事本, ,, | |
Loop, %id% | |
{ | |
this_id := id%A_Index% | |
WinActivate, ahk_id %this_id% | |
WinGetClass, this_class, ahk_id %this_id% | |
WinGetTitle, this_title, ahk_id %this_id% | |
ToolTip , Closing All Untitled Notepad Instances `n%a_index% of %id%`nahk_id %this_id%`nahk_class %this_class%`n%this_title%`n | |
WinClose, ahk_id %this_id% | |
Send Right | |
Send Enter | |
Sleep 200 | |
} | |
#Persistent | |
ToolTip, Done | |
SetTimer, RemoveToolTip, 5000 | |
return | |
return | |
ResizeWin(dir = 1, size = 0) | |
{ | |
WinGet activeWin, ID, A | |
activeMon := GetMonitorIndexFromWindow(activeWin) | |
SysGet, MonitorWorkArea, MonitorWorkArea, %activeMon% | |
w := MonitorWorkAreaRight - MonitorWorkAreaLeft | |
if (size == 0) | |
h := (MonitorWorkAreaBottom - MonitorWorkAreaTop)/2 | |
else | |
h := (MonitorWorkAreaBottom - MonitorWorkAreaTop)/3 | |
if (dir == 1) | |
t := MonitorWorkAreaBottom - h | |
else | |
t := MonitorWorkAreaTop | |
WinMove,A,,%MonitorWorkAreaLeft%,%t%,%w%,%h% | |
} | |
GetMonitorIndexFromWindow(windowHandle) | |
{ | |
; Starts with 1. | |
monitorIndex := 1 | |
VarSetCapacity(monitorInfo, 40) | |
NumPut(40, monitorInfo) | |
if (monitorHandle := DllCall("MonitorFromWindow", "uint", windowHandle, "uint", 0x2)) | |
&& DllCall("GetMonitorInfo", "uint", monitorHandle, "uint", &monitorInfo) | |
{ | |
monitorLeft := NumGet(monitorInfo, 4, "Int") | |
monitorTop := NumGet(monitorInfo, 8, "Int") | |
monitorRight := NumGet(monitorInfo, 12, "Int") | |
monitorBottom := NumGet(monitorInfo, 16, "Int") | |
workLeft := NumGet(monitorInfo, 20, "Int") | |
workTop := NumGet(monitorInfo, 24, "Int") | |
workRight := NumGet(monitorInfo, 28, "Int") | |
workBottom := NumGet(monitorInfo, 32, "Int") | |
isPrimary := NumGet(monitorInfo, 36, "Int") & 1 | |
SysGet, monitorCount, MonitorCount | |
Loop, %monitorCount% | |
{ | |
SysGet, tempMon, Monitor, %A_Index% | |
; Compare location to determine the monitor index. | |
if ((monitorLeft = tempMonLeft) and (monitorTop = tempMonTop) | |
and (monitorRight = tempMonRight) and (monitorBottom = tempMonBottom)) | |
{ | |
monitorIndex := A_Index | |
break | |
} | |
} | |
} | |
return %monitorIndex% | |
} | |
; Win+Alt+Up: Resize current active window to upper half | |
#!Up::ResizeWin(0) | |
; Win+Alt+Up: Resize current active window to lower half | |
#!Down::ResizeWin(1) | |
; Not used... 1/3 height resize | |
^#!Up::ResizeWin(0,1) | |
^#!Down::ResizeWin(1,1) | |
RunWaitOne(command) { | |
; WshShell 对象: http://msdn.microsoft.com/en-us/library/aew9yb99 | |
shell := ComObjCreate("WScript.Shell") | |
; 通过 cmd.exe 执行单条命令 | |
exec := shell.Exec(ComSpec " /C " command) | |
; 读取并返回命令的输出 | |
return exec.StdOut.ReadAll() | |
} | |
#!O:: | |
Run, Explorer.exe | |
Return | |
; #!K:: | |
; run, %comspec% /c taskkill /f /im explorer.exe ,,hide | |
; Return | |
^+v:: ; Text?Conly paste from ClipBoard | |
Clip0 = %ClipBoardAll% | |
ClipBoard = %ClipBoard% ; Convert to text | |
Send ^v ; For best compatibility: SendPlay | |
Sleep 50 ; Don't change clipboard while it is pasted! (Sleep > 0) | |
ClipBoard = %Clip0% ; Restore original ClipBoard | |
VarSetCapacity(Clip0, 0) ; Free memory | |
Return | |
; Fix OneNote horizontal scrolling | |
; source: https://www.reddit.com/r/OneNote/comments/3lybf1/horizontal_scrolling/ | |
~LShift & WheelUp:: ; Scroll left. | |
ControlGetFocus, fcontrol, A | |
Loop 5 ; <-- Increase or decrease this value to scroll faster or slower. | |
SendMessage, 0x114, 0, 0, %fcontrol%, A ; 0x114 is WM_HSCROLL and the 0 after it is SB_LINERIGHT. | |
return | |
~LShift & WheelDown:: ; Scroll right. | |
ControlGetFocus, fcontrol, A | |
Loop 5 ; <-- Increase or decrease this value to scroll faster or slower. | |
SendMessage, 0x114, 1, 0, %fcontrol%, A ; 0x114 is WM_HSCROLL and the 1 after it is SB_LINELEFT. | |
return |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment