-
Notifications
You must be signed in to change notification settings - Fork 72
/
Copy pathHtmDlg.ahk
231 lines (167 loc) · 9.49 KB
/
HtmDlg.ahk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
; _ _ _____ _
; HtmDlg() - HTML DialogBox v0.51 | | | |_ (____ \ | | v0.51
; | |__ | | |_ ____ _ \ \| | ____
; Suresh Kumar A N ([email protected]) | __)| | _)| \| | | | |/ _ |
; | | | | |__| | | | |__/ /| ( ( | |
; Created : 09-Jul-2010 |_| |_|\___)_|_|_|_____/ |_|\_|| |
; Last Mod : 13-Jul-2010 (_____|
;
; Usage : HtmDlg( URL, hwndOwner, Options, OptionsDelimiter )
; : For Options, please refer the bottom of this script
;
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HtmDlg( _URL="", _Owner=0, _Options="", _ODL="," ) {
; HTML DialogBox v0.50 - scripted by SKAN : www.autohotkey.com/forum/viewtopic.php?t=60215
static _Ins, _hDLG, _DlgT, _DlgP, _STRU, _pIWEB, _pV, BDef=1, BEsc=0
If ( A_EventInfo = 0xCBF ) { ; nested CallBackFunction
hWnd := _URL, uMsg := _Owner, wP := _Options, lP := _ODL
If ( uMsg=0x112 && wP=0xF060 ) ; WM_SYSCOMMAND && SC_ClOSE
Return DllCall( "EndDialog", UInt,_hDLG, UInt,BDEf := BEsc )
If ( uMsg=0x111 && (wP>>16)=0 ) ; WM_COMMAND && BN_CLICKED
Return DllCall( "EndDialog", UInt,_hDLG, UInt,BDef := (wP=2) ? BEsc : wP-100 )
Return False
}
If ! ( _Ins ) {
_Ins := DllCall( "GetModuleHandle", Str,A_AhkPath )
_DT=
( Ltrim Join
61160CD3AFCDD0118A3EGC04FC9E26EZPCHC88OAZO8G4DG53G2H53G68G65G6CG6CG2H44G6CG67Q58ZHDG741
G74G6CG41G78G57G69G6EK7BG38G38G35G36G46G39G36G31G2DG33G34G3H41G2DG31G31G44G3H2DG41G39G3
6G42G2DG3H3H43G3H34G46G44G37G3H35G41G32G7DT14NFBFFQ65GFFFF8Y14NFBFFQ66GFFFF8Y14NFBFFQ67
GFFFF8Y14NFBFFQ68GFFFF8Y14NFBFFQ69GFFFF8Y14NFBFFQ6AGFFFF8Y14NFBFFQ6BGFFFF8Y14NFBFFQ6CGF
FFF8Y14NFBFFQ6DGFFFF8T
)
Loop 20 ; Decompressing Nulls : www.autohotkey.com/forum/viewtopic.php?p=198560#198560
StringReplace,_DT,_DT,% Chr(70+21-A_Index),% SubStr("000000000000000000000",A_Index),All
VarSetCapacity( _STRU, ( _DTLEN := StrLen(_DT) // 2 ) + 256, 0 )
Loop %_DTLEN% ; Creating Binary Structure from Hex
NumPut( "0x" . SubStr(_DT, 2*A_Index-1,2),_STRU,A_Index-1,"Char" )
_pIWEB := &_STRU, _pV := &_STRU+16, _DlgT := &_STRU+32
If ! DllCall( "GetModuleHandle", Str,"atl.dll" )
DllCall( "LoadLibrary", Str,"atl.dll" )
DllCall( "atl\AtlAxWinInit" )
_DlgP := RegisterCallback( A_ThisFunc,0,4,0xCBF )
}
_hDLG := DllCall( "CreateDialogIndirectParam", UInt,_Ins, UInt,_DlgT, UInt, ( _Owner="" )
? DllCall("FindWindowA", Str,"AutoHotkey", Str,A_ScriptFullPath " - AutoHotkey v"
. A_AhkVersion ) : _Owner, UInt,_DlgP, UInt,0 )
VarSetCapacity( _WU,StrLen(_URL)*2+2 ), sLen := StrLen(_URL)+1
DllCall( "MultiByteToWideChar", UInt,0, UInt,0, UInt,&_URL, Int,-1, UInt,&_WU, Int,sLen )
_hHTM := DllCall( "GetDlgItem", UInt,_hDLG, UInt,2000, UInt )
; www.autohotkey.com/forum/viewtopic.php?p=103987#103987 WebBrowser Control Demo by Sean
; ---------------------------------------------------------------------------------------
DllCall( "atl\AtlAxGetControl", UInt,_hHTM, UIntP,_ppunk )
DllCall( NumGet( NumGet( _ppunk+0 )+4*0 ), UInt,_ppunk, UInt,_pIWEB, UIntP,_ppwb )
DllCall( NumGet( NumGet( _ppunk+0 )+4*2 ), UInt,_ppunk ), _pwb := NumGet( _ppwb+0 )
DllCall( NumGet(_pwb+4*11),UInt,_ppwb, UInt,&_WU, UInt,_pV,UInt,_pV,UInt,_pV,UInt,_pV )
; ---------------------------------------------------------------------------------------
Slee:=-1, HtmD:=1
Butt:="OK", BWid:=75, BHei:=23, BSpH:=5, BSpV:=8, BAli:=1
DlgX:="", DlgY:="", HtmW:=280, HtmH:=140, Left:=5, TopM:=5
Loop, Parse, _Options, =%_ODL%, %A_Space%
A_Index & 1 ? ( __ := (SubStr(A_LoopField,1,1)="_") ? "_" : SubStr(A_LoopField,1,4))
: ( %__% := A_LoopField )
If ( HtmD )
DllCall( "MoveWindow", UInt,_hHTM, UInt,0, UInt,0, UInt,HtmW, UInt,HtmH, Int,1 )
Else {
DllCall( "MoveWindow", UInt,_hHTM, UInt,Left, UInt,TopM, UInt,HtmW, UInt,HtmH, Int,1 )
Control, Enable,,, ahk_id %_hHTM%
}
Cap := DllCall( "GetSystemMetrics", UInt,4 ) ; SM_CYCAPTION = Window Caption
Frm := DllCall( "GetSystemMetrics", UInt,7 ) ; SM_CXFIXEDFRAME = Window Frame
SBW := DllCall( "GetSystemMetrics", UInt,2 ) ; SM_CXVSCROLL = VScrollbar Width
DlgW := Frm + HtmW + Frm + ( HtmD ? 0-SBW : Left+Left )
DlgH := Cap + Frm + HtmH + BSpV + BHei + BSpV + Frm + ( HtmD ? 0 : TopM )
DlgX := ( DlgX <> "" ) ? DlgX : ( A_ScreenWidth - DlgW ) // 2
DlgY := ( DlgY <> "" ) ? DlgY : ( A_ScreenHeight - DlgH ) // 2
ClAW := DlgW - Frm - Frm ; ClientArea Width
DllCall( "MoveWindow", UInt,_hDLG, UInt,DlgX, UInt,DlgY, UInt,DlgW, UInt,DlgH, Int,1 )
StringReplace, Butt,Butt, /,/, UseErrorLevel
bCount := ErrorLevel+1
If BAli = 0
BX := ( BSpH * 2 ) + ( HtmD ? 0 : Left )
Else If BAli = 1
BX := ( ClAW - (BSpH*(bCount-1)) - (BWid*bCount) ) / 2
Else
BX := ClAW - (BSpH*(bCount+1)) - (BWid*bCount) - ( HtmD ? 0 : Left )
BY := HtmH + BSpV + ( HtmD ? 0 : TopM )
Loop, Parse, Butt, /
{
BHwnd := DllCall( "GetDlgItem", UInt,_hDLG, UInt,100+A_Index )
DllCall( "MoveWindow", UInt,BHwnd, UInt,BX, UInt,BY, UInt,BWid, UInt,BHei, Int,1 )
DllCall( "SetWindowTextA", UInt,BHwnd, Str,A_LoopField ), BX := BX+BSpH+BWid
DllCall( "ShowWindow", UInt,BHwnd, Int,True )
}
BDef := ( BDef<1 || BDef>bCount ) ? 1 : BDef
DllCall( "SendMessageA", UInt,_hDLG, UInt,0x401, UInt,100+BDef, UInt,0 ) ; DM_SETDEFID
ControlFocus,, % "ahk_id " DllCall( "GetDlgItem", UInt,_hDLG, UInt,100+BDef )
DllCall( "SetWindowTextA", UInt,_hDLG, Str,Titl ? Titl : A_ScriptName )
Sleep, %Slee%
WinShow, ahk_id %_hDLG%
WinWaitClose, ahk_id %_hDLG%,, %Time%
If ( TimedOut := Errorlevel ) {
DllCall( "EndDialog", UInt,_hDLG, UInt,0 )
}
If ( AltR=1 && BDef ) {
StringSplit, B, Butt, /
BDef := B%BDef%
}
DllCall( NumGet(_pwb+4*2), UInt,_ppwb ), DllCall( "SetLastError", UInt,TimedOut ? 1 : 0 )
Return BDEf
}
/*
/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>- - - - - - - - - - - - - - - - - - - - - - - - - O P T I O N S -
\- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Usage: HtmDlg( URL, hwndOwner, Options, OptionsDelimiter )
Parameters :
URL - A valid URL supported by Internet Explorer including Res:// and File://
hWndOwner - Handle to the parent window. If invalid handle or 0 ( zero ) is passed,
the dialog will have a taskbar button. Passing "" as a parameter will
definitely supress the Taskbar Button.
Options - A series of 'variable overrides' delimited with character specified in
Options delimiter. Please refer 'VARIABLE OVERRIDES' below.
OptionsDelimiter - The delimiter used in seperating 'variable overrides'
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; * * * V A R I A B L E O V E R R I D E S * * *
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Important Note: leading 4 characters of a variable will be sufficient.
for eg., Instead of 'AltReturn=1' you may use 'AltR=1'
Title = Captionbar Text
Default is A_ScriptName
DlgXpos = X coordinate in pixels, relative to screen
Dialog is horizontally centered by default
DlgYpos = Y coordinate in pixels, relative to screen
Dialog is vertically centered by default
AltReturn = 1 will return Button-text
0 is default and Button Instance will be returned
TimeOut = Seconds
No Default value
Note: A_LastError will be true when a TimeOut occurs
Sleep = MilliSeconds ( Will be used just before Dialog is shown )
No Sleep by Default
LeftMargin = Spacing in Pixels ( on the left/right sides of Htm Control )
Default value is 5. Ignored if Htm control is disabled. See: HtmDisable
TopMargin = Spacing in Pixels ( above the Htm Control )
Default value is 5. Ignored if Htm control is disabled. See: HtmDisable
HtmDisable = 0 to enable
Htm Control is disabled by default.
HtmWidth = Width of WebControl in Pixels
Default value is 240
HtmHeight = Height of WebControl in pixels
Default value is 140
Buttons = Button labels seperated with "/" ( eg: Buttons=Yes/No/Cancel )
Default is "OK"
BDefault = Instance of Default Button ( eg: To make 3rd Button default, use BDef=3 )
Default forced value is 1
BEscape = Instance of Cancel Button ( Used when dialog is closed or Esc is pressed )
Default is 0
BWidth = Button Width in Pixels
Default Value is 75
BHeight = Button height Pixels
Default value is 23
BSpHorizontal = Pixels ( affects the spacing on the sides of a button )
BSpVertical = Pixels ( affects the spacing above/below a button )
BAlign = 0 or 1 or 2 ( for Left, Center, Right alignment of Buttons )
Default is 1
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -