here's another take
I have no idea what crossover there is with Skrommels code 'cos I haven't really looked at it yet, but it was a fun exercise
it's not full screen (6 images across) cos I had no idea what sort of display your using (and I haven't the time to work this part out

) - feel free to amend the script
there are 2 scripts - the first runs all the time and simply polls your removable drives on a 1 second cycle. As soon as one becomes available it launches (on first launch it prompts you for a target directory and stores it in an ini file)
/*
Author - Target OCT08
script will scan all removable drives on a 1.5 second cycle
found drives will launch the kiosk (kiosk.AHK)
defaults can be set from the tray icon
*/
#persistent
#singleinstance, forced
menu, tray, nostandard
Menu, tray, add, Set_Defaults
menu, tray, add
menu, tray, add, Exit_Script
ifnotexist, kiosk.ini
gosub, Set_Defaults
loop
{
driveget, DrvLst, list, removable
if DrvLst
{
loop, parse, drvlst
{
driveget, drvstat,status, %a_loopfield%:
if drvstat = ready
{
runwait, kiosk.ahk
sleep, 3000
}
}
DrvLst:=
}
sleep, 1500
}
Set_Defaults:
ifexist, kiosk.ini
{
iniread, target, kiosk.ini, HomeDir, target
iniread, foldind, kiosk.ini, folderIndex, foldcount
}
else
foldind:= 0
gui, add, edit, x10 y10 w200 vTarget, %target%
gui, add, button, x220 y10 gPathout,...
gui, add, text, x10 y38, Folder Index:
gui, add, edit, x90 y38 w120 vFoldInd gsave, %FoldInd%
gui, add, button, x10 y65 w230 gSave, Set Defaults ; Output Directory
gui, show
return
FoldCount:
gui, submit, nohide
return
Save:
iniwrite, %target%, kiosk.ini, homedir, target
iniwrite, %foldInd%, kiosk.ini, FolderIndex, foldcount
gui, destroy
return
Pathout:
fileselectfolder, target, ::{20d04fe0-3aea-1069-a2d8-08002b30309d},3,Select the target folder
guicontrol,,target, %target%
return
Exit_Script:
exitapp
As soon as one becomes available it launches the second script (the actual kiosk part)
/*
Author - Target 09OCT08
credits to AHKLerner and Lexikos for the scroll bar code
script will scan all REMOVABLE drives for eligible images then display in a grid
images can be (un)selected by clicking on either the image or the check box
files are copied or moved using the menu options
copied/moved files have their respective controls disabled
*/
#persistent
#singleinstance
menu, tray, nostandard
iniread, target, kiosk.ini, HomeDir, target
iniread, foldind, kiosk.ini, folderIndex, foldcount
pind = 0
splashtexton,,,SCANNING...
driveget, DrvLst, list, removable
loop, parse, drvlst
{
loop, %a_loopfield%:\*.*,0,1
{
if a_loopfilename contains BMP,JPG,PNG,TIF,GIF,JPEG,JPE,WMF,EMF
{
pind++
gui, add, picture, vt%pind% , %a_loopfilelongpath%
guicontrolget,picsize, pos, t%pind%
gui, destroy
if picsizeh > %picsizew%
gui, add, picture, w-1 h125 vt%pind% , %a_loopfilelongpath%
else
gui, add, picture, w125 h-1 vt%pind% , %a_loopfilelongpath%
guicontrolget,picsize, pos, t%pind%
gui, destroy
if picsizeh > %picsizew%
{
off:= 125 - picsizew
picsizew:= -1
}
else
{
off:= 125 - picsizeh
picsizeh:= -1
}
off//=2
FLst.= a_loopfilelongpath . "," . picsizeh . "," . picsizew . "," . off . "," . "#"
}
}
}
pind:=0
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
px = 10
py = 10
cx = 67
cy = 140
looop = 1
OnMessage(0x115, "OnScroll") ; WM_VSCROLL
OnMessage(0x114, "OnScroll") ; WM_HSCROLL
Gui, +Resize +0x300000 ; WS_VSCROLL | WS_HSCROLL
menu, menubar,add, All
menu, menubar,add, None
menu, menubar,add, Copy
menu, menubar,add, Move
menu, menubar,add, Quit
gui, menu, menubar
loop, parse, flst , `#
{
stringsplit, item, a_loopfield , `,
pyy:= py
pxx:= px
if item3 = -1 ;> item%3%
pxx+= item4
else
pyy+= item4
gui, add, picture, w%item3% h%item2% y%pyy% x%pxx% vp%a_index% gclicpic, %item1%
gui, add, checkbox, x%cx% y%cy% vc%a_index% gclicpic check3
p%a_index%:= item1
c%a_index%:= 0
pind++
looop++
if looop < 7
{
px+= 145
cx+= 145
}
else
{
px = 10
py+= 150
cx= 67
cy+= 150
looop = 1
}
}
splashtextoff
gui, show, autosize center
Gui, +LastFound
GroupAdd, MyGui, % "ahk_id " . WinExist()
return
All:
loop, %pind%
{
guicontrol, , c%a_index%, 1
gui, submit, nohide
}
gui, show, autosize ; center
return
None:
loop, %pind%
{
guicontrol, , c%a_index%, 0
gui, submit, nohide
}
gui, show, autosize ; center
return
Copy:
formattime, Folder,, yyMMdd_HHmm
ifnotexist, %mytarget%\%folder%
filecreatedir, %mytarget%\%folder%
loop, %pind%
{
guicontrolget, chk,,c%a_index%
if chk
{
guicontrolget, pth,,p%a_index%
splashtexton,500,30,Copying, %pth%
filecopy, %pth%, %MyTarget%\%folder%
guicontrol,,c%a_index%, -1
guicontrol,disable,c%a_index%
guicontrol,disable,p%a_index%
gui, submit, nohide
}
}
splashtextoff
return
Move:
formattime, Folder,, yyMMdd_HHmm
ifnotexist, %mytarget%\%folder%
filecreatedir, %mytarget%\%folder%
loop, %pind%
{
guicontrolget, chk,,c%a_index%
if chk
{
guicontrolget, pth,,p%a_index%
splashtexton,500,30,Moving, %pth%
filemove, %pth%, %MyTarget%\%folder%
guicontrol,,c%a_index%, -1
guicontrol,disable,c%a_index%
guicontrol,disable,p%a_index%
gui, submit, nohide
}
}
splashtextoff
return
clicpic:
stringtrimleft, tmp, a_guicontrol, 1
if c%tmp%
guicontrol,, c%tmp%,0
else
guicontrol,, c%tmp%,1
gui, submit, nohide
gui, show, autosize
return
Quit:
escape::
guiclose:
msgbox, Remove card then press OK
exitapp
;^R::
;reload
;return
GuiSize:
UpdateScrollBars(A_Gui, A_GuiWidth, A_GuiHeight)
return
#IfWinActive ahk_group MyGui
WheelUp::
WheelDown::
+WheelUp::
+WheelDown::
up::
Down::
; SB_LINEDOWN=1, SB_LINEUP=0, WM_HSCROLL=0x114, WM_VSCROLL=0x115
OnScroll(InStr(A_ThisHotkey,"Down") ? 1 : 0, 0, GetKeyState("Shift") ? 0x114 : 0x115, WinExist())
return
#IfWinActive
UpdateScrollBars(GuiNum, GuiWidth, GuiHeight)
{
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=10
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) ; 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 ; SB_THUMBTRACK
new_pos := NumGet(si, 24, "int") ; nTrackPos
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) ; 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)
}
copy/move/select all/select none from the menu bar
click on either an image or it's check box to select. Copied files have their check box greyed out, moved files are disabled
each time a card is inserted and files are copied or moved, a new (sequential) folder is created in the target folder
when your done, select quit from the menu bar - users are prompted to remove their card before proceeding, and the script ends.
one issue that I haven't quite worked out yet is that repeatedly selecting all/selecting none shrinks the window (

)
EDIT - 28OCT08 09:25
- amended 'polling' script to work as intended (now correctly detects removable media)
- added option to set defaults (from Tray menu)
- fixed the shrinking GUI behaviour
to do - fix aspect ratio of images
EDIT - 31OCT08 14:35
- fixed image aspect ratio
- correctly aligned images