Last active
October 25, 2023 13:06
-
-
Save davebrny/6746782dc720820cd61a552f470fe9cf to your computer and use it in GitHub Desktop.
(autohotkey) - improvements for lightshot (screenshot tool)
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
/* | |
[folders] | |
folder_1= | |
folder_2= | |
folder_3= | |
[settings] | |
prefix = LS_ | |
time_format = yyyyMMddhhmmss | |
fullscreen_hotkey = | |
upload_hotkey = | |
[script info] | |
version = 0.4.3 | |
lightshot = 5.4.0.1 | |
description = improvements for lightshot (app.prntscr.com) | |
author = davebrny | |
source = https://gist.github.com/davebrny/6746782dc720820cd61a552f470fe9cf | |
*/ | |
#noEnv | |
#singleInstance, force | |
#installKeybdHook | |
sendMode, input | |
process, priority, , high | |
loop, HKLM, SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList, 1, 1 ; get user SID | |
{ | |
if (a_loopRegName = "ProfileImagePath") | |
{ | |
regRead, output | |
if inStr(output, a_userName) | |
{ | |
stringReplace, user_sid, a_loopRegSubKey, SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\ | |
break | |
} | |
} | |
} | |
lightshot_subkey := user_sid . "\Software\SkillBrains\Lightshot" | |
iniRead, prefix, % a_lineFile, settings, prefix | |
iniRead, time_format, % a_lineFile, settings, time_format | |
iniRead, custom_menu, % a_lineFile, settings, custom_menu | |
iniRead, fullscreen, % a_lineFile, settings, fullscreen_hotkey | |
iniRead, upload, % a_lineFile, settings, upload_hotkey | |
if (fullscreen) ; make hotkeys pass through to lightshot | |
hotkey, ~%fullscreen%, rename_with_date | |
if (upload) | |
hotkey, ~%upload%, rename_with_date | |
gui +lastFound | |
dllCall("RegisterShellHookWindow", UInt, winExist()) ; code from SKAN | |
onMessage(dllCall("RegisterWindowMessage", Str, "SHELLHOOK"), "shellMessage") | |
return ; end of auto-execute ------------------------------------------------ | |
#if winActive("ahk_exe Lightshot.exe", , "Save As") | |
l:: | |
; rButton:: | |
goSub, custom_menu | |
return | |
#if winActive("ahk_exe Lightshot.exe", , "Save As") | |
enter:: | |
$^s:: | |
send ^{s} | |
goSub, rename_with_date | |
return | |
#if | |
rename_with_date: | |
sleep 700 ; wait for file to appear to | |
file_ext := file_ext() | |
loop, files, % save_folder() "\Screenshot_*" . file_ext | |
{ | |
formatTime, formatted_time, % a_loopFileTimeModified, % time_format | |
fileMove, % a_loopFileFullPath, % save_folder "\" prefix . formatted_time . file_ext | |
} | |
return | |
file_ext() { | |
global lightshot_subkey | |
regRead, dword, HKU, % lightshot_subkey, Format | |
file_format := (dword = "1") ? "png" : (dword = "2" ? "jpg" : "bmp") | |
return "." file_format | |
} | |
save_folder() { | |
global | |
if (save_folder = "") | |
{ | |
regRead, save_folder, HKU, % lightshot_subkey, LastSavedDir | |
if (save_folder = "") | |
save_folder := a_myDocuments "\Lightshot" | |
} | |
return save_folder | |
} | |
shellMessage(wParam, lParam) { | |
global ls_id | |
If (wParam = 1) ; HSHELL_WINDOWCREATED | |
{ | |
winGet, process_name, ProcessName, % "ahk_id " ls_id := lParam | |
if (process_name = "Lightshot.exe") | |
setTimer, set_edit_text, 100 | |
} | |
} | |
set_edit_text: | |
if winExist("Save As ahk_exe Lightshot.exe") | |
{ | |
setTimer, set_edit_text, off | |
formatTime, formatted_time, % a_now, % time_format | |
controlSetText, edit1, % prefix . formatted_time . file_ext(), ahk_class #32770 | |
winWaitClose, Save As ahk_exe Lightshot.exe | |
goSub, rename_with_date ; rename any other 'screenshot_1.png' files | |
save_folder := "" | |
setTimer, set_edit_text, on | |
} | |
if !winExist("ahk_id " ls_id) | |
setTimer, set_edit_text, off | |
return | |
custom_menu: ; right click menu | |
menu, lightshot, useErrorLevel | |
regRead, keep_selection, HKU, % lightshot_subkey, KeepSelection | |
regRead, capture_cursor, HKU, % lightshot_subkey, CaptureCursor | |
save_folder := save_folder() | |
if (save_folder) | |
{ | |
stringGetPos, pos, save_folder, \, R2 | |
stringMid, parent_folder, save_folder, % pos + 1 | |
menu, folder_menu, add, % save_folder, set_folder | |
menu, folder_menu, disable, % save_folder | |
menu, folder_menu, add | |
} | |
folders_created := "" | |
loop, | |
{ | |
iniRead, folder, % a_lineFile, folders, folder_%a_index% | |
if (fileExist(folder)) and (folder != save_folder) | |
{ | |
menu, folder_menu, add, % folder, set_folder | |
++folders_created | |
} | |
} | |
until (folder = "ERROR") | |
if (folders_created) | |
menu, folder_menu, add | |
menu, folder_menu, add, Add New Folder, add_folder | |
menu, lightshot, add, Upload to prntscr.com %a_tab% Ctrl+D, menu_ctrl | |
menu, lightshot, add, Print %a_tab% Ctrl+P, menu_ctrl | |
menu, lightshot, add, Copy %a_tab% Ctrl+C, menu_ctrl | |
menu, lightshot, add, Save %a_tab% Ctrl+S, menu_ctrl | |
menu, lightshot, add, Select Full Screen %a_tab% Ctrl+A, menu_ctrl | |
menu, lightshot, add, Clear selection , menu_clear | |
menu, lightshot, add, Cancel %a_tab% Esc, menu_esc | |
menu, lightshot, add | |
menu, lightshot, add, Settings: , menu_close | |
menu, lightshot, add | |
menu, lightshot, add, Remember Selection , keep_selection | |
menu, lightshot, add, Capture Cursor , capture_cursor | |
menu, lightshot, add | |
if (save_folder) | |
menu, lightshot, add, %parent_folder% , menu_close | |
menu, lightshot, add, Folders , :folder_menu | |
menu, lightshot, add | |
menu, lightshot, add, Close this menu , menu_close | |
menu, lightshot, disable, Settings: | |
menu, lightshot, disable, %parent_folder% | |
menu, lightshot, % (keep_selection ? "check" : "unCheck"), Remember Selection | |
menu, lightshot, % (capture_cursor ? "check" : "unCheck"), Capture Cursor | |
menu, lightshot, show | |
menu, lightshot, delete | |
menu, folder_menu, delete | |
goSub, rename_with_date ; check for new screenshots | |
return | |
menu_ctrl: | |
letter := subStr(a_thisMenuItem, 0, 1) | |
send % "^{" format("{:L}", letter) "}" | |
return | |
menu_clear: | |
send {rButton}{down 6} ; select from original menu | |
sleep 50 | |
send {enter} | |
return | |
menu_esc: | |
send {esc} | |
return | |
capture_cursor: | |
new_value := (capture_cursor = 0) ? 1 : 0 | |
regWrite, REG_DWORD, HKU, % lightshot_subkey, CaptureCursor, % new_value | |
return | |
keep_selection: | |
new_value := (keep_selection = 0) ? 1 : 0 | |
regWrite, REG_DWORD, HKU, % lightshot_subkey, KeepSelection, % new_value | |
return | |
menu_close: | |
return | |
set_folder: | |
regWrite, REG_SZ, HKU, % lightshot_subkey, LastSavedDir, % a_thisMenuItem | |
return | |
add_folder: | |
send {esc} | |
fileSelectFolder, new_folder, *%save_folder% | |
if (new_folder) | |
{ | |
loop, | |
{ | |
iniRead, folder, % a_lineFile, folders, folder_%a_index% | |
if (folder = "") or (folder = "ERROR") | |
iniWrite, % " " new_folder, % a_lineFile, folders, folder_%a_index% | |
} | |
until (folder = "") or (folder = "ERROR") or (new_folder = folder) | |
} | |
return |
@ditdivdotdot i stopped using lightshot a few years ago now but im taking it that they still havnt fixed the "screenshot_1" naming problem? thats sad if true, but im glad to hear this script is still of some use to someone!
@davebrny nope they still haven't fixed that "screenshot_1" naming problem unfortunately
Thanks for this script. This work perfectly but unfortunately there's some errors.
- Enter button didn't work
- File named Screenshot_x.png when using
ctrl+s
instead of enter coz this button didn't work
Could you fix this? Thank you in advance. :)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
fantastic work, this really overcomes most of lighshot's weaknesses in terms of functionality