Untitled diff

Created Diff never expires
0 removals
491 lines
38 additions
529 lines
/*
/*
ToolTip() by HotKeyIt http://www.autohotkey.com/forum/viewtopic.php?t=40165
ToolTip() by HotKeyIt http://www.autohotkey.com/forum/viewtopic.php?t=40165
Syntax: ToolTip(Number,Text,Title,Options)
Syntax: ToolTip(Number,Text,Title,Options)
Return Value: ToolTip returns hWnd of the ToolTip
Return Value: ToolTip returns hWnd of the ToolTip
| Options can include any of following parameters separated by space
| Options can include any of following parameters separated by space
| Option | Meaning
| Option | Meaning
| A | Aim ConrolId or ClassNN (Button1, Edit2, ListBox1, SysListView321...)
| A | Aim ConrolId or ClassNN (Button1, Edit2, ListBox1, SysListView321...)
| | - using this, ToolTip will be shown when you point mouse on a control
| | - using this, ToolTip will be shown when you point mouse on a control
| | - D (delay) can be used to change how long ToolTip is shown
| | - D (delay) can be used to change how long ToolTip is shown
| | - W (wait) can wait for specified seconds before ToolTip will be shown
| | - W (wait) can wait for specified seconds before ToolTip will be shown
| | - Some controls like Static require a subroutine to have a ToolTip!!!
| | - Some controls like Static require a subroutine to have a ToolTip!!!
| B + F | Specify here the color for ToolTip in 6-digit hexadecimal RGB code
| B + F | Specify here the color for ToolTip in 6-digit hexadecimal RGB code
| | - B = Background color, F = Foreground color (text color)
| | - B = Background color, F = Foreground color (text color)
| | - this can be 0x00FF00 or 00FF00 or Blue, Lime, Black, White...
| | - this can be 0x00FF00 or 00FF00 or Blue, Lime, Black, White...
| C | Close button for ToolTip/BalloonTip. See ToolTip actions how to use it
| C | Close button for ToolTip/BalloonTip. See ToolTip actions how to use it
| D | Delay. This option will determine how long ToolTip should be shown.30 sec. is maximum
| D | Delay. This option will determine how long ToolTip should be shown.30 sec. is maximum
| | - this option is also available when assigning the ToolTip to a control.
| | - this option is also available when assigning the ToolTip to a control.
| E | Edges for ToolTip, Use this to set margin of ToolTip window (space between text and border)
| E | Edges for ToolTip, Use this to set margin of ToolTip window (space between text and border)
| | - Supply Etop.left.bottom.right in pixels, for example: E10.0.10.5
| | - Supply Etop.left.bottom.right in pixels, for example: E10.0.10.5
| G | Execute one or more internal Labels of ToolTip function only.
| G | Execute one or more internal Labels of ToolTip function only.
| | For example:
| | For example:
| | - Track the position only, use ToolTip(1,"","","Xcaret Ycaret gTTM_TRACKPOSITION")
| | - Track the position only, use ToolTip(1,"","","Xcaret Ycaret gTTM_TRACKPOSITION")
| | - When X+Y are empty (= display near mouse position) you can use TTM_UPDATE
| | - When X+Y are empty (= display near mouse position) you can use TTM_UPDATE
| | - Update text only, use ToolTip(1,"text","","G1"). Note specify L1 if links are used.
| | - Update text only, use ToolTip(1,"text","","G1"). Note specify L1 if links are used.
| | - Update title only, use ToolTip(1,"","Title","G1")
| | - Update title only, use ToolTip(1,"","Title","G1")
| | - Hide ToolTip, use ToolTip(1,"","","gTTM_POP")
| | - Hide ToolTip, use ToolTip(1,"","","gTTM_POP")
| | - To show ToolTip again use ToolTip(1,"","","gTTM_TRACKPOSITION.TTM_TRACKACTIVATE")
| | - To show ToolTip again use ToolTip(1,"","","gTTM_TRACKPOSITION.TTM_TRACKACTIVATE")
| | - Update background color + text color, specify . between gLabels to execute several:
| | - Update background color + text color, specify . between gLabels to execute several:
| | - ToolTip(1,"","","BBlue FWhite gTTM_SETTIPBKCOLOR.TTM_SETTIPTEXTCOLOR")
| | - ToolTip(1,"","","BBlue FWhite gTTM_SETTIPBKCOLOR.TTM_SETTIPTEXTCOLOR")
| | - Following labels can be used: TTM_SETTITLEA + TTM_SETTITLEW (title+I), TTM_POPUP, TTM_POP
| | - Following labels can be used: TTM_SETTITLEA + TTM_SETTITLEW (title+I), TTM_POPUP, TTM_POP
| | TTM_SETTIPBKCOLOR (B), TTM_SETTIPTEXTCOLOR (F), TTM_TRACKPOSITION (N+X+Y),
| | TTM_SETTIPBKCOLOR (B), TTM_SETTIPTEXTCOLOR (F), TTM_TRACKPOSITION (N+X+Y),
| | TTM_SETMAXTIPWIDTH (R), TTM_SETMARGIN (E), TT_SETTOOLINFO (text+A+P+N+X+Y+S+L)
| | TTM_SETMAXTIPWIDTH (R), TTM_SETMARGIN (E), TT_SETTOOLINFO (text+A+P+N+X+Y+S+L)
| | TTM_SETWINDOWTHEME (Q)
| | TTM_SETWINDOWTHEME (Q)
| H | Hide ToolTip after a link is clicked.See L option
| H | Hide ToolTip after a link is clicked.See L option
| I | Icon 1-3, e.g. I1. If this option is missing no Icon will be used (same as I0)
| I | Icon 1-3, e.g. I1. If this option is missing no Icon will be used (same as I0)
| | - 1 = Info, 2 = Warning, 3 = Error, > 3 is meant to be a hIcon (handle to an Icon)
| | - 1 = Info, 2 = Warning, 3 = Error, > 3 is meant to be a hIcon (handle to an Icon)
| | Use Included MI_ExtractIcon and GetAssociatedIcon functions to get hIcon
| | Use Included MI_ExtractIcon and GetAssociatedIcon functions to get hIcon
| J | Justify ToolTip to center of control
| J | Justify ToolTip to center of control
| K | Font. Specify the font for the tooltip. Separate options with a period "."
| | Valid options are bold,underline,italic,strikeout,sFONTSIZE,fFONTFACE
| | Limitations: FONTFACE cannot include spaces
| | Examples: Ks12.fArial , Kbold.italic.fVerdana
| | (by guest3456 http://www.autohotkey.com/community/viewtopic.php?p=559224#p559224)
| L | Links for ToolTips. See ToolTip actions how Links for ToolTip work.
| L | Links for ToolTips. See ToolTip actions how Links for ToolTip work.
| M | Mouse click-trough. So a click will be forwarded to the window underneath ToolTip
| M | Mouse click-trough. So a click will be forwarded to the window underneath ToolTip
| N | Do NOT activate ToolTip (N1), To activate (show) call ToolTip(1,"","","gTTM_TRACKACTIVATE")
| N | Do NOT activate ToolTip (N1), To activate (show) call ToolTip(1,"","","gTTM_TRACKACTIVATE")
| O | Oval ToolTip (BalloonTip). Specify O1 to use a BalloonTip instead of ToolTip.
| O | Oval ToolTip (BalloonTip). Specify O1 to use a BalloonTip instead of ToolTip.
| P | Parent window hWnd or GUI number. This will assign a ToolTip to a window.
| P | Parent window hWnd or GUI number. This will assign a ToolTip to a window.
| | - Reqiered to assign ToolTip to controls and actions.
| | - Reqiered to assign ToolTip to controls and actions.
| Q | Quench Style/Theme. Use this to disable Theme of ToolTip.
| Q | Quench Style/Theme. Use this to disable Theme of ToolTip.
| | Using this option you can have for example colored ToolTips in Vista.
| | Using this option you can have for example colored ToolTips in Vista.
| R | Restrict width. This will restrict the width of the ToolTip.
| R | Restrict width. This will restrict the width of the ToolTip.
| | So if Text is to long it will be shown in several lines
| | So if Text is to long it will be shown in several lines
| S | Show at coordinates regardless of position. Specify S1 to use that feature
| S | Show at coordinates regardless of position. Specify S1 to use that feature
| | - normally it is fed automaticaly to show on screen
| | - normally it is fed automaticaly to show on screen
| T | Transparency. This option will apply Transparency to a ToolTip.
| T | Transparency. This option will apply Transparency to a ToolTip.
| | - this option is not available to ToolTips assigned to a control.
| | - this option is not available to ToolTips assigned to a control.
| V | Visible: even when the parent window is not active, a control-ToolTip will be shown
| V | Visible: even when the parent window is not active, a control-ToolTip will be shown
| W | Wait time in seconds (max 30) before ToolTip pops up when pointing on one of controls.
| W | Wait time in seconds (max 30) before ToolTip pops up when pointing on one of controls.
| X + Y | Coordinates where ToolTip should be displayed, e.g. X100 Y200
| X + Y | Coordinates where ToolTip should be displayed, e.g. X100 Y200
| | - leave empty to display ToolTip near mouse
| | - leave empty to display ToolTip near mouse
| | - you can specify Xcaret Ycaret to display at caret coordinates
| | - you can specify Xcaret Ycaret to display at caret coordinates
|
|
| To destroy a ToolTip use ToolTip(Number), to destroy all ToolTip()
| To destroy a ToolTip use ToolTip(Number), to destroy all ToolTip()
|
|
| ToolTip Actions (NOTE, OPTION P MUST BE PRESENT TO USE THAT FEATURE)
| ToolTip Actions (NOTE, OPTION P MUST BE PRESENT TO USE THAT FEATURE)
| Assigning an action to a ToolTip to works using OnMessage(0x4e,"Function") - WM_NOTIFY
| Assigning an action to a ToolTip to works using OnMessage(0x4e,"Function") - WM_NOTIFY
| Parameter/option P must be present so ToolTip will forward messages to script
| Parameter/option P must be present so ToolTip will forward messages to script
| All you need to do inside this OnMessage function is to include:
| All you need to do inside this OnMessage function is to include:
| - If wParam=0
| - If wParam=0
| ToolTip("",lParam[,Label])
| ToolTip("",lParam[,Label])
|
|
| Additionally you need to have one or more of following labels in your script
| Additionally you need to have one or more of following labels in your script
| - ToolTip: when clicking a link
| - ToolTip: when clicking a link
| - ToolTipClose: when closing ToolTip
| - ToolTipClose: when closing ToolTip
| - You can also have a diferent label for one or all ToolTips
| - You can also have a diferent label for one or all ToolTips
| - Therefore enter the number of ToolTip in front of the label
| - Therefore enter the number of ToolTip in front of the label
| - e.g. 99ToolTip: or 1ToolTipClose:
| - e.g. 99ToolTip: or 1ToolTipClose:
|
|
| - Those labels names can be customized as well
| - Those labels names can be customized as well
| - e.g. ToolTip("",lParam,"MyTip") will use MyTip: and MyTipClose:
| - e.g. ToolTip("",lParam,"MyTip") will use MyTip: and MyTipClose:
| - you can enter the number of ToolTip in front of that label as well.
| - you can enter the number of ToolTip in front of that label as well.
|
|
| - Links have following syntax:
| - Links have following syntax:
| - <a>Link</a> or <a link>LinkName</a>
| - <a>Link</a> or <a link>LinkName</a>
| - When a Link is clicked, ToolTip() will jump to the label
| - When a Link is clicked, ToolTip() will jump to the label
| - Variable ErrorLevel will contain clicked link
| - Variable ErrorLevel will contain clicked link
|
|
| - So when only LinkName is given, e.g. <a>AutoHotkey</a> Errorlevel will be AutoHotkey
| - So when only LinkName is given, e.g. <a>AutoHotkey</a> Errorlevel will be AutoHotkey
| - When using Link is given as well, e.g. <a http://www.autohotkey.com>AutoHotkey</a>
| - When using Link is given as well, e.g. <a http://www.autohotkey.com>AutoHotkey</a>
| - Errorlevel will be set to http://www.autohotkey.com
| - Errorlevel will be set to http://www.autohotkey.com
|
|
| Please note some options like Close Button and Links will require Win2000++ (+version 6.0 of comctl32.dll)
| Please note some options like Close Button and Links will require Win2000++ (+version 6.0 of comctl32.dll)
| AutoHotKey Version 1.0.48++ is required due to "assume static mode"
| AutoHotKey Version 1.0.48++ is required due to "assume static mode"
| If you use 1 ToolTip for several controls, the only difference between those can be the text.
| If you use 1 ToolTip for several controls, the only difference between those can be the text.
| - Other options, like Title, color and so on, will be valid globally
| - Other options, like Title, color and so on, will be valid globally
*/
*/
ToolTip(ID="",TEXT="",TITLE="",OPTIONS=""){
ToolTip(ID="",TEXT="",TITLE="",OPTIONS=""){
static
static
local option,a,b,c,d,e,f,g,h,i,k,l,m,n,o,p,q,r,s,t,v,w,x,y,xc,yc,xw,yw,RECT,#_DetectHiddenWindows,OnMessage
local option,a,b,c,d,e,f,g,h,i,k,l,m,n,o,p,q,r,s,t,v,w,x,y,xc,yc,xw,yw,RECT,#_DetectHiddenWindows,OnMessage
If !Init
If !Init
Gosub, TTM_INIT
Gosub, TTM_INIT
OnMessage:=OnMessage(0x4e,"") ,DetectHiddenWindows:=A_DetectHiddenWindows
OnMessage:=OnMessage(0x4e,"") ,DetectHiddenWindows:=A_DetectHiddenWindows
DetectHiddenWindows, On
DetectHiddenWindows, On
If !ID
If !ID
{
{
If text
If text
If text is Xdigit
If text is Xdigit
GoTo, TTN_LINKCLICK
GoTo, TTN_LINKCLICK
Loop, Parse, hWndArray, % Chr(2) ;Destroy all ToolTip Windows
Loop, Parse, hWndArray, % Chr(2) ;Destroy all ToolTip Windows
{
{
If WinExist("ahk_id " . A_LoopField)
If WinExist("ahk_id " . A_LoopField)
DllCall("DestroyWindow","Uint",A_LoopField)
DllCall("DestroyWindow","Uint",A_LoopField)
hWndArray%A_LoopField%=
hWndArray%A_LoopField%=
}
}
hWndArray=
hWndArray=
Loop, Parse, idArray, % Chr(2) ;Destroy all ToolTip Structures
Loop, Parse, idArray, % Chr(2) ;Destroy all ToolTip Structures
{
{
TT_ID:=A_LoopField
TT_ID:=A_LoopField
If TT_ALL_%TT_ID%
If TT_ALL_%TT_ID%
Gosub, TT_DESTROY
Gosub, TT_DESTROY
}
}
idArray=
idArray=
Goto, TT_EXITFUNC
Goto, TT_EXITFUNC
}
}
TT_ID:=ID
TT_ID:=ID
TT_HWND:=TT_HWND_%TT_ID%
TT_HWND:=TT_HWND_%TT_ID%
;___________________ Load Options Variables and Structures ___________________
;___________________ Load Options Variables and Structures ___________________
If (options){
If (options){
Loop,Parse,options,%A_Space%
Loop,Parse,options,%A_Space%
If (option:= SubStr(A_LoopField,1,1))
If (option:= SubStr(A_LoopField,1,1))
%option%:= SubStr(A_LoopField,2)
%option%:= SubStr(A_LoopField,2)
}
}
If (G){
If (G){
; If (Title!=""){
; If (Title!=""){
Gosub, TTM_SETTITLE
Gosub, TTM_SETTITLE
Gosub, TTM_UPDATE
Gosub, TTM_UPDATE
; }
; }
; If (Text!=""){
; If (Text!=""){
If (InStr(text,"<a") and TOOLLINK%TT_ID%){
If (InStr(text,"<a") and TOOLLINK%TT_ID%){
TOOLTEXT_%TT_ID%:=text
TOOLTEXT_%TT_ID%:=text
text:=RegExReplace(text,"<a\K[^<]*?>",">")
text:=RegExReplace(text,"<a\K[^<]*?>",">")
} else
} else
TOOLTEXT_%TT_ID%:=
TOOLTEXT_%TT_ID%:=
NumPut(&text,TOOLINFO_%TT_ID%,36)
NumPut(&text,TOOLINFO_%TT_ID%,36)
Gosub, TTM_UPDATETIPTEXT
Gosub, TTM_UPDATETIPTEXT
; }
; }
Loop, Parse,G,.
Loop, Parse,G,.
If IsLabel(A_LoopField)
If IsLabel(A_LoopField)
Gosub, %A_LoopField%
Gosub, %A_LoopField%
Sleep,10
Sleep,10
Goto, TT_EXITFUNC
Goto, TT_EXITFUNC
}
}
;__________________________ Save TOOLINFO Structures _________________________
;__________________________ Save TOOLINFO Structures _________________________
If P {
If P {
If (p<100 and !WinExist("ahk_id " p)){
If (p<100 and !WinExist("ahk_id " p)){
Gui,%p%:+LastFound
Gui,%p%:+LastFound
P:=WinExist()
P:=WinExist()
}
}
If !InStr(TT_ALL_%TT_ID%,Chr(2) . Abs(P) . Chr(2))
If !InStr(TT_ALL_%TT_ID%,Chr(2) . Abs(P) . Chr(2))
TT_ALL_%TT_ID% .= Chr(2) . Abs(P) . Chr(2)
TT_ALL_%TT_ID% .= Chr(2) . Abs(P) . Chr(2)
}
}
If !InStr(TT_ALL_%TT_ID%,Chr(2) . ID . Chr(2))
If !InStr(TT_ALL_%TT_ID%,Chr(2) . ID . Chr(2))
TT_ALL_%TT_ID% .= Chr(2) . ID . Chr(2)
TT_ALL_%TT_ID% .= Chr(2) . ID . Chr(2)
If H
If H
TT_HIDE_%TT_ID%:=1
TT_HIDE_%TT_ID%:=1
;__________________________ Create ToolTip Window __________________________
;__________________________ Create ToolTip Window __________________________
If (!TT_HWND and text)
If (!TT_HWND and text)
{
{
TT_HWND := DllCall("CreateWindowEx", "Uint", 0x8, "str", "tooltips_class32", "str", "", "Uint", 0x02 + (v ? 0x1 : 0) + (l ? 0x100 : 0) + (C ? 0x80 : 0)+(O ? 0x40 : 0), "int", 0x80000000, "int", 0x80000000, "int", 0x80000000, "int", 0x80000000, "Uint", P ? P : 0, "Uint", 0, "Uint", 0, "Uint", 0)
TT_HWND := DllCall("CreateWindowEx", "Uint", 0x8, "str", "tooltips_class32", "str", "", "Uint", 0x02 + (v ? 0x1 : 0) + (l ? 0x100 : 0) + (C ? 0x80 : 0)+(O ? 0x40 : 0), "int", 0x80000000, "int", 0x80000000, "int", 0x80000000, "int", 0x80000000, "Uint", P ? P : 0, "Uint", 0, "Uint", 0, "Uint", 0)
TT_HWND_%TT_ID%:=TT_HWND
TT_HWND_%TT_ID%:=TT_HWND
hWndArray .=(hWndArray ? Chr(2) : "") . TT_HWND
hWndArray .=(hWndArray ? Chr(2) : "") . TT_HWND
idArray .=(idArray ? Chr(2) : "") . TT_ID
idArray .=(idArray ? Chr(2) : "") . TT_ID
Gosub, TTM_SETMAXTIPWIDTH
Gosub, TTM_SETMAXTIPWIDTH
DllCall("SendMessage", "Uint", TT_HWND, "Uint", 0x403, "Uint", 2, "Uint", (D ? D*1000 : -1)) ;TTDT_AUTOPOP
DllCall("SendMessage", "Uint", TT_HWND, "Uint", 0x403, "Uint", 2, "Uint", (D ? D*1000 : -1)) ;TTDT_AUTOPOP
DllCall("SendMessage", "Uint", TT_HWND, "Uint", 0x403, "Uint", 3, "Uint", (W ? W*1000 : -1)) ;TTDT_INITIAL
DllCall("SendMessage", "Uint", TT_HWND, "Uint", 0x403, "Uint", 3, "Uint", (W ? W*1000 : -1)) ;TTDT_INITIAL
DllCall("SendMessage", "Uint", TT_HWND, "Uint", 0x403, "Uint", 1, "Uint", (W ? W*1000 : -1)) ;TTDT_RESHOW
DllCall("SendMessage", "Uint", TT_HWND, "Uint", 0x403, "Uint", 1, "Uint", (W ? W*1000 : -1)) ;TTDT_RESHOW
} else if (!text and !options){
} else if (!text and !options){
DllCall("DestroyWindow","Uint",TT_HWND)
DllCall("DestroyWindow","Uint",TT_HWND)
Gosub, TT_DESTROY
Gosub, TT_DESTROY
GoTo, TT_EXITFUNC
GoTo, TT_EXITFUNC
}
}
;______________________ Create TOOLINFO Structure ______________________
;______________________ Create TOOLINFO Structure ______________________
Gosub, TT_SETTOOLINFO
Gosub, TT_SETTOOLINFO
If (Q!="")
If (Q!="")
Gosub, TTM_SETWINDOWTHEME
Gosub, TTM_SETWINDOWTHEME
If (E!="")
If (E!="")
Gosub, TTM_SETMARGIN
Gosub, TTM_SETMARGIN
If (F!="")
If (F!="")
Gosub, TTM_SETTIPTEXTCOLOR
Gosub, TTM_SETTIPTEXTCOLOR
If (B!="")
If (B!="")
Gosub, TTM_SETTIPBKCOLOR
Gosub, TTM_SETTIPBKCOLOR
If (title!="")
If (title!="")
Gosub, TTM_SETTITLE
Gosub, TTM_SETTITLE
If (K!="")
Gosub, WM_SETFONT
If (!A){
If (!A){
Gosub, TTM_UPDATETIPTEXT
Gosub, TTM_UPDATETIPTEXT
Gosub, TTM_UPDATE
Gosub, TTM_UPDATE
If D {
If D {
A_Timer := A_TickCount, D *= 1000
A_Timer := A_TickCount, D *= 1000
Gosub, TTM_TRACKPOSITION
Gosub, TTM_TRACKPOSITION
Gosub, TTM_TRACKACTIVATE
Gosub, TTM_TRACKACTIVATE
Loop
Loop
{
{
Gosub, TTM_TRACKPOSITION
Gosub, TTM_TRACKPOSITION
If (A_TickCount - A_Timer > D)
If (A_TickCount - A_Timer > D)
Break
Break
}
}
Gosub, TT_DESTROY
Gosub, TT_DESTROY
DllCall("DestroyWindow","Uint",TT_HWND)
DllCall("DestroyWindow","Uint",TT_HWND)
TT_HWND_%TT_ID%=
TT_HWND_%TT_ID%=
} else {
} else {
Gosub, TTM_TRACKPOSITION
Gosub, TTM_TRACKPOSITION
Gosub, TTM_TRACKACTIVATE
Gosub, TTM_TRACKACTIVATE
If T
If T
WinSet,Transparent,%T%,ahk_id %TT_HWND%
WinSet,Transparent,%T%,ahk_id %TT_HWND%
If M
If M
WinSet,ExStyle,^0x20,ahk_id %TT_HWND%
WinSet,ExStyle,^0x20,ahk_id %TT_HWND%
}
}
}
}
;________ Return HWND of ToolTip ________
;________ Return HWND of ToolTip ________
Gosub, TT_EXITFUNC
Gosub, TT_EXITFUNC
Return TT_HWND
Return TT_HWND
;________________________ Internal Labels ________________________
;________________________ Internal Labels ________________________
TT_EXITFUNC:
TT_EXITFUNC:
If OnMessage
If OnMessage
OnMessage(0x4e,OnMessage)
OnMessage(0x4e,OnMessage)
DetectHiddenWindows, %#_DetectHiddenWindows%
DetectHiddenWindows, %#_DetectHiddenWindows%
Return
Return
TTM_POP: ;Hide ToolTip
TTM_POP: ;Hide ToolTip
TTM_POPUP: ;Causes the ToolTip to display at the coordinates of the last mouse message.
TTM_POPUP: ;Causes the ToolTip to display at the coordinates of the last mouse message.
TTM_UPDATE: ;Forces the current tool to be redrawn.
TTM_UPDATE: ;Forces the current tool to be redrawn.
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", 0)
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", 0)
Return
Return
TTM_TRACKACTIVATE: ;Activates or deactivates a tracking ToolTip.
TTM_TRACKACTIVATE: ;Activates or deactivates a tracking ToolTip.
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", (N ? 0 : 1), "Uint", &TOOLINFO_%ID%)
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", (N ? 0 : 1), "Uint", &TOOLINFO_%ID%)
Return
Return
TTM_UPDATETIPTEXT:
TTM_UPDATETIPTEXT:
TTM_GETBUBBLESIZE:
TTM_GETBUBBLESIZE:
TTM_ADDTOOL:
TTM_ADDTOOL:
TTM_DELTOOL:
TTM_DELTOOL:
TTM_SETTOOLINFO:
TTM_SETTOOLINFO:
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", &TOOLINFO_%ID%)
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", &TOOLINFO_%ID%)
Return
Return
TTM_SETTITLE:
TTM_SETTITLE:
title := (StrLen(title) < 96) ? title : (Chr(133) SubStr(title, -97))
title := (StrLen(title) < 96) ? title : (Chr(133) SubStr(title, -97))
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", I, "Uint", &Title)
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", I, "Uint", &Title)
Return
Return
TTM_SETWINDOWTHEME:
TTM_SETWINDOWTHEME:
If Q
If Q
DllCall("uxtheme\SetWindowTheme", "Uint", TT_HWND, "Uint", 0, "UintP", 0)
DllCall("uxtheme\SetWindowTheme", "Uint", TT_HWND, "Uint", 0, "UintP", 0)
else
else
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", &K)
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", &K)
Return
Return
TTM_SETMAXTIPWIDTH:
TTM_SETMAXTIPWIDTH:
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", R ? R : A_ScreenWidth)
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", R ? R : A_ScreenWidth)
Return
Return
TTM_TRACKPOSITION:
TTM_TRACKPOSITION:
VarSetCapacity(xc, 20, 0), xc := Chr(20)
VarSetCapacity(xc, 20, 0), xc := Chr(20)
DllCall("GetCursorInfo", "Uint", &xc)
DllCall("GetCursorInfo", "Uint", &xc)
yc := NumGet(xc,16), xc := NumGet(xc,12)
yc := NumGet(xc,16), xc := NumGet(xc,12)
SysGet,xl,76
SysGet,xl,76
SysGet,xr,78
SysGet,xr,78
SysGet,yl,77
SysGet,yl,77
SysGet,yr,79
SysGet,yr,79
xc+=15,yc+=15
xc+=15,yc+=15
If (x="caret" or y="caret"){
If (x="caret" or y="caret"){
WinGetPos,xw,yw,,,A
WinGetPos,xw,yw,,,A
If x=caret
If x=caret
{
{
xc:=xw+A_CaretX +1
xc:=xw+A_CaretX +1
xc:=(xl>xc ? xl : (xr<xc ? xr : xc))
xc:=(xl>xc ? xl : (xr<xc ? xr : xc))
}
}
If (y="caret"){
If (y="caret"){
yc:=yw+A_CaretY+15
yc:=yw+A_CaretY+15
yc:=(yl>yc ? yl : (yr<yc ? yr : yc))
yc:=(yl>yc ? yl : (yr<yc ? yr : yc))
}
}
} else if (x="TrayIcon" or y="TrayIcon"){
} else if (x="TrayIcon" or y="TrayIcon"){
Process, Exist
Process, Exist
PID:=ErrorLevel
PID:=ErrorLevel
hWndTray:=WinExist("ahk_class Shell_TrayWnd")
hWndTray:=WinExist("ahk_class Shell_TrayWnd")
ControlGet,hWndToolBar,Hwnd,,ToolbarWindow321,ahk_id %hWndTray%
ControlGet,hWndToolBar,Hwnd,,ToolbarWindow321,ahk_id %hWndTray%
RemoteBuf_Open(TrayH,hWndToolBar,20)
RemoteBuf_Open(TrayH,hWndToolBar,20)
DataH:=NumGet(TrayH,0)
DataH:=NumGet(TrayH,0)
SendMessage, 0x418,0,0,,ahk_id %hWndToolBar%
SendMessage, 0x418,0,0,,ahk_id %hWndToolBar%
Loop % ErrorLevel
Loop % ErrorLevel
{
{
SendMessage,0x417,A_Index-1,RemoteBuf_Get(TrayH),,ahk_id %hWndToolBar%
SendMessage,0x417,A_Index-1,RemoteBuf_Get(TrayH),,ahk_id %hWndToolBar%
RemoteBuf_Read(TrayH,lpData,20)
RemoteBuf_Read(TrayH,lpData,20)
VarSetCapacity(dwExtraData,8)
VarSetCapacity(dwExtraData,8)
pwData:=NumGet(lpData,12)
pwData:=NumGet(lpData,12)
DllCall( "ReadProcessMemory", "uint", DataH, "uint", pwData, "uint", &dwExtraData, "uint", 8, "uint", 0 )
DllCall( "ReadProcessMemory", "uint", DataH, "uint", pwData, "uint", &dwExtraData, "uint", 8, "uint", 0 )
BWID:=NumGet(dwExtraData,0)
BWID:=NumGet(dwExtraData,0)
WinGet,BWPID,PID, ahk_id %BWID%
WinGet,BWPID,PID, ahk_id %BWID%
If (BWPID!=PID and BWPID!=#__MAIN_PID_)
If (BWPID!=PID and BWPID!=#__MAIN_PID_)
continue
continue
SendMessage, 0x41d,A_Index-1,RemoteBuf_Get(TrayH),,ahk_id %hWndToolBar%
SendMessage, 0x41d,A_Index-1,RemoteBuf_Get(TrayH),,ahk_id %hWndToolBar%
RemoteBuf_Read(TrayH,rcPosition,20)
RemoteBuf_Read(TrayH,rcPosition,20)
If (NumGet(lpData,8)>7){
If (NumGet(lpData,8)>7){
ControlGetPos,xc,yc,xw,yw,Button2,ahk_id %hWndTray%
ControlGetPos,xc,yc,xw,yw,Button2,ahk_id %hWndTray%
xc+=xw/2, yc+=yw/4
xc+=xw/2, yc+=yw/4
} else {
} else {
ControlGetPos,xc,yc,,,ToolbarWindow321,ahk_id %hWndTray%
ControlGetPos,xc,yc,,,ToolbarWindow321,ahk_id %hWndTray%
halfsize:=NumGet(rcPosition,12)/2
halfsize:=NumGet(rcPosition,12)/2
xc+=NumGet(rcPosition,0)+ halfsize
xc+=NumGet(rcPosition,0)+ halfsize
yc+=NumGet(rcPosition,4)+ (halfsize/2)
yc+=NumGet(rcPosition,4)+ (halfsize/2)
}
}
WinGetPos,xw,yw,,,ahk_id %hWndTray%
WinGetPos,xw,yw,,,ahk_id %hWndTray%
xc+=xw,yc+=yw
xc+=xw,yc+=yw
break
break
}
}
RemoteBuf_close(TrayH)
RemoteBuf_close(TrayH)
}
}
If xc not between %xl% and %xr%
If xc not between %xl% and %xr%
xc=xc<xl ? xl : xr
xc=xc<xl ? xl : xr
If yc not between %yl% and %yr%
If yc not between %yl% and %yr%
yc=yc<yl ? yl : yr
yc=yc<yl ? yl : yr
If (!x and !y)
If (!x and !y)
Gosub, TTM_UPDATE
Gosub, TTM_UPDATE
else if !WinActive("ahk_id " . TT_HWND)
else if !WinActive("ahk_id " . TT_HWND)
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", (x<9999999 ? x : xc & 0xFFFF)|(y<9999999 ? y : yc & 0xFFFF)<<16)
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", (x<9999999 ? x : xc & 0xFFFF)|(y<9999999 ? y : yc & 0xFFFF)<<16)
Return
Return
TTM_SETTIPBKCOLOR:
TTM_SETTIPBKCOLOR:
If B is alpha
If B is alpha
If (%b%)
If (%b%)
B:=%b%
B:=%b%
B := (StrLen(B) < 8 ? "0x" : "") . B
B := (StrLen(B) < 8 ? "0x" : "") . B
B := ((B&255)<<16)+(((B>>8)&255)<<8)+(B>>16) ; rgb -> bgr
B := ((B&255)<<16)+(((B>>8)&255)<<8)+(B>>16) ; rgb -> bgr
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", B, "Uint", 0)
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", B, "Uint", 0)
Return
Return
TTM_SETTIPTEXTCOLOR:
TTM_SETTIPTEXTCOLOR:
If F is alpha
If F is alpha
If (%F%)
If (%F%)
F:=%f%
F:=%f%
F := (StrLen(F) < 8 ? "0x" : "") . F
F := (StrLen(F) < 8 ? "0x" : "") . F
F := ((F&255)<<16)+(((F>>8)&255)<<8)+(F>>16) ; rgb -> bgr
F := ((F&255)<<16)+(((F>>8)&255)<<8)+(F>>16) ; rgb -> bgr
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint",F & 0xFFFFFF, "Uint", 0)
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint",F & 0xFFFFFF, "Uint", 0)
Return
Return
TTM_SETMARGIN:
TTM_SETMARGIN:
VarSetCapacity(RECT,16)
VarSetCapacity(RECT,16)
Loop,Parse,E,.
Loop,Parse,E,.
NumPut(A_LoopField,RECT,(A_Index-1)*4)
NumPut(A_LoopField,RECT,(A_Index-1)*4)
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", &RECT)
DllCall("SendMessage", "Uint", TT_HWND, "Uint", %A_ThisLabel%, "Uint", 0, "Uint", &RECT)
Return
Return
TT_SETTOOLINFO:
TT_SETTOOLINFO:
If A {
If A {
If A is not Xdigit
If A is not Xdigit
ControlGet,A,Hwnd,,%A%,ahk_id %P%
ControlGet,A,Hwnd,,%A%,ahk_id %P%
ID :=Abs(A)
ID :=Abs(A)
If !InStr(TT_ALL_%TT_ID%,Chr(2) . ID . Chr(2))
If !InStr(TT_ALL_%TT_ID%,Chr(2) . ID . Chr(2))
TT_ALL_%TT_ID% .= Chr(2) . ID . Chr(2) . ID+Abs(P) . Chr(2)
TT_ALL_%TT_ID% .= Chr(2) . ID . Chr(2) . ID+Abs(P) . Chr(2)
If !TOOLINFO_%ID%
If !TOOLINFO_%ID%
VarSetCapacity(TOOLINFO_%ID%, 40, 0),TOOLINFO_%ID%:=Chr(40)
VarSetCapacity(TOOLINFO_%ID%, 40, 0),TOOLINFO_%ID%:=Chr(40)
else
else
Gosub, TTM_DELTOOL
Gosub, TTM_DELTOOL
Numput((N ? 0 : 1)|(J ? 2 : 0)|(L ? 0x1000 : 0)|16,TOOLINFO_%ID%,4),Numput(P,TOOLINFO_%ID%,8),Numput(ID,TOOLINFO_%ID%,12)
Numput((N ? 0 : 1)|(J ? 2 : 0)|(L ? 0x1000 : 0)|16,TOOLINFO_%ID%,4),Numput(P,TOOLINFO_%ID%,8),Numput(ID,TOOLINFO_%ID%,12)
If (text!="")
If (text!="")
NumPut(&text,TOOLINFO_%ID%,36)
NumPut(&text,TOOLINFO_%ID%,36)
Gosub, TTM_ADDTOOL
Gosub, TTM_ADDTOOL
ID :=ID+Abs(P)
ID :=ID+Abs(P)
If !TOOLINFO_%ID%
If !TOOLINFO_%ID%
{
{
VarSetCapacity(TOOLINFO_%ID%, 40, 0),TOOLINFO_%ID%:=Chr(40)
VarSetCapacity(TOOLINFO_%ID%, 40, 0),TOOLINFO_%ID%:=Chr(40)
Numput(0|16,TOOLINFO_%ID%,4), Numput(P,TOOLINFO_%ID%,8), Numput(P,TOOLINFO_%ID%,12)
Numput(0|16,TOOLINFO_%ID%,4), Numput(P,TOOLINFO_%ID%,8), Numput(P,TOOLINFO_%ID%,12)
}
}
Gosub, TTM_ADDTOOL
Gosub, TTM_ADDTOOL
ID :=Abs(A)
ID :=Abs(A)
} else {
} else {
If !TOOLINFO_%ID%
If !TOOLINFO_%ID%
VarSetCapacity(TOOLINFO_%ID%, 40, 0),TOOLINFO_%ID%:=Chr(40)
VarSetCapacity(TOOLINFO_%ID%, 40, 0),TOOLINFO_%ID%:=Chr(40)
If (text!=""){
If (text!=""){
If InStr(text,"<a"){
If InStr(text,"<a"){
TOOLTEXT_%ID%:=text
TOOLTEXT_%ID%:=text
text:=RegExReplace(text,"<a\K[^<]*?>",">")
text:=RegExReplace(text,"<a\K[^<]*?>",">")
} else
} else
TOOLTEXT_%ID%:=
TOOLTEXT_%ID%:=
NumPut(&text,TOOLINFO_%ID%,36)
NumPut(&text,TOOLINFO_%ID%,36)
}
}
NumPut((J ? 2 : 0)|(!(x . y) ? 0 : 0x20)|(S ? 0x80 : 0)|(L ? 0x1000 : 0),TOOLINFO_%ID%,4), Numput(P,TOOLINFO_%ID%,8), Numput(P,TOOLINFO_%ID%,12)
NumPut((J ? 2 : 0)|(!(x . y) ? 0 : 0x20)|(S ? 0x80 : 0)|(L ? 0x1000 : 0),TOOLINFO_%ID%,4), Numput(P,TOOLINFO_%ID%,8), Numput(P,TOOLINFO_%ID%,12)
Gosub, TTM_ADDTOOL
Gosub, TTM_ADDTOOL
}
}
TOOLLINK%ID%:=L
TOOLLINK%ID%:=L
Return
Return
TTN_LINKCLICK:
TTN_LINKCLICK:
Loop 4
Loop 4
m += *(text + 8 + A_Index-1) << 8*(A_Index-1)
m += *(text + 8 + A_Index-1) << 8*(A_Index-1)
If !(TTN_FIRST-2=m or TTN_FIRST-3=m)
If !(TTN_FIRST-2=m or TTN_FIRST-3=m)
Return, OnMessage ? OnMessage(0x4e,OnMessage) : 0
Return, OnMessage ? OnMessage(0x4e,OnMessage) : 0
Loop 4
Loop 4
p += *(text + 0 + A_Index-1) << 8*(A_Index-1)
p += *(text + 0 + A_Index-1) << 8*(A_Index-1)
If (TTN_FIRST-3=m)
If (TTN_FIRST-3=m)
Loop 4
Loop 4
option += *(text + 16 + A_Index-1) << 8*(A_Index-1)
option += *(text + 16 + A_Index-1) << 8*(A_Index-1)
Loop,Parse,hWndArray,% Chr(2)
Loop,Parse,hWndArray,% Chr(2)
If (p=A_LoopField and i:=A_Index)
If (p=A_LoopField and i:=A_Index)
break
break
Loop,Parse,idArray,% Chr(2)
Loop,Parse,idArray,% Chr(2)
{
{
If (i=A_Index){
If (i=A_Index){
text:=TOOLTEXT_%A_LoopField%
text:=TOOLTEXT_%A_LoopField%
If (TTN_FIRST-2=m){
If (TTN_FIRST-2=m){
If Title
If Title
{
{
If IsLabel(A_LoopField . title . "Close")
If IsLabel(A_LoopField . title . "Close")
Gosub % A_LoopField . title . "Close"
Gosub % A_LoopField . title . "Close"
else If IsLabel(title . "Close")
else If IsLabel(title . "Close")
Gosub % title . "Close"
Gosub % title . "Close"
} else {
} else {
If IsLabel(A_LoopField . A_ThisFunc . "Close")
If IsLabel(A_LoopField . A_ThisFunc . "Close")
Gosub % A_LoopField . A_ThisFunc . "Close"
Gosub % A_LoopField . A_ThisFunc . "Close"
else If IsLabel(A_ThisFunc . "Close")
else If IsLabel(A_ThisFunc . "Close")
Gosub % A_ThisFunc . "Close"
Gosub % A_ThisFunc . "Close"
}
}
} else If (InStr(TOOLTEXT_%A_LoopField%,"<a")){
} else If (InStr(TOOLTEXT_%A_LoopField%,"<a")){
Loop % option+1
Loop % option+1
StringTrimLeft,text,text,% InStr(text,"<a")+1
StringTrimLeft,text,text,% InStr(text,"<a")+1
If TT_HIDE_%A_LoopField%
If TT_HIDE_%A_LoopField%
%A_ThisFunc%(A_LoopField,"","","gTTM_POP")
%A_ThisFunc%(A_LoopField,"","","gTTM_POP")
If ((a:=A_AutoTrim)="Off")
If ((a:=A_AutoTrim)="Off")
AutoTrim, On
AutoTrim, On
ErrorLevel:=SubStr(text,1,InStr(text,">")-1)
ErrorLevel:=SubStr(text,1,InStr(text,">")-1)
StringTrimLeft,text,text,% InStr(text,">")
StringTrimLeft,text,text,% InStr(text,">")
text:=SubStr(text,1,InStr(text,"</a>")-1)
text:=SubStr(text,1,InStr(text,"</a>")-1)
If !ErrorLevel
If !ErrorLevel
ErrorLevel:=text
ErrorLevel:=text
ErrorLevel=%ErrorLevel%
ErrorLevel=%ErrorLevel%
AutoTrim, %a%
AutoTrim, %a%
If Title
If Title
{
{
If IsFunc(f:=(A_LoopField . title))
If IsFunc(f:=(A_LoopField . title))
%f%(ErrorLevel)
%f%(ErrorLevel)
else if IsLabel(A_LoopField . title)
else if IsLabel(A_LoopField . title)
Gosub % A_LoopField . title
Gosub % A_LoopField . title
else if IsFunc(title)
else if IsFunc(title)
%title%(ErrorLevel)
%title%(ErrorLevel)
else If IsLabel(title)
else If IsLabel(title)
Gosub, %title%
Gosub, %title%
} else {
} else {
if IsFunc(f:=(A_LoopField . A_ThisFunc))
if IsFunc(f:=(A_LoopField . A_ThisFunc))
%f%(ErrorLevel)
%f%(ErrorLevel)
else If IsLabel(A_LoopField . A_ThisFunc)
else If IsLabel(A_LoopField . A_ThisFunc)
Gosub % A_LoopField . A_ThisFunc
Gosub % A_LoopField . A_ThisFunc
else If IsLabel(A_ThisFunc)
else If IsLabel(A_ThisFunc)
Gosub % A_ThisFunc
Gosub % A_ThisFunc
}
}
}
}
break
break
}
}
}
}
DetectHiddenWindows, %#_DetectHiddenWindows%
DetectHiddenWindows, %#_DetectHiddenWindows%
Return OnMessage ? OnMessage(0x4e,OnMessage) : 0
Return OnMessage ? OnMessage(0x4e,OnMessage) : 0
TT_DESTROY:
TT_DESTROY:
Loop, Parse, TT_ALL_%TT_ID%,% Chr(2)
Loop, Parse, TT_ALL_%TT_ID%,% Chr(2)
If A_LoopField
If A_LoopField
{
{
ID:=A_LoopField
ID:=A_LoopField
Gosub, TTM_DELTOOL
Gosub, TTM_DELTOOL
TOOLINFO_%A_LoopField%:="", TT_HWND_%A_LoopField%:="", TOOLTEXT_%A_LoopField%:="", TT_HIDE_%A_LoopField%:="",TOOLLINK%A_LoopField%:=""
TOOLINFO_%A_LoopField%:="", TT_HWND_%A_LoopField%:="", TOOLTEXT_%A_LoopField%:="", TT_HIDE_%A_LoopField%:="",TOOLLINK%A_LoopField%:=""
}
}
TT_ALL_%TT_ID%=
TT_ALL_%TT_ID%=
Return
Return
TTM_INIT:
TTM_INIT:
Init:=1
Init:=1
; Messages
; Messages
TTM_ACTIVATE := 0x400 + 1, TTM_ADDTOOL := A_IsUnicode ? 0x432 : 0x404, TTM_DELTOOL := A_IsUnicode ? 0x433 : 0x405
TTM_ACTIVATE := 0x400 + 1, TTM_ADDTOOL := A_IsUnicode ? 0x432 : 0x404, TTM_DELTOOL := A_IsUnicode ? 0x433 : 0x405
,TTM_POP := 0x41c, TTM_POPUP := 0x422, TTM_UPDATETIPTEXT := 0x400 + (A_IsUnicode ? 57 : 12)
,TTM_POP := 0x41c, TTM_POPUP := 0x422, TTM_UPDATETIPTEXT := 0x400 + (A_IsUnicode ? 57 : 12)
,TTM_UPDATE := 0x400 + 29, TTM_SETTOOLINFO := 0x409, TTM_SETTITLE := 0x400 + (A_IsUnicode ? 33 : 32)
,TTM_UPDATE := 0x400 + 29, TTM_SETTOOLINFO := 0x409, TTM_SETTITLE := 0x400 + (A_IsUnicode ? 33 : 32)
,TTN_FIRST := 0xfffffdf8, TTM_TRACKACTIVATE := 0x400 + 17, TTM_TRACKPOSITION := 0x400 + 18
,TTN_FIRST := 0xfffffdf8, TTM_TRACKACTIVATE := 0x400 + 17, TTM_TRACKPOSITION := 0x400 + 18
,TTM_SETMARGIN:=0x41a, TTM_SETWINDOWTHEME:=0x200b, TTM_SETMAXTIPWIDTH:=0x418,TTM_GETBUBBLESIZE:=0x41e
,TTM_SETMARGIN:=0x41a, TTM_SETWINDOWTHEME:=0x200b, TTM_SETMAXTIPWIDTH:=0x418,TTM_GETBUBBLESIZE:=0x41e
,TTM_SETTIPBKCOLOR:=0x413, TTM_SETTIPTEXTCOLOR:=0x414
,TTM_SETTIPBKCOLOR:=0x413, TTM_SETTIPTEXTCOLOR:=0x414
;Colors
;Colors
,Black:=0x000000, Green:=0x008000,Silver:=0xC0C0C0
,Black:=0x000000, Green:=0x008000,Silver:=0xC0C0C0
,Lime:=0x00FF00, Gray:=0x808080, Olive:=0x808000
,Lime:=0x00FF00, Gray:=0x808080, Olive:=0x808000
,White:=0xFFFFFF, Yellow:=0xFFFF00, Maroon:=0x800000
,White:=0xFFFFFF, Yellow:=0xFFFF00, Maroon:=0x800000
,Navy:=0x000080, Red:=0xFF0000, Blue:=0x0000FF
,Navy:=0x000080, Red:=0xFF0000, Blue:=0x0000FF
,Purple:=0x800080, Teal:=0x008080, Fuchsia:=0xFF00FF
,Purple:=0x800080, Teal:=0x008080, Fuchsia:=0xFF00FF
,Aqua:=0x00FFFF
,Aqua:=0x00FFFF
Return
Return
WM_SETFONT:
;set defaults
italic := 0, underline := 0, strikeout := 0, weight := 400
height := 10, fontFace := "MS Sans Serif"
;parse font
Loop,Parse,K,.
{
if (A_LoopField = "italic")
italic := 1
else if (A_LoopField = "underline")
underline := 1
else if (A_LoopField = "strikeout")
strikeout := 1
else if (A_LoopField = "bold")
weight := 700
else if (SubStr(A_LoopField, 1, 1) = "s") || (SubStr(A_LoopField, 1, 1) = "S")
height := SubStr(A_LoopField, 2)
else if (SubStr(A_LoopField, 1, 1) = "f") || (SubStr(A_LoopField, 1, 1) = "F")
fontFace := SubStr(A_LoopField, 2)
}
;scale height
RegRead, LogPixels, HKEY_LOCAL_MACHINE, SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontDPI, LogPixels
height := -DllCall("MulDiv", "int", Height, "int", LogPixels, "int", 72)
;create font
If hFont
DllCall("DeleteObject","uint", hfont)
hFont := DllCall("CreateFont", "int", height, "int", 0, "int", 0, "int", 0
,"int", weight, "Uint", italic, "Uint", underline
,"uint", strikeOut, "Uint", 0, "Uint", 0, "Uint", 0, "Uint", 0, "Uint", 0, "str", fontFace,"uint")
DllCall("SendMessage", "Uint", TT_HWND, "Uint", WM_SETFONT := 0x30, "Uint", hFont, "Uint", true)
return
}
}