Skip to content

Instantly share code, notes, and snippets.

@budRich
Created July 20, 2013 15:30
Show Gist options
  • Save budRich/6045462 to your computer and use it in GitHub Desktop.
Save budRich/6045462 to your computer and use it in GitHub Desktop.
About =
(
wpJunkie - The No.1 Wallpaper Selecta
Made by budRich
Last update: 2013-08-30
)
Init()
+F12::Reload
#If FocusEdit()
Up::ControlSend,, {Up}, ahk_id %hlblList%
Down::ControlSend,, {Down}, ahk_id %hlblList%
#If
FocusEdit() {
ControlGetFocus, focCtrl, wpJunkie ahk_class AutoHotkeyGUI
r := ( (focCtrl="Edit1") ? (1) : (0) )
return, %r%
}
#If ((guimode="thumbs") && ((WinActive("wpThumbs")) || (WinActive("wpJunkie"))))
Del::Gosub, WPDelete
Up::ThumbsNav("u")
Down::ThumbsNav("d")
Left::ThumbsNav("l")
Right::ThumbsNav("r")
Enter::WPUpdate(%oldsel%.path)
WheelUp::OnScroll(0, 0, 0x115, WinExist("wpThumbs ahk_class AutoHotkeyGUI"))
WheelDown::OnScroll(1, 0, 0x115, WinExist("wpThumbs ahk_class AutoHotkeyGUI"))
PgUp::
Loop, 4
{
OnScroll(0, 0, 0x115, WinExist("wpThumbs ahk_class AutoHotkeyGUI"))
ThumbsNav("u")
}
return
PgDn::
Loop, 4
{
OnScroll(1, 0, 0x115, WinExist("wpThumbs ahk_class AutoHotkeyGUI"))
ThumbsNav("d")
}
return
#If
ThumbsNav(dir) {
global
%oldsel%.selected := 0
GuiControl, Thumbs:+hidden, %oldsel%prog
If (dir="r")
newsel := (oldsel+1>ncnt) ? (ncnt) : (oldsel+1)
If (dir="l")
newsel := (oldsel-1<1) ? (1) : (oldsel-1)
If (dir="d")
newsel := (oldsel+cols>ncnt) ? (ncnt) : (oldsel+cols)
if (dir="u")
newsel := (oldsel-cols<1) ? (1) : (oldsel-cols)
GuiControl, Thumbs:-hidden, %newsel%prog
%newsel%.selected := 1
oldsel := newsel
GuiControlGet, selpos, Thumbs:pos, %newsel%prog
if (((dir = "r") || (dir = "d")) && (selPosY>360)) {
OnScroll(1, 0, 0x115, WinExist("wpThumbs ahk_class AutoHotkeyGUI"))
OnScroll(1, 0, 0x115, WinExist("wpThumbs ahk_class AutoHotkeyGUI"))
}
if (((dir = "l") || (dir = "u")) && (selPosY<5)) {
OnScroll(0, 0, 0x115, WinExist("wpThumbs ahk_class AutoHotkeyGUI"))
OnScroll(0, 0, 0x115, WinExist("wpThumbs ahk_class AutoHotkeyGUI"))
}
totxt := %newsel%.filename
SendMessage (LB_SELECTSTRING := 0x018C),0,&totxt,, ahk_id %hlblList%
}
Init() {
global
#SingleInstance force
#NoEnv
#Persistent
if (!A_IsCompiled)
#NoTrayIcon
SetBatchLines, -1
SetWinDelay, -1
SetWorkingDir, %A_ScriptDir%
SendMode, Input
Gui +LastFound
PID := DllCall( "GetCurrentProcessId" )
bh := 542
sh := 50
guiW := 348
OnExit, Avslut
lstHistory := Object()
guimode:=""
if !(FileExist("settings.ini")) {
gosub, Options
return
}
if ((!FileExist("tray.ico")) && (!A_IsCompiled))
URLDownloadToFile, https://dl.dropboxusercontent.com/u/38817458/tray.ico, tray.ico
gosub, traymenu
IniRead, mambo, settings.ini , General
Loop, Parse, mambo, `n
{
StringSplit, inivar, A_LoopField,=,%A_Space%%A_Tab%
%inivar1% := inivar2
}
SplitPath, A_Scriptname, , , , OutNameNoExt
LinkFile=%A_Startup%\%OutNameNoExt%.lnk
if(autostart=1) {
IfNotExist, %LinkFile%
FileCreateShortcut, %A_ScriptFullPath%, %LinkFile%
}
else
FileDelete, %LinkFile%
if (randomize=1) {
SetTimer, WPNext,% 60000*interval
}
if(hottis)
Hotkey, %hottis%, GuiToggle
FreshList(wpFolder)
}
traymenu:
Menu, tray, NoStandard
if (!A_IsCompiled) {
Menu, tray, Icon, tray.ico
}
menu, tray, Icon
Menu, tray, Tip , wpJunkie
Menu, tray, add, Show
Menu, tray, add, Options
Menu, tray, add, About
Menu, tray, add, Quit
Menu, Tray, Default, Show
Menu, Tray, Click, 1
return
Quit:
ExitApp
return
Show:
gosub, GuiToggle
return
About:
MsgBox,,About wpJunkie, %About%
return
Options:
OptionsGui()
return
GuiToggle:
if WinExist("wpJunkie") {
if (guimode="small")
Gosub, WPSort
else
Gosub, WPRandom
} else {
guimode:=""
Gosub, WPRandom
}
return
wpJunkieGui(_mode="small",_w=345) {
global wpFolder, imgW, imgH, guimode, ddlJunkie, file, saveto, brwsLst, oldFile, txtSearch,bh,sh, picken
global btnCopy, btnChoose, btnDelb, btnRandom, btnThumbsb, btnPrev, btnThumbss, btnDels, btnSort, btnNext
global lbH, bbtny, sbtny, lstDdl, btnSortt, btnRandomt, btnCopyt, btnDelt, btnChooset
guimode:=_mode
mrgn:=5
ttl:="wpJunkie"
(_mode="small"?(bgh:="+")(sgh:="-")(tgh:="+")(_h:=sh):(bgh:="-")(sgh:="+")(tgh:="+")(_h:=bh))
SM_CYCAPTION := 4
SysGet, ch, %SM_CYCAPTION%
WinGetPos, tbX, tbY, tbw, tbh, ahk_class Shell_TrayWnd
ch -= 4
ratio:=A_ScreenHeight/A_ScreenWidth
_x := iniX
_y := iniY-_h
btnH:=35, btnw:=63, ddlH:=50, imgW:=_w-((2*mrgn)+5)
, imgH:=imgW*ratio, lbH:=bh-(imgH+btnH+ddlH+20+ch), clsX:=_w-20, ttlW:=imgW-20
sbtny:=sh-(btnH+ch)
bbtny:=bh-(btnH+ch)
Gui, Junkie:Default
Gui, Destroy
Gui, +Caption +ToolWindow +Border -AlwaysOnTop
Gui, margin, %mrgn%
Gui, Add, Text, %bgh%Hidden xm w%imgW% h%imgH% 0x20E vpicken hwndpic1
Gui, Add, DropDownList, %bgh%Hidden wp Choose1 vddlJunkie gJunkieDdl, %lstDdl%
Gui, Add, Edit, %bgh%Hidden h20 wp vtxtSearch hwndhtxtsearch gtxtSearch_Event
Gui, Add, ListBox, %bgh%Hidden sort wp h%lbH% vlblList gPictureShowDelay hwndhlblList -HScroll +256
Gui, Add, Button, %bgh%Hidden xm y%bbtny% w%btnw% section %sgh%Default gGoldRush vbtnCopy, &Copy
Gui, Add, Button, %bgh%Hidden wp ys gWPRandom vbtnRandom, &Random
Gui, Add, Button, %bgh%Hidden wp ys gWPDelete vbtnDelb, &Delete
Gui, Add, Button, %bgh%Hidden wp ys gWPThumbs vbtnThumbsb, &Thumbs
Gui, Add, Button, %bgh%Hidden wp ys gJunkieChoose vbtnChoose, Choose
;Random mode gui
Gui, Add, Button, %sgh%Hidden xm y%sbtny% w%btnw% section gWPPrev vbtnPrev, &Previous
Gui, Add, Button, %sgh%Hidden wp ys gWPThumbs vbtnThumbss, &Thumbs
Gui, Add, Button, %sgh%Hidden wp ys gWPDelete vbtnDels, &Delete
Gui, Add, Button, %sgh%Hidden wp ys gWPSort vbtnSort, &Sort
Gui, Add, Button, %sgh%Hidden wp ys %bgh%Default gWPNext vbtnNext, &Next
;Thumbs mode gui
Gui, Add, Button, %tgh%Hidden xm y%sbtny% w%btnw% section gGoldRush vbtnCopyt, &Copy
Gui, Add, Button, %tgh%Hidden wp ys gWPRandom vbtnRandomt, &Random
Gui, Add, Button, %tgh%Hidden wp ys gWPDelete vbtnDelt, &Delete
Gui, Add, Button, %tgh%Hidden wp ys gWPSort vbtnSortt, &Sort
Gui, Add, Button, %tgh%Hidden wp ys section -Default gEnter vbtnChooset, Choose
GuiControlGet, wpFolder,Junkie:, ddlJunkie
FreshList(wpFolder)
oldFile:=""
Gui, Show,w0 h0, wpJunkie
if(_mode!="small") {
DllCall( "LoadLibrary", Str,"gdiplus" ), VarSetCapacity( si,16,0 ), si:=Chr(1)
DllCall( "gdiplus\GdiplusStartup", UIntP,pToken, UInt,&si, UInt,0 )
Gosub, ChangePic
ControlFocus,, ahk_id %htxtSearch%
}
}
JunkieGuiDropFiles:
if guimode="thumbs"
return
Loop, %A_GuiEvent%
if (A_LoopFileExt)
return
lstNew := ""
if(lstDdl = "Browse...")
lstNew := A_GuiEvent "||"
else
lstNew := DdlAdd(A_GuiEvent,lstDdl)
lstNew .= "Browse..."
lstDdl := lstNew
GuiControl,Junkie:, ddlJunkie,|
GuiControl,Junkie:, ddlJunkie,% lstDdl
GuiControlGet, ret,Junkie:, ddlJunkie
FreshList(ret)
if (guimoe!="small") {
Gosub, ChangePic
ControlFocus,Edit1, wpJunkie ahk_class AutoHotkeyGUI
}
return
OptionsGuiDropFiles:
Loop, %A_GuiEvent%
if (A_LoopFileExt)
return
lstNew := ""
;if(lstDdl = "Browse...")
; lstNew := A_GuiEvent "||"
;else
lstNew := DdlAdd(A_GuiEvent,lstDdl)
lstNew .= "Browse..."
lstDdl := lstNew
GuiControl,Options:, ddlOptions,|
GuiControl,Options:, ddlOptions,% lstDdl
;GuiControlGet, ret,Options:, ddlOptions
;IniWrite, %ret%, settings.ini, General, wpFolder
IniWrite, %lstDdl%, settings.ini, General, lstDdl
;wpFolder := ret
WinActivate, wpOptions
return
FreshList(folder){
global aLst,lblList,wpFolder,aFow
aLst := Object()
aFow := Object()
lblList := ""
GuiControl,Junkie:, lblList,|
str := SubStr(folder, -1, 2)
if (str="\*")
StringReplace, folder, folder, %str%
chk := 0
Loop, %folder%\*.*,,% ((str="\*")?1:0)
{
;If A_LoopFileExt not in jpg,bmp,tif,png,wmf,emf,gif
If A_LoopFileExt not in jpg
Continue
fow := ObjectName(A_LoopFileName)
oWp%fow% := Object()
oWp%fow%.pth := A_LoopFileDir
oWp%fow%.name := A_LoopFileName
lblList .= "|" A_LoopFileName
aLst.Insert(A_LoopFileName)
aFow.Insert(fow,oWp%fow%)
}
GuiControl, Junkie:-Redraw, lblList
Guicontrol, Junkie:,lblList,% !lblList ? "|" : lblList
GuiControl, Junkie:+Redraw, lblList
;wpFolder := folder
}
GetListBoxItem(hLB, i) {
SendMessage (LB_GETTEXTLEN := 394), %i%, 0,, ahk_id %hLB%
If (ErrorLevel = 0xFFFFFFFF)
Return ""
VarSetCapacity(sText, ErrorLevel * (1 + !!A_IsUnicode), 0)
SendMessage (LB_GETTEXT := 393), %i%, &sText,, ahk_id %hLB%
If (ErrorLevel = 0xFFFFFFFF)
Return ""
Return sText
}
txtSearch_Event:
GuiControlGet, s,Junkie:, txtSearch
CreateList(s)
Return
CreateList(filter = "") {
Global hlblList, bShowing, aLst, activefileindex, lblList, wpFolder
Static sLastfilter := "`n" ;Initialize on an impossible filter
;Trim the right side
While (SubStr(filter, 0) = A_Space)
StringTrimRight, filter, filter, 1
;Trim right side if it ends in " !" since it changes nothing
If (StrLen(filter) > 2) And (SubStr(filter, -1) = " !") And (SubStr(filter, -2, 1) <> A_Space)
StringTrimRight, filter, filter, 2
;Check if the filter is different
If (filter = sLastfilter) ;And bShowing
Return
sLastfilter := filter
GuiControl, Junkie:-Redraw, lblList
GuiControl,Junkie:, lblList,|
lblList := ""
If (filter = "") {
FreshList(wpFolder)
Gosub, PictureShowDelay
}
Else {
bLst := Object()
bLst := aLst
aLst := Object()
For k, v in bLst
{
StringTrimRight, s, v, 4
If (InStr(s, filter)) {
lblList .= "|" v
aLst.Insert(v)
}
}
Guicontrol, Junkie:,lblList,% !lblList ? "|" : lblList
Gosub, PictureShowDelay
}
SendMessage (LB_GETCURSEL := 0x0188), 0, 0,, ahk_id %hlblList%
;Redraw
GuiControl, Junkie:+Redraw, lblList
}
WPThumbs:
SetTimer, ThumbCheck, 100
ThumbsGui()
return
ThumbCheck:
if (WinExist("wpThumbs")) {
WinGetPos, tcX, tcY, tcW, tcH, wpThumbs
if ((tcX!=otcX) || (tcY!=otcY)) {
;303 795 , 492
ntcY := tcY+492
WinMove, wpJunkie,,%tcX%,%ntcY%
}
otcX:=tcX,otcY:=tcY
}
return
ThumbsGui() {
global
WinGetPos, smx,smy,smw,smh,wpJunkie
newX := smx
(guimode="sort") ? (thmbY:=smy) (junkieY:=smy+(bh-sh)) (junkieH:=sh) : (thmbY:=smy-(bh-sh)) (junkieY:=smy) (junkieH:=sh)
oldguimode := guimode
guimode := "thumbs"
GuiControl, Junkie:hide, btnPrev
GuiControl, Junkie:hide, btnThumbss
GuiControl, Junkie:hide, btnDels
GuiControl, Junkie:hide, btnSort
GuiControl, Junkie:hide, btnNext
GuiControl, Junkie:-Default, btnNext
GuiControl, Junkie:-Default, btnChoose
GuiControl, Junkie:hide, btnChoose
GuiControl, Junkie:hide, btnCopy
GuiControl, Junkie:hide, btnDelb
GuiControl, Junkie:hide, btnRandom
GuiControl, Junkie:hide, btnThumbsb
GuiControl, Junkie:hide, ddlJunkie
GuiControl, Junkie:hide, picken
GuiControl, Junkie:hide, txtSearch
GuiControl, Junkie:hide, lblList
GuiControl, Junkie:show, btnRandomt
GuiControl, Junkie:show, btnSortt
GuiControl, Junkie:show, btnDelt
GuiControl, Junkie:show, btnChooset
GuiControl, Junkie:show, btnCopyt
WinMove, wpJunkie,,%junkieX%,%junkieY%,,%junkieH%
DllCall( "LoadLibrary", Str,"gdiplus" ), VarSetCapacity( si,16,0 ), si:=Chr(1)
DllCall( "gdiplus\GdiplusStartup", UIntP,pToken, UInt,&si, UInt,0 )
thmbGuiW := smw
thmbGuiH := 485
thmbH := 100, thmbW:= 145
thmbbH := thmbH+4, thmbbW:= thmbW+4
cProg := "F30342"
Gui, Thumbs:Default
Gui, Destroy
Gui, +ToolWindow +0x200000 ; +resize ; WS_VSCROLL
Gui, +LastFound
aThmbs := Object()
cols:=2
colcnt=0
ncnt=0
;GuiControlGet, fldThumbs,Junkie:, ddlJunkie
;Loop, %wpFolder%\*.*
For k, v in aLst
{
colcnt++
ncnt++
vPic := ObjectName(v)
picpos := ( (colcnt=1) ? (" xm y+10") : (" x+10 yp") )
colcnt := ( (colcnt=cols) ? (0) : (colcnt) )
Gui, Add, Progress,% picpos " +Disabled " ((ncnt=1)?("-"):("+")) "hidden w" thmbbW " h" thmbbH " c" cProg " v" ncnt "prog", 100
Gui, Add, Text,% "w" thmbW " h" thmbH " xp+2 yp+2" " 0x20E" " v" ncnt " hwndPic" vPic " gPicClick"
%ncnt% := Object()
%ncnt%.selected := 0
%ncnt%.name := vPic
%ncnt%.filename := aFow[vPic].name
%ncnt%.path := aFow[vPic].pth "\" aFow[vPic].name
aThmbs.Insert(%ncnt%)
;MsgBox, % aFow[vPic].pth "`n" vPic
}
oldsel := 1
1.selected:=1
Gui, Show, w%thmbGuiW% h%thmbGuiH% x%smx% y%thmbY%, wpThumbs
WinMove, wpThumbs,,%smx%,%thmbY%,%thmbGuiW%,%thmbGuiH%
For key, value in aThmbs
{
NewThumb(value.path, value.name)
UpdateScrollBars("Thumbs", guiW, guiH)
}
}
PicClick:
if (%A_GuiControl%.selected=1) {
WPUpdate(%A_GuiControl%.path)
return
}
if !(A_GuiControl=oldsel) {
%oldsel%.selected := 0
GuiControl, Thumbs:+hidden, %oldsel%prog
%A_GuiControl%.selected := 1
GuiControl, Thumbs:-hidden, %A_GuiControl%prog
oldsel := A_GuiControl
totxt := %A_GuiControl%.filename
SendMessage (LB_SELECTSTRING := 0x018C),0,&totxt,, ahk_id %hlblList%
}
return
NewThumb(file,n) {
global thmbW, thmbH
DllCall( "DeleteObject", UInt,hBitmapResized ), SetProcessWorkingSetSize( PID )
hBitmap := GdiBitmap( file, WxH )
tSize := thmbW "x" thmbH
;tSize := BestFitRect( WxH,tshlp )
StringSplit, Sz, tSize, x
hBitmapResized := DllCall( "CopyImage", UInt,hBitmap, UInt,0, UInt,Sz1, UInt,Sz2, UInt,0)
DllCall( "DeleteObject", UInt,hBitmap )
SendMessage, (STM_SETIMAGE:=0x172), (IMAGE_BITMAP:=0x0), hBitmapResized,,% "ahk_id " Pic%n%
}
ThumbsGuiEscape:
ThumbsGuiClose:
SetTimer, ThumbCheck, Off
DllCall( "gdiplus\GdiplusShutdown", UInt,pToken )
DllCall( NumGet(NumGet(1*pStream)+8 ), UInt,pStream )
Gui, Thumbs:Destroy
Gui, Junkie:Destroy
guimode := ""
return
OptionsGui() {
global rndCb, startCb, randomize, autostart, GuiHK, hottis, ddlOptions, minuter,lstDdl, interval
if(!hottis)
hottis:="^!W"
if(!lstDdl)
lstDdl:="Browse..."
_w:=260, mrgn:=5
min:=( (randomize=1) ? ("+") : ("-") )
miu:=( (randomize!=1) ? ("+") : ("-") )
aut:=( (autostart=1) ? ("+") : ("-") )
Gui, Options:Default
Gui, Destroy
Gui, +Caption +ToolWindow +Border
Gui, margin, %mrgn%
Gui, Font, s10, Segoe UI
Gui, Add, Text, , Wallpaper folder:
Gui, Add, DropDownList,w%_w% Choose1 vddlOptions gOptionsDdl,%lstDdl%
Gui, Add, Text,y+8, Hotkey:
Gui, Add, Hotkey, vGuiHK yp-3 x+%mrgn% w210, %hottis%
Gui, Add, Checkbox, vrndCb gCBrnd xm %min%Checked, Random wallpaper every
Gui, Add, Edit, yp-3 x+0 w30 Number vminuter %miu%Disabled, %interval%
Gui, Add, Text, yp+3 x+%mrgn%, minutes.
Gui, Add, Checkbox, y+3 vstartCb xm %aut%Checked, Start with windows.
Gui, Show,,wpOptions
Gui, Junkie:Default
}
OptionsGuiEscape:
OptionsGuiClose:
Gui, Options:Submit
Gui, Options:Destroy
IniWrite, %ddlOptions%, settings.ini, General, wpFolder
IniWrite, %GuiHK%, settings.ini, General, hottis
IniWrite, %rndCb%, settings.ini, General, randomize
IniWrite, %minuter%, settings.ini, General, interval
IniWrite, %startCb%, settings.ini, General, autostart
Reload
return
OptionsDdl:
lstNew := ""
GuiControlGet, ddlVar,Options:, ddlOptions
if(ddlVar="Browse...") {
FileSelectFolder, brws,%A_ComputerName%,% ( (gui="copy") ? (1) : (0) ) ,Choose folder
If(ErrorLevel=1)
return
if(lstDdl = "Browse...")
lstNew := lstDdl := brws "||"
else {
StringReplace, lstDdl, lstDdl, ||, |
Loop, Parse, lstDdl, |
{
if (A_Index=1) {
lstNew .= brws "||"
if !(A_LoopField=brws || A_LoopField="Browse...")
lstNew .= A_LoopField "|"
continue
} else if !(A_LoopField=brws || A_LoopField="Browse...")
lstNew .= A_LoopField "|"
}
}
} else {
StringReplace, lstDdl, lstDdl, ||, |
Loop, Parse, lstDdl, |
{
if (A_Index=1) {
lstNew .= ddlVar "||"
if !(A_LoopField=ddlVar || A_LoopField="Browse...")
lstNew .= A_LoopField "|"
continue
} else if !(A_LoopField=ddlVar || A_LoopField="Browse...")
lstNew .= A_LoopField "|"
}
}
lstNew .= "Browse..."
lstDdl := lstNew
GuiControl,Options:, ddlOptions,|
GuiControl,Options:, ddlOptions,% lstDdl
GuiControlGet, ret,Options:, ddlOptions
IniWrite, %ret%, settings.ini, General, wpFolder
IniWrite, %lstDdl%, settings.ini, General, lstDdl
wpFolder := ret
return
CBrnd:
GuiControlGet, rndchkd,Options:,rndCb
if(rndchkd=0)
GuiControl,Options:Disable, minuter
else
GuiControl,Options:Enable, minuter
return
JunkieChoose:
fow := ObjectName(file)
WPUpdate(aFow[fow].pth "\" file)
Return
WPUpdate(sFile) {
RegWrite, REG_SZ, HKCU, Control Panel\Desktop, WallpaperStyle, 2
RegWrite, REG_SZ, HKCU, Control Panel\Desktop, TileWallpaper, 0
RegWrite, REG_SZ, HKCU, Control Panel\Desktop, Wallpaper, % sFile
DllCall("SystemParametersInfo"
, "Uint", 0x0014
, "Uint", 0
, "str", sFile
, "Uint", 0 )
}
WPNext:
if (cHist>=lstHistory.MaxIndex()) {
Random, Img, 1, aLst.MaxIndex()
fow := ObjectName(aLst[Img])
currentWP := aFow[fow].pth "\" aLst[Img]
while !(FileExist(currentWP)) {
Random, Img, 1, aLst.MaxIndex()
fow := ObjectName(aLst[Img])
currentWP := aFow[fow].pth "\" aLst[Img]
}
WPUpdate(currentWP)
lstHistory.Insert(Img)
totxt := aLst[Img]
cHist++
} else {
cHist++
totxt := aLst[lstHistory[cHist]]
fow := ObjectName(totxt)
WPUpdate(aFow[fow].pth "\" totxt)
}
SendMessage (LB_SELECTSTRING := 0x018C),0,&totxt,, ahk_id %hlblList%
return
WPPrev:
cHist--
if(cHist<=0) {
cHist=1
return
}
totxt := aLst[lstHistory[cHist]]
fow := ObjectName(totxt)
WPUpdate(aFow[fow].pth "\" totxt)
SendMessage (LB_SELECTSTRING := 0x018C),0,&totxt,, ahk_id %hlblList% ; This doesn't work
Gosub, ChangePic
return
WPRandom:
if (guimode="") {
IniRead, iniX, settings.ini, General, iniX, 200
IniRead, iniY, settings.ini, General, iniY, 800
swpX:=iniX, swpY:=iniY-sh
}
else {
WinGetPos, bgx,bgy,bgw,bgh,wpJunkie
swpX:=bgX
swpY:=(guimode="sort")?(bgy+(bh-sh)):(guimode="thumbs")?(bgy):(iniY)
}
swpW:=guiW, swpH:=sh
if (guimode="thumbs")
Gosub, ThumbsGuiClose
wpJunkieGui("small",guiW)
WinMove, wpJunkie,,%swpX%,%swpY%,%swpW%,%swpH%
ControlFocus,Button10, wpJunkie ahk_class AutoHotkeyGUI
return
WPSort:
if (guimode="thumbs") {
DllCall( "gdiplus\GdiplusShutdown", UInt,pToken )
DllCall( NumGet(NumGet(1*pStream)+8 ), UInt,pStream )
SetTimer, ThumbCheck, Off
Gui, Thumbs:Destroy
}
WinActivate, wpJunkie
WinGetActiveTitle, aw
if (WinExist("wpJunkie")) {
WinGetPos, smx,smy,smw,,wpJunkie
newX := smx
newY := smy-(bh-sh)
guimode := "sort"
GuiControl, Junkie:hide, btnPrev
GuiControl, Junkie:hide, btnThumbss
GuiControl, Junkie:hide, btnDels
GuiControl, Junkie:hide, btnSort
GuiControl, Junkie:hide, btnNext
GuiControl, Junkie:-Default, btnNext
GuiControl, Junkie:+Default, btnChoose
GuiControl, Junkie:show, btnChoose
GuiControl, Junkie:show, btnCopy
GuiControl, Junkie:show, btnDelb
GuiControl, Junkie:show, btnRandom
GuiControl, Junkie:show, btnThumbsb
GuiControl, Junkie:show, ddlJunkie
GuiControl, Junkie:show, picken
GuiControl, Junkie:show, txtSearch
GuiControl, Junkie:show, lblList
GuiControl, Junkie:hide, btnRandomt
GuiControl, Junkie:hide, btnSortt
GuiControl, Junkie:hide, btnDelt
GuiControl, Junkie:hide, btnChooset
GuiControl, Junkie:hide, btnCopyt
GuiControl, Junkie:Move, btnChoose, y%bbtny%
GuiControl, Junkie:Move, btnCopy, y%bbtny%
GuiControl, Junkie:Move, btnDelb, y%bbtny%
GuiControl, Junkie:Move, btnRandom, y%bbtny%
GuiControl, Junkie:Move, btnThumbsb, y%bbtny%
GuiControl, Junkie:+Redraw, lblList
WinMove, wpJunkie,,%newX%,%newY%,,%bh%
DllCall( "LoadLibrary", Str,"gdiplus" ), VarSetCapacity( si,16,0 ), si:=Chr(1)
DllCall( "gdiplus\GdiplusStartup", UIntP,pToken, UInt,&si, UInt,0 )
Gosub, ChangePic
ControlFocus,, ahk_id %htxtSearch%
} else
wpJunkieGui("sort",guiW)
;GoSub, JunkieDdl
;ControlFocus,Edit1, wpJunkie ahk_class AutoHotkeyGUI
return
JunkieDdl:
lstNew := ""
GuiControlGet, ddlVar,Junkie:, ddlJunkie
if (ddlVar=wpFolder)
return
if(ddlVar="Browse...") {
FileSelectFolder, brws,%A_ComputerName%,% ( (gui="copy") ? (1) : (0) ) ,Choose folder
If(ErrorLevel=1)
return
if(lstDdl = "Browse...")
lstNew := brws "||"
else
lstNew := DdlAdd(brws,lstDdl)
} else {
StringReplace, lstDdl, lstDdl, ||, |
Loop, Parse, lstDdl, |
{
if (A_Index=1) {
lstNew .= ddlVar "||"
if !(A_LoopField=ddlVar || A_LoopField="Browse...")
lstNew .= A_LoopField "|"
continue
} else if !(A_LoopField=ddlVar || A_LoopField="Browse...")
lstNew .= A_LoopField "|"
}
}
lstNew .= "Browse..."
lstDdl := lstNew
GuiControl,Junkie:, ddlJunkie,|
GuiControl,Junkie:, ddlJunkie,% lstDdl
GuiControlGet, ret,Junkie:, ddlJunkie
wpFolder := ret
IniWrite, %lstDdl%, settings.ini, General, lstDdl
IniWrite, %ret%, settings.ini, General, wpFolder
FreshList(ret)
Gosub, ChangePic
return
Avslut:
Gui, Junkie:Destroy
DllCall( "gdiplus\GdiplusShutdown", UInt,pToken )
DllCall( NumGet(NumGet(1*pStream)+8 ), UInt,pStream )
ExitApp
return
JunkieGuiClose:
JunkieGuiEscape:
WinGetPos, iniX, iniY, iniW, iniH, wpJunkie ahk_class AutoHotkeyGUI
iniY := iniY+iniH
IniWrite, %iniX%, settings.ini, General, iniX
IniWrite, %iniY%, settings.ini, General, iniY
Gui, Destroy
guimode := ""
DllCall( "gdiplus\GdiplusShutdown", UInt,pToken )
DllCall( NumGet(NumGet(1*pStream)+8 ), UInt,pStream )
return
GoldRush:
CopyTo()
return
CopyTo() {
global ddlCopy, NewFileName, lstDdl, file, cext, wpFolder, hlblList, lstDdlCopy
_w:=345, _h:=103, mrgn:=5, ttlH:=18, lblW:=50, imgW:=_w-((3*mrgn)+lblW), btnW:=50
WinGetPos, px, py, pw, ph, wpJunkie
_x:=( (px-_w<0) ? (px+pw) : (px-_w) )
_y:=py+(ph-(_h+2))
SendMessage, (LB_GETCURSEL := 0x0188), 0, 0,, ahk_id %hlblList%
;Check for error. LB_ERR
ErrorLevel := (ErrorLevel = 0xFFFFFFFF) ? 0 : ErrorLevel
;Get the associated item data
i := GetListBoxItem(hlblList, ErrorLevel)
file := i
StringSplit, fl, file, .
cext:=fl2
if !(lstDdlCopy)
lstDdlCopy := lstDdl
Gui, Copy:Default
Gui, Destroy
Gui, +Caption +ToolWindow +Border -AlwaysOnTop
Gui, margin, %mrgn%
Gui, Font, s10, Segoe UI
Gui, Add, Text, y8 w%lblW%, Copy to:
Gui, Add, DropDownList, yp-3 x+%mrgn% w%imgW% Choose1 gCopyDdl vddlCopy, %lstDdlCopy%
Gui, Add, Text, y+8 xm w%lblW%, Name:
Gui, Add, Edit, yp-3 w%imgW% x+%mrgn% vNewFileName -WantReturn, %fl1%
Gui, Add, Button, x120 w%btnW% Section gCopyOk Default, Ok
Gui, Add, Button, ys w%btnW% gCopyCancel, Cancel
Gui, Show, x%_x% y%_y% w%_w% h%_h%,wpCopy
ControlFocus,Edit1, wpCopy
Send, ^a
Gui, Junkie:Default
}
DdlAdd(fld,lst) {
MsgBox, 4,, Do you want to include subfolders?
IfMsgBox Yes
fld .= "\*"
StringReplace, lst, lst, ||, |
Loop, Parse, lst, |
{
if (A_Index=1) {
lstNew .= fld "||"
if !(A_LoopField=fld || A_LoopField="Browse...")
lstNew .= A_LoopField "|"
continue
} else if !(A_LoopField=fld || A_LoopField="Browse...")
lstNew .= A_LoopField "|"
}
return, lstNew
}
CopyDdl:
lstNew := ""
GuiControlGet, ddlVar,Copy:, ddlCopy
if(ddlVar="Browse...") {
FileSelectFolder, brws,%A_ComputerName%,1,Choose folder
If(ErrorLevel=1)
return
if(lstDdl = "Browse...")
lstNew := lstDdl := brws "||"
else
lstNew := DdlAdd(brws,lstDdl)
fldCopy := brws
} else {
StringReplace, lstDdl, lstDdl, ||, |
Loop, Parse, lstDdl, |
{
if (A_Index=1) {
lstNew .= ddlVar "||"
if !(A_LoopField=ddlVar || A_LoopField="Browse...")
lstNew .= A_LoopField "|"
continue
} else if !(A_LoopField=ddlVar || A_LoopField="Browse...")
lstNew .= A_LoopField "|"
}
fldCopy := ddlVar
}
StringReplace, lstDdl, lstDdl, ||, |
Loop, Parse, lstDdl, |
{
if (A_Index=1) {
lstDdlJunkie .= wpFolder "||"
if !(A_LoopField=wpFolder || A_LoopField="Browse..." || A_LoopField=fldCopy)
lstDdlJunkie .= A_LoopField "|"
continue
} else if (A_Index=2) {
lstDdlJunkie .= fldCopy "|"
if !(A_LoopField=wpFolder || A_LoopField="Browse..." || A_LoopField=fldCopy)
lstDdlJunkie .= A_LoopField "|"
continue
} else if !(A_LoopField=wpFolder || A_LoopField="Browse..." || A_LoopField=fldCopy)
lstDdlJunkie .= A_LoopField "|"
}
lstDdlJunkie .= "Browse..."
GuiControl,Junkie:, ddlJunkie,|
GuiControl,Junkie:, ddlJunkie,% lstDdlJunkie
IniWrite, %lstDdlJunkie%, settings.ini, General, lstDdl
lstNew .= "Browse..."
lstDdlCopy := lstNew
GuiControl,Copy:, ddlCopy,|
GuiControl,Copy:, ddlCopy,% lstDdlCopy
GuiControlGet, ret,Copy:, ddlCopy
IniWrite, %ret%, settings.ini, General, fldCopy
IniWrite, %lstDdlCopy%, settings.ini, General, lstDdlCopy
fldCopy := ret
return
CopyCancel:
CopyGuiEscape:
CopyGuiClose:
Gui, Copy:Destroy
WinActivate, wpJunkie
ControlFocus,, ahk_id %htxtSearch%
return
CopyOk:
Gui, Copy:Submit
Gui, Copy:Destroy
wpFolder := ObjectName(file)
FileCopy, %wpFolder%\%file%, %fldCopy%\%NewFileName%.%cext%
WinActivate, wpJunkie
ControlFocus,Edit1, wpJunkie ahk_class AutoHotkeyGUI
return
ChangePic:
ControlFocus,Edit1, wpJunkie ahk_class AutoHotkeyGUI
SendMessage, (LB_GETCURSEL := 0x0188), 0, 0,, ahk_id %hlblList%
;Check for error. LB_ERR
ErrorLevel := (ErrorLevel = 0xFFFFFFFF) ? 0 : ErrorLevel
;Get the associated item data
i := GetListBoxItem(hlblList, ErrorLevel)
file := i
;GuiControlGet, dest,Junkie:, ddlJunkie
fow := ObjectName(file)
dest := aFow[fow].pth
if (dc="doubleclick")
WPUpdate(dest "\" file)
if (!(file) || (file=oldFile))
return
DllCall( "DeleteObject", UInt,hBitmapResized ), SetProcessWorkingSetSize( PID )
hBitmap := GdiBitmap( dest "\" file, WxH )
tshlp := imgW "x" imgH
tSize := BestFitRect( WxH,tshlp )
StringSplit, Sz, tSize, x
hBitmapResized := DllCall( "CopyImage", UInt,hBitmap, UInt,0, UInt,Sz1, UInt,Sz2, UInt,0)
DllCall( "DeleteObject", UInt,hBitmap )
SendMessage, (STM_SETIMAGE:=0x172), (IMAGE_BITMAP:=0x0), hBitmapResized,, ahk_id %Pic1%
fullPath = %dest%\%file%
oldFile := file
Return
ObjectName(file) {
SplitPath, file, , , , fow
StringReplace, fow, fow, %A_Space%, _, All
StringReplace, fow, fow, -, _, All
StringReplace, fow, fow, ', _, All
StringReplace, fow, fow, (, _, All
StringReplace, fow, fow, ), _, All
return, fow
}
PictureShowDelay:
dc := A_GuiEvent
SetTimer, ChangePic, -100
Return
WPDelete:
SendMessage, (LB_GETCURSEL := 0x0188), 0, 0,, ahk_id %hlblList%
;Check for error. LB_ERR
ndel := (ErrorLevel = 0xFFFFFFFF) ? 0 : ErrorLevel
;Get the associated item data
delFile := GetListBoxItem(hlblList, ndel)
wpFolder := aFow[ObjectName(delFile)].pth
MsgBox, 4, , Are you sure you want to delete `n %wpFolder%\%delFile%
IfMsgBox No
return
IfMsgBox Yes
FileDelete, %wpFolder%\%delFile%
SendMessage (LB_DELETESTRING := 0x0182),%ndel%,0,, ahk_id %hlblList%
SendMessage (LB_SETCURSEL := 0x0186),%ndel%,0,, ahk_id %hlblList%
if (guimode="small") {
Gosub, WPNext
ControlFocus,Button10, wpJunkie ahk_class AutoHotkeyGUI
}
Else if (guimode="junkie"){
Gosub, ChangePic
ControlFocus,Edit1, wpJunkie ahk_class AutoHotkeyGUI
}
else if (guimode="thumbs") {
GuiControl, Thumbs:+hidden, %oldsel%prog
GuiControl, Thumbs:+hidden, %oldsel%
Gosub, Right
}
return
gdiBitmap( img,byref WxH ) { ; Sean www.autohotkey.com/forum/viewtopic.php?p=147029#147029
FileGetSize, nSize, %img%
IfEqual,nsize,0, Return,0
if (A_IsUnicode)
FileRead, Buffer, *c *p1200 %img%
else
FileRead, Buffer, %img%
hData := DllCall("GlobalAlloc", UInt,2, UInt, nSize )
pData := DllCall("GlobalLock", UInt,hData )
DllCall( "RtlMoveMemory", UInt,pData, UInt,&Buffer, UInt,nSize )
DllCall( "GlobalUnlock", UInt,hData )
DllCall( "ole32\CreateStreamOnHGlobal", UInt,hData, Int,True, UIntP,pStream )
DllCall( "gdiplus\GdipCreateBitmapFromStream", UInt,pStream, UIntP,pBitmap )
DllCall( "gdiplus\GdipCreateHBITMAPFromBitmap", UInt,pBitmap, UIntP,hBitmap, UInt,8 )
DllCall( "gdiplus\GdipGetImageWidth" , "Uint", pBitmap, "UintP", nW)
DllCall( "gdiplus\GdipGetImageHeight", "Uint", pBitmap, "UintP", nH), WxH := nW "x" nH
DllCall( "gdiplus\GdipDisposeImage", UInt,pBitmap )
Return hBitmap
}
BestFitRect(d1,d2,s="x") { ; Oberon www.autohotkey.com/forum/viewtopic.php?p=189202#189202
Loop, 2
StringSplit, d%A_Index%x, d%A_Index%, %s%
f := d1x1 - d2x1 > d1x2 - d2x2 ? d2x1 / d1x1 : d2x2 / d1x2
Return, Floor(d1x1 * f) . s . Floor(d1x2 * f)
}
SetProcessWorkingSetSize(PID=0) { ; heresy www.autohotkey.com/forum/viewtopic.php?t=32876
h := DllCall( "OpenProcess", UInt,0x001F0FFF, Int,0, Int,PID )
DllCall( "SetProcessWorkingSetSize", UInt,h, Int,-1, Int,-1 )
DllCall( "CloseHandle", UInt,h )
}
UpdateScrollBars(GuiNum, GuiWidth, GuiHeight) ; Lexikos www.autohotkey.com/board/topic/26033-scrollable-gui-proof-of-concept/#entry168174
{
static SIF_RANGE=0x1, SIF_PAGE=0x2, SIF_DISABLENOSCROLL=0x8, SB_HORZ=0, SB_VERT=1
Gui, %GuiNum%:Default
Gui, +LastFound
; Calculate scrolling area.
Left := Top := 9999
Right := Bottom := 0
WinGet, ControlList, ControlList
Loop, Parse, ControlList, `n
{
GuiControlGet, c, Pos, %A_LoopField%
if (cX < Left)
Left := cX
if (cY < Top)
Top := cY
if (cX + cW > Right)
Right := cX + cW
if (cY + cH > Bottom)
Bottom := cY + cH
}
Left -= 8
Top -= 8
Right += 8
Bottom += 8
ScrollWidth := Right-Left
ScrollHeight := Bottom-Top
; Initialize SCROLLINFO.
VarSetCapacity(si, 28, 0)
NumPut(28, si) ; cbSize
NumPut(SIF_RANGE | SIF_PAGE, si, 4) ; fMask
; Update horizontal scroll bar.
NumPut(ScrollWidth, si, 12) ; nMax
NumPut(GuiWidth, si, 16) ; nPage
DllCall("SetScrollInfo", "uint", WinExist(), "uint", SB_HORZ, "uint", &si, "int", 1)
; Update vertical scroll bar.
; NumPut(SIF_RANGE | SIF_PAGE | SIF_DISABLENOSCROLL, si, 4) ; fMask
NumPut(ScrollHeight, si, 12) ; nMax
NumPut(GuiHeight, si, 16) ; nPage
DllCall("SetScrollInfo", "uint", WinExist(), "uint", SB_VERT, "uint", &si, "int", 1)
if (Left < 0 && Right < GuiWidth)
x := Abs(Left) > GuiWidth-Right ? GuiWidth-Right : Abs(Left)
if (Top < 0 && Bottom < GuiHeight)
y := Abs(Top) > GuiHeight-Bottom ? GuiHeight-Bottom : Abs(Top)
if (x || y)
DllCall("ScrollWindow", "uint", WinExist(), "int", x, "int", y, "uint", 0, "uint", 0)
}
OnScroll(wParam, lParam, msg, hwnd)
{
static SIF_ALL=0x17, SCROLL_STEP=75
bar := msg=0x115 ; SB_HORZ=0, SB_VERT=1
VarSetCapacity(si, 28, 0)
NumPut(28, si) ; cbSize
NumPut(SIF_ALL, si, 4) ; fMask
if !DllCall("GetScrollInfo", "uint", hwnd, "int", bar, "uint", &si)
return
VarSetCapacity(rect, 16)
DllCall("GetClientRect", "uint", hwnd, "uint", &rect)
new_pos := NumGet(si, 20, "int") ; nPos
action := wParam & 0xFFFF
if action = 0 ; SB_LINEUP
new_pos -= SCROLL_STEP
else if action = 1 ; SB_LINEDOWN
new_pos += SCROLL_STEP
else if action = 2 ; SB_PAGEUP
new_pos -= NumGet(rect, 12, "int") - SCROLL_STEP
else if action = 3 ; SB_PAGEDOWN
new_pos += NumGet(rect, 12, "int") - SCROLL_STEP
else if (action = 5 || action = 4) ; SB_THUMBTRACK || SB_THUMBPOSITION
new_pos := wParam>>16
else if action = 6 ; SB_TOP
new_pos := NumGet(si, 8, "int") ; nMin
else if action = 7 ; SB_BOTTOM
new_pos := NumGet(si, 12, "int") ; nMax
else
return
min := NumGet(si, 8, "int") ; nMin
max := NumGet(si, 12, "int") - NumGet(si, 16, "int") ; nMax-nPage
new_pos := new_pos > max ? max : new_pos
new_pos := new_pos < min ? min : new_pos
old_pos := NumGet(si, 20, "int") ; nPos
x := y := 0
if bar = 0 ; SB_HORZ
x := old_pos-new_pos
else
y := old_pos-new_pos
; Scroll contents of window and invalidate uncovered area.
DllCall("ScrollWindow", "uint", hwnd, "int", x, "int", y, "uint", 0, "uint", 0)
; Update scroll bar.
NumPut(new_pos, si, 20, "int") ; nPos
DllCall("SetScrollInfo", "uint", hwnd, "int", bar, "uint", &si, "int", 1)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment