can someone help me plz, I'm trying to figure it out. All I know is that code has color:=%toolbar%color and toolbar:=A_Index
Code:
;Barnacle.ahk
; Add toolbars to your favorite programs
;Skrommel @ 2008
FileInstall,Barnacle.rtf,Barnacle.rtf
FileCreateDir,Toolbars
FileInstall,Toolbars\Calc.ini,Toolbars\Calc.ini
FileInstall,Toolbars\Notepad.ini,Toolbars\Notepad.ini
FileCreateDir,Images
FileInstall,Images\EditCut.ico,Images\EditCut.ico
#SingleInstance,Force
#NoEnv
SetBatchLines,-1
SetWinDelay,0
applicationname=Barnacle
SysGet,menuh,15 ;SM_CYMENU
Gosub,INIREAD
Gosub,TRAYMENU
Gosub,START
OnExit,EXIT
ids=
Loop
{
Sleep,100
WinGet,activeid,ID,A
WinGetClass,class,ahk_id %activeid%
MouseGetPos,mx,my,mid,mctrl
WinGetClass,mclass,ahk_id %mid%
active=0
Loop,% toolbars
{
currentclass:=%A_Index%class
If (class=currentclass)
{
hWnd:=activeid
active:=A_Index
IfNotInString,ids,%hWnd%`,
{
ids=%ids%%hWnd%,
%hWnd%new:=MENU(hWnd)
}
Gosub,PAINT
}
If (mclass=currentclass)
{
hWnd:=mid
active:=A_Index
IfNotInString,ids,%hWnd%`,
{
ids=%ids%%hWnd%,
%hWnd%new:=MENU(hWnd)
}
Gosub,PAINT
}
}
If (active>0 And mclass=class And mx>=toolbarx And mx<toolbarx+toolbarw And my>=toolbary And my<=toolbary+toolbarh)
{
If hotkeys<>On
{
Hotkey,$~LButton,LEFT,On
Hotkey,$~RButton,RIGHT,On
Hotkey,$~MButton,MIDDLE,On
}
oldbutton:=button
button:=Ceil((mx-cxWindowBorders+1)/buttonw)
If (button<>oldbutton)
{
tooltip:=%active%tip%button%
ToolTip,%tooltip%,% toolbarx+button*buttonw,% toolbary+buttonh+10
}
hotkeys=On
}
Else
If hotkeys=On
{
Hotkey,$LButton Up,LEFTUP,Off
Hotkey,$RButton Up,RIGHTUP,Off
Hotkey,$MButton Up,MIDDLEUP,Off
Hotkey,$~LButton,LEFT,Off
Hotkey,$~RButton,RIGHT,Off
Hotkey,$~MButton,MIDDLE,Off
button=
ToolTip,
Hotkeys=Off
}
If showinfo=1
{
PixelGetColor,mcolor,%mx%,%my%,RGB
StringTrimLeft,mcolor,mcolor,2
TrayTip,%applicationname%,X: %mx% Y:%my%`nClass: %mclass%`nControl: %mctrl%`nColor: %mcolor%
}
}
Return
LEFT:
RIGHT:
MIDDLE:
Hotkey,$LButton Up,LEFTUP,On
Hotkey,$RButton Up,RIGHTUP,On
Hotkey,$MButton Up,MIDDLEUP,On
Hotkey,$~LButton,LEFT,Off
Hotkey,$~RButton,RIGHT,Off
Hotkey,$~MButton,MIDDLE,Off
ToolTip,%tooltip%,% toolbarx+button*buttonw,% toolbary+buttonh
Return
LEFTUP:
action:=%active%leftaction%button%
ToolTip,%action%,% toolbarx+button*buttonw,% toolbary+buttonh ;Left %active% %button%:
Gosub,ACTION
Return
RIGHTUP:
action:=%active%rightaction%button%
ToolTip,%action%,% toolbarx+button*buttonw,% toolbary+buttonh ;Right %active% %button%:
Gosub,ACTION
Return
MIDDLEUP:
action:=%active%middleaction%button%
ToolTip,%action%,% toolbarx+button*buttonw,% toolbary+buttonh ;Middle %active% %button%:
Gosub,ACTION
Return
ACTION:
IfInString,action,Send`,
{
StringTrimLeft,action,action,5
Send,%action%
}
IfInString,action,Run`,
{
StringTrimLeft,action,action,4
StringSplit,action_,action,`,
Run,%action_1%,%action_2%,%action_3%
}
IfInString,action,Control`,
{
StringTrimLeft,action,action,8
StringSplit,action_,action,`,
ControlClick,%action_1%,ahk_id %hWnd%,,%action_2%,%action_3%,%action_4%
}
IfInString,action,Menu`,
{
StringTrimLeft,action,action,5
StringSplit,action_,action,`,
If action_1=0&
{
StringTrimRight,item_2,action_2,1
hSysMenu:=DllCall("GetSystemMenu", "Uint", hWnd, "int", False)
If action_0=2
{
nID :=DllCall("GetMenuItemID", "Uint", hSysMenu, "int", item_2-1) ; produce -1 for a SubMenu item
PostMessage, 0x112, nID, 0, , ahk_id %hWnd% ; WM_SYSCOMMAND
}
Else
{
StringTrimRight,item_2,action_2,1
StringTrimRight,item_3,action_3,1
hSysMenu:=DllCall("GetSubMenu", "Uint", hSysMenu, "int", item_2-1)
nID :=DllCall("GetMenuItemID", "Uint", hSysMenu, "int", item_3-1)
PostMessage, 0x112, nID, 0, , ahk_id %hWnd% ; WM_SYSCOMMAND
}
}
Else
WinMenuSelectItem,ahk_id %hWnd%,,%action_1%,%action_2%,%action_3%,%action_4%,%action_5%,%action_6%
}
IfInString,action,Mouse`,
{
StringTrimLeft,action,action,6
StringSplit,action_,action,`,
If action_5=Screen
CoordMode,Mouse,Screen
MouseClick,%action_1%,%action_2%,%action_3%,%action_4%,%action_5%
If action_5=Screen
CoordMode,Mouse,Relative
}
IfInString,action,Window`,
{
StringTrimLeft,action,action,7
StringSplit,action_,action,`,
If action_1=Move
WinMove,ahk_id %hWnd%,,%action_2%,%action_3%,%action_4%,%action_5%
If action_1=AlwaysOnTop
WinSet,AlwaysOnTop,Toggle,ahk_id %hWnd%,,
If action_1=Bottom
WinSet,Bottom,,ahk_id %hWnd%,,
}
Return
MENU(hWnd)
{
hMenu :=DllCall("GetMenu","UInt",hWnd)
If hMenu=0
{
hMenu :=DllCall("CreateMenu")
DllCall("SetMenu","UInt",hWnd,"UInt",hMenu)
uFlags:=0x1 | 0x4000 ;MF_BITMAP:=0x0004 MF_MENUBREAK:=0x40 MF_GRAYED:=0x1 MF_RIGHTJUSTIFY:=0x4000 MF_OWNERDRAW:=0x0100
new=1
}
Else
{
uFlags:=0x40 | 0x1 | 0x4000 ;MF_BITMAP:=0x0004 MF_MENUBREAK:=0x40 MF_GRAYED:=0x1 MF_RIGHTJUSTIFY:=0x4000 MF_OWNERDRAW:=0x0100
new=0
}
lpNewItem:=applicationname
VarSetCapacity(uIDNewItem,4,1)
DllCall("AppendMenu",UInt,hMenu,UInt,uFlags,UInt,&uIDNewItem,STR,lpNewItem)
DllCall("DrawMenuBar",UInt,hWnd)
Return,%new%
}
START:
Gui,+ToolWindow +AlwaysOnTop
Gui,1:Add,Text,,Loading images...
Gui,1:Show,w200 h200 Barnacle
SysGet,iconw,11 ;SM_CXICON
SysGet,iconh,12 ;SM_CYICON
ScreenDC :=DllCall("GetWindowDC",UInt,0)
MemDC :=DllCall("CreateCompatibleDC",UInt,ScreenDC)
MemBmp :=DllCall("CreateCompatibleBitmap",UInt,ScreenDC,UInt,A_ScreenWidth,UInt,toolbars*buttonh)
oldMemBmp :=DllCall("SelectObject",UInt,MemDC,UInt,MemBmp)
hBrush:=DllCall("GetStockObject",UInt,18) ;DC_BRUSH
DllCall("SelectObject",UInt,MemDC,UInt,hBrush)
buttony:=-buttonh
Loop,%toolbars%
{
toolbar:=A_Index
buttony+=%buttonh%
buttons:=%toolbar%buttons
buttonx:=-buttonw
color:=%toolbar%color
StringLeft,left,color,2
StringTrimLeft,color,color,2
hColor:="0x00" . color . left ;0x00bbggrr
DllCall("SetDCBrushColor",UInt,MemDC,UInt,hColor)
VarsetCapacity(rect,16,0)
InsertInteger(0,rect,0)
InsertInteger((toolbar-1)*buttonh,rect,4)
InsertInteger(A_ScreenWidth,rect,8)
InsertInteger(toolbar*buttonh,rect,12)
DllCall("FillRect",UInt,MemDC,Int,&rect,UInt,hBrush)
InsertInteger(0,rect,0)
InsertInteger(0,rect,4)
InsertInteger(iconw,rect,8)
InsertInteger(iconh,rect,12)
DllCall("SetStretchBltMode",UInt,MemDC,Int,4) ; Halftone better quality
Loop,%buttons%
{
button:=A_Index
image:=%toolbar%image%button%
buttonx+=%buttonw%
guiw=
Loop
{
Gui,2:-Caption -Border +ToolWindow +AlwaysOnTop
Gui,2:Margin,0,0
color:=%toolbar%color
Gui,2:Color,%color%
StringSplit,image_,image,`,
If image_2<>
image_2=Icon%image_2%
Gui,2:Add,Picture,W%guiw% H-1 %image_2%,%image_1%
Gui,2:Show,NoActivate,Barnacle Icon Loader
WinGet,guiid,Id,Barnacle Icon Loader
WinGetPos,guix,guiy,guiw,guih,ahk_id %guiid%
If (guiw<=A_ScreenWidth And guiw<=A_ScreenHeight)
Break
Gui,2:Destroy
guiw/=10
}
LoadDC:=DllCall("GetWindowDC",UInt,guiid)
DllCall("StretchBlt",UInt
,MemDC,Int,buttonx+(buttonw-imagew)/2,Int,buttony+(buttonh-imageh)/2,Int,imagew,Int,imageh,UInt
,LoadDC,Int,0,Int,0,Int,guiw,Int,guih,UInt,0x00CC0020)
Gui,2:Destroy
}
}
Gui,1:Destroy
VarSetCapacity(pwi,64,0) ;windowinfo
InsertInteger(64,pwi,0) ;cbSize
VarSetCapacity(pbmi,32,0) ;menubarinfo
InsertInteger(32,pbmi,0) ;cbSize
Return
PAINT:
DllCall("GetWindowInfo",UInt,hwnd,Int,&pwi)
rcWindow_left :=ExtractInteger(pwi,4,True)
rcWindow_top :=ExtractInteger(pwi,8,True)
rcWindow_right :=ExtractInteger(pwi,12,True)
rcWindow_bottom:=ExtractInteger(pwi,16,True)
rcClient_left :=ExtractInteger(pwi,20,True)
rcClient_top :=ExtractInteger(pwi,24,True)
; rcClient_right :=ExtractInteger(pwi,28,True)
rcClient_bottom:=ExtractInteger(pwi,32,True)
; dwStyle :=ExtractInteger(pwi,36,True)
; dwExstyle :=ExtractInteger(pwi,40,True)
; dwWindowStatus :=ExtractInteger(pwi,44,True)
cxWindowBorders:=ExtractInteger(pwi,48,True)
cyWindowBorders:=ExtractInteger(pwi,52,True)
; atomWindowType :=ExtractInteger(pwi,56,True)
; wCreatorVersion:=ExtractInteger(pwi,60,True)
toolbarx:=rcClient_left-rcWindow_left
toolbary:=rcClient_top-buttonh-rcWindow_top
; toolbarw:=rcClient_right-rcClient_left
toolbarh:=buttonh
toolbartest:=rcClient_bottom-rcClient_top
If (toolbartest=0)
toolbarh:=0
DllCall("GetMenuBarInfo",Int,hWnd,Int,0xFFFFFFFD,Int,0,Int,&pbmi) ;idObject=OBJID_MENU ;idItem
; rcBar_left :=ExtractInteger(pbmi,4,False)
; rcBar_top :=ExtractInteger(pbmi,8,False)
rcBar_right :=ExtractInteger(pbmi,12,False)
; rcBar_bottom:=ExtractInteger(pbmi,16,False)
toolbarw:=rcBar_right
ScreenDC:=DllCall("GetWindowDC",UInt,hWnd)
DllCall("StretchBlt",UInt
,ScreenDC,Int,toolbarx,Int,toolbary,Int,toolbarw,Int,toolbarh,UInt
,MemDC,Int,0,Int,(active-1)*buttonh,Int,toolbarw,Int,toolbarh,UInt,0x00CC0020 )
Return
STOP:
DllCall("DeleteObject",UInt,MemBmp)
DllCall("DeleteDC" ,UInt,MemDC )
Loop,Parse,ids,`,
{
hWnd:=A_LoopField
hMenu:=DllCall("GetMenu",UInt,hWnd)
IfWinExist,ahk_id %hWnd%
{
nPos:=DllCall("GetMenuItemCount",UInt,hMenu)-1
If nPos>0
{
menuid:=DllCall("GetMenuItemID",UInt,hMenu,Int,nPos)
uFlags:=0x0 ;MF_BYCOMMAND:=0x0 MF_BYPOSITION:=0x40
DllCall("RemoveMenu",UInt,hMenu,UInt,menuid,UInt,uFlags)
DllCall("DeleteMenu",UInt,hMenu,UInt,menuid,UInt,uFlags)
DllCall("DrawMenuBar",UInt,hWnd)
}
}
If (%hWnd%new=1)
{
DllCall("DestroyMenu",UInt,hMenu)
DllCall("SetMenu",UInt,hWnd,UInt,0)
}
}
Return
ExtractInteger(ByRef pSource, pOffset = 0, pIsSigned = false, pSize = 4)
; pSource is a string (buffer) whose memory area contains a raw/binary integer at pOffset.
; The caller should pass true for pSigned to interpret the result as signed vs. unsigned.
; pSize is the size of PSource's integer in bytes (e.g. 4 bytes for a DWORD or Int).
; pSource must be ByRef to avoid corruption during the formal-to-actual copying process
; (since pSource might contain valid data beyond its first binary zero).
{
Loop %pSize% ; Build the integer by adding up its bytes.
result += *(&pSource + pOffset + A_Index-1) << 8*(A_Index-1)
if (!pIsSigned OR pSize > 4 OR result < 0x80000000)
return result ; Signed vs. unsigned doesn't matter in these cases.
; Otherwise, convert the value (now known to be 32-bit) to its signed counterpart:
return -(0xFFFFFFFF - result + 1)
}
InsertInteger(pInteger, ByRef pDest, pOffset = 0, pSize = 4)
; The caller must ensure that pDest has sufficient capacity. To preserve any existing contents in pDest,
; only pSize number of bytes starting at pOffset are altered in it.
{
Loop %pSize% ; Copy each byte in the integer into the structure as raw binary data.
DllCall("RtlFillMemory", "UInt", &pDest + pOffset + A_Index-1, "UInt", 1, "UChar", pInteger >> 8*(A_Index-1) & 0xFF)
}
INIREAD:
IfNotExist,%applicationname%.ini
{
ini=
(
[Settings]
buttonh=
buttonw=
imagew=16
imageh=16
)
FileAppend,%ini%,%applicationname%.ini
Gosub,HELP
}
IniRead,buttonw,%applicationname%.ini,Settings,buttonw
If (buttonw="" Or buttonw="Error")
buttonw:=menuh
IniRead,buttonh,%applicationname%.ini,Settings,buttonh
If (buttonh="" Or buttonh="Error")
buttonh:=menuh
IniRead,imagew,%applicationname%.ini,Settings,imagew
If (imagew="" Or imagew="Error")
imagew:=16
IniRead,imageh,%applicationname%.ini,Settings,imageh
If (imageh="" Or imageh="Error")
imageh:=16
Loop,Toolbars\*.ini
{
toolbar:=A_Index
filename=Toolbars\%A_LoopFileName%
IniRead,%toolbar%class,%filename%,Settings,class
IniRead,%toolbar%color,%filename%,Settings,color
Loop
{
button:=A_Index
IniRead,%toolbar%image%button%,%filename%,%button%,image
If %toolbar%image%button%=Error
Break
IniRead,%toolbar%leftaction%button%,%filename%,%button%,leftaction
IniRead,%toolbar%rightaction%button%,%filename%,%button%,rightaction
IniRead,%toolbar%middleaction%button%,%filename%,%button%,middleaction
IniRead,%toolbar%tip%button%,%filename%,%button%,tip
}
%toolbar%buttons:=button-1
}
toolbars:=toolbar
Return
TRAYMENU:
Menu,Tray,NoStandard
Menu,Tray,DeleteAll
Menu,Tray,Add,%applicationname%,ABOUT
Menu,Tray,Add,
Menu,Tray,Default,%applicationname%
Menu,Tray,Add,Show &Info...,SHOWINFO
Menu,Tray,Add,&Settings...,SETTINGS
Menu,Tray,Add,&About...,ABOUT
Menu,Tray,Add,&Help...,HELP
Menu,Tray,Add,E&xit,EXIT
Menu,Tray,Tip,%applicationname%
Return
SHOWINFO:
If showinfo=1
showinfo=0
Else
showinfo=1
Return
SETTINGS:
Run,%A_ScriptDir%
Return
HELP:
Run,Barnacle.rtf
Return
ABOUT:
Gui,Destroy
Gui,Margin,20,20
Gui,Add,Picture,xm Icon1,%applicationname%.exe
Gui,Font,Bold
Gui,Add,Text,x+10 yp+10,%applicationname% v0.992
Gui,Font
Gui,Add,Text,y+10,Add toolbars to your favorite programs.
Gui,Add,Text,y+10,- To find out more, choose Help in the tray menu.
Gui,Add,Picture,xm y+20 Icon2,%applicationname%.exe
Gui,Font,Bold
Gui,Add,Text,x+10 yp+10,1 Hour Software by Skrommel
Gui,Font
Gui,Add,Text,y+10,For more tools, information and donations, please visit
Gui,Font,CBlue Underline
Gui,Add,Text,y+5 G1HOURSOFTWARE,www.1HourSoftware.com
Gui,Font
Gui,Add,Picture,xm y+20 Icon7,%applicationname%.exe
Gui,Font,Bold
Gui,Add,Text,x+10 yp+10,DonationCoder
Gui,Font
Gui,Add,Text,y+10,Please support the contributors at
Gui,Font,CBlue Underline
Gui,Add,Text,y+5 GDONATIONCODER,www.DonationCoder.com
Gui,Font
Gui,Add,Picture,xm y+20 Icon6,%applicationname%.exe
Gui,Font,Bold
Gui,Add,Text,x+10 yp+10,AutoHotkey
Gui,Font
Gui,Add,Text,y+10,This tool was made using the powerful
Gui,Font,CBlue Underline
Gui,Add,Text,y+5 GAUTOHOTKEY,www.AutoHotkey.com
Gui,Font
Gui,Show,,%applicationname% About
hCurs:=DllCall("LoadCursor","UInt",NULL,"Int",32649,"UInt") ;IDC_HAND
OnMessage(0x200,"WM_MOUSEMOVE")
Return
1HOURSOFTWARE:
Run,http://www.1hoursoftware.com,,UseErrorLevel
Return
DONATIONCODER:
Run,http://www.donationcoder.com,,UseErrorLevel
Return
AUTOHOTKEY:
Run,http://www.autohotkey.com,,UseErrorLevel
Return
ABOUTOK:
Gui,Destroy
OnMessage(0x200,"")
DllCall("DestroyCursor","Uint",hCur)
Return
WM_MOUSEMOVE(wParam,lParam)
{
Global hCurs
MouseGetPos,,,,ctrl
If ctrl in Static8,Static12,Static16
DllCall("SetCursor","UInt",hCurs)
Return
}
EXIT:
Gosub,STOP
ExitApp