ATTENTION: You are viewing a page formatted for mobile devices; to view the full web page, click HERE.

DonationCoder.com Software > Post New Requests Here

Auto Resize Taskbar

(1/2) > >>

blackcat:
there's a time when we open too many programs they will start to filling up our taskbar then we are force to resize the taskbar just so those taskbar buttons become manageable again. Can you write a program to automate this when there are too many taskbar buttons in the taskbar and resize it back to the normal size when there are just few taskbar buttons after we have close some of them

skrommel:
 :) 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
}

blackcat:
nice but it takes over my mouse pointer from me everytime it resize/shrink the taskbar  ;D

Genomi:
Hi, I wanted this too but Skrommel's script seemed to miss the taskbar when resizing, so I've edited it a bit to work for me. It seems to work pretty seamless, sorta like it's built into Windows. :) Also I made sure it works for the two (3 if you have XP MCE) default Windows XP themes, but it should work for other similar ones I hope. I haven't tried it in Vista or 7, so no idea if it works there. I guess post to let us know if you tried it and whether it worked.

Here's some things I added:

- it makes sure you aren't pressing the mouse button or keyboard modifiers (ctrl, alt, etc) before it resizes.
- I tried to make sure the mouse doesn't get stolen and doesn't travel off.

Warning: it only works when your taskbar is at the bottom of the screen!

(ahk file is attached, I don't know how to do the code window thing like Skrommel did up there)

Ampa:
Genomi: Don't think this is doing anything on my system! I launch numerous applications that add their buttons to the taskbar but it never resizes.

Not using a standard windows theme (have Luna Royal visual style at the moment).

I haven't tried Skrommel's version.

My taskbar is locked - is that an issue?

I run dual monitors.

Any thoughts?

Navigation

[0] Message Index

[#] Next page

Go to full version