Try
TaskbarSize - it resizes the taskbar when it gets too crowded.
This is a very simple hack, I'll see if I can find a better way of sizing the taskbar.
Skrommel
;TaskbarSize.ahk
; Resizes the taskbar when it gets too crowded
;Skrommel @ 2008
#SingleInstance,Force
DetectHiddenWindows, On
SetWinDelay,0
WinMove,ahk_class Shell_TrayWnd,,100,0
buttonlimit=5
WinGetPos,tx,ty,tw,th,ahk_class Shell_TrayWnd
WinGet, pidTaskbar, PID, ahk_class Shell_TrayWnd
hProc:= DllCall("OpenProcess", "Uint", 0x38, "int", 0, "Uint", pidTaskbar)
pProc:= DllCall("VirtualAllocEx", "Uint", hProc, "Uint", 0, "Uint", 32, "Uint", 0x1000, "Uint", 0x4)
idxTB:= GetTaskSwBar()
oldbuttons:=buttons
SendMessage, 0x418, 0, 0, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd ; TB_BUTTONCOUNT
previous:=ErrorLevel
Loop
{
Sleep,1000
idxTB:= GetTaskSwBar()
oldbuttons:=buttons
SendMessage, 0x418, 0, 0, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd ; TB_BUTTONCOUNT
buttons:=ErrorLevel
If (oldbuttons=buttons)
Continue
If (buttons>previous+buttonlimit)
{
winid:=WinExist("A")
WinActivate, ahk_class Shell_TrayWnd
PostMessage, 0x112, 0xF000,,, ahk_class Shell_TrayWnd ; SC_SIZE
MouseGetPos,mx,my
BlockInput,On
MouseClickDrag,L,1,1,1,-50,0
BlockInput,Off
MouseMove,% mx,% my,0
WinActivate,ahk_id %winid%
previous:=previous+buttonlimit
}
If (buttons<previous-buttonlimit)
{
winid:=WinExist("A")
WinActivate, ahk_class Shell_TrayWnd
PostMessage, 0x112, 0xF000,,, ahk_class Shell_TrayWnd ; SC_SIZE
MouseGetPos,mx,my
BlockInput,On
MouseClickDrag,L,1,1,1,50,0
BlockInput,Off
MouseMove,% mx,% my,0
WinActivate,ahk_id %winid%
previous:=previous-buttonlimit
}
}
Return
;Stolen from Sean at http://www.autohotkey.com/forum/viewtopic.php?t=18652
TaskButtons(sExeName = "")
{
WinGet, pidTaskbar, PID, ahk_class Shell_TrayWnd
hProc:= DllCall("OpenProcess", "Uint", 0x38, "int", 0, "Uint", pidTaskbar)
pProc:= DllCall("VirtualAllocEx", "Uint", hProc, "Uint", 0, "Uint", 32, "Uint", 0x1000, "Uint", 0x4)
idxTB:= GetTaskSwBar()
SendMessage, 0x418, 0, 0, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd ; TB_BUTTONCOUNT
Loop, %ErrorLevel%
{
SendMessage, 0x417, A_Index-1, pProc, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd ; TB_GETBUTTON
VarSetCapacity(btn,32,0)
DllCall("ReadProcessMemory", "Uint", hProc, "Uint", pProc, "Uint", &btn, "Uint", 32, "Uint", 0)
iBitmap := NumGet(btn, 0)
idn := NumGet(btn, 4)
Statyle := NumGet(btn, 8)
If dwData := NumGet(btn,12)
iString := NumGet(btn,16)
Else dwData := NumGet(btn,16,"int64"), iString:=NumGet(btn,24,"int64")
DllCall("ReadProcessMemory", "Uint", hProc, "Uint", dwData, "int64P", hWnd:=0, "Uint", NumGet(btn,12) ? 4:8, "Uint", 0)
If Not hWnd
Continue
WinGet, pid, PID, ahk_id %hWnd%
WinGet, sProcess, ProcessName, ahk_id %hWnd%
WinGetClass, sClass, ahk_id %hWnd%
If !sExeName || (sExeName = sProcess) || (sExeName = pid)
VarSetCapacity(sTooltip,128), VarSetCapacity(wTooltip,128*2)
, DllCall("ReadProcessMemory", "Uint", hProc, "Uint", iString, "Uint", &wTooltip, "Uint", 128*2, "Uint", 0)
, DllCall("WideCharToMultiByte", "Uint", 0, "Uint", 0, "str", wTooltip, "int", -1, "str", sTooltip, "int", 128, "Uint", 0, "Uint", 0)
, sTaskButtons .= "idx: " . A_Index-1 . " | idn: " . idn . " | pid: " . pid . " | hWnd: " . hWnd . " | Class: " . sClass . " | Process: " . sProcess . "`n" . " | Tooltip: " . sTooltip . "`n"
}
DllCall("VirtualFreeEx", "Uint", hProc, "Uint", pProc, "Uint", 0, "Uint", 0x8000)
DllCall("CloseHandle", "Uint", hProc)
Return sTaskButtons
}
HideButton(idn, bHide = True)
{
idxTB := GetTaskSwBar()
SendMessage, 0x404, idn, bHide, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd ; TB_HIDEBUTTON
}
DeleteButton(idx)
{
idxTB := GetTaskSwBar()
SendMessage, 0x416, idx, 0, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd ; TB_DELETEBUTTON
}
MoveButton(idxOld, idxNew)
{
idxTB := GetTaskSwBar()
SendMessage, 0x452, idxOld, idxNew, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd ; TB_MOVEBUTTON
}
GetTaskSwBar()
{
ControlGet, hParent, hWnd,, MSTaskSwWClass1 , ahk_class Shell_TrayWnd
ControlGet, hChild , hWnd,, ToolbarWindow321, ahk_id %hParent%
Loop
{
ControlGet, hWnd, hWnd,, ToolbarWindow32%A_Index%, ahk_class Shell_TrayWnd
If Not hWnd
Break
Else If hWnd = %hChild%
{
idxTB := A_Index
Break
}
}
Return idxTB
}