fzeet 0.6.3 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -16,6 +16,7 @@ module Fzeet
16
16
 
17
17
  module_function :InitializeOle
18
18
 
19
+ attach_function :CoTaskMemAlloc, [:ulong], :pointer
19
20
  attach_function :CoTaskMemFree, [:pointer], :void
20
21
 
21
22
  VT_EMPTY = 0
@@ -281,5 +282,191 @@ module Fzeet
281
282
  end
282
283
 
283
284
  attach_function :PropVariantClear, [:pointer], :long
285
+
286
+ ffi_lib 'oleaut32'
287
+ ffi_convention :stdcall
288
+
289
+ attach_function :SysAllocString, [:buffer_in], :pointer
290
+ attach_function :SysFreeString, [:pointer], :void
291
+ attach_function :SysStringLen, [:pointer], :uint
292
+
293
+ OLEIVERB_PRIMARY = 0
294
+ OLEIVERB_SHOW = -1
295
+ OLEIVERB_OPEN = -2
296
+ OLEIVERB_HIDE = -3
297
+ OLEIVERB_UIACTIVATE = -4
298
+ OLEIVERB_INPLACEACTIVATE = -5
299
+ OLEIVERB_DISCARDUNDOSTATE = -6
300
+
301
+ IOleWindow = COM::Interface[IUnknown,
302
+ GUID['00000114-0000-0000-C000-000000000046'],
303
+
304
+ GetWindow: [[:pointer], :long],
305
+ ContextSensitiveHelp: [[:int], :long]
306
+ ]
307
+
308
+ OleWindow = COM::Instance[IOleWindow]
309
+
310
+ IOleInPlaceObject = COM::Interface[IOleWindow,
311
+ GUID['00000113-0000-0000-C000-000000000046'],
312
+
313
+ InPlaceDeactivate: [[], :long],
314
+ UIDeactivate: [[], :long],
315
+ SetObjectRects: [[:pointer, :pointer], :long],
316
+ ReactivateAndUndo: [[], :long]
317
+ ]
318
+
319
+ OleInPlaceObject = COM::Instance[IOleInPlaceObject]
320
+
321
+ IOleInPlaceSite = COM::Interface[IOleWindow,
322
+ GUID['00000119-0000-0000-C000-000000000046'],
323
+
324
+ CanInPlaceActivate: [[], :long],
325
+ OnInPlaceActivate: [[], :long],
326
+ OnUIActivate: [[], :long],
327
+ GetWindowContext: [[:pointer, :pointer, :pointer, :pointer, :pointer], :long],
328
+ Scroll: [[:long_long], :long],
329
+ OnUIDeactivate: [[:int], :long],
330
+ OnInPlaceDeactivate: [[], :long],
331
+ DiscardUndoState: [[], :long],
332
+ DeactivateAndUndo: [[], :long],
333
+ OnPosRectChange: [[:pointer], :long]
334
+ ]
335
+
336
+ OleInPlaceSite = COM::Callback[IOleInPlaceSite]
337
+
338
+ IOleClientSite = COM::Interface[IUnknown,
339
+ GUID['00000118-0000-0000-C000-000000000046'],
340
+
341
+ SaveObject: [[], :long],
342
+ GetMoniker: [[:ulong, :ulong, :pointer], :long],
343
+ GetContainer: [[:pointer], :long],
344
+ ShowObject: [[], :long],
345
+ OnShowWindow: [[:int], :long],
346
+ RequestNewObjectLayout: [[], :long]
347
+ ]
348
+
349
+ OleClientSite = COM::Callback[IOleClientSite]
350
+
351
+ OLEGETMONIKER_ONLYIFTHERE = 1
352
+ OLEGETMONIKER_FORCEASSIGN = 2
353
+ OLEGETMONIKER_UNASSIGN = 3
354
+ OLEGETMONIKER_TEMPFORUSER = 4
355
+
356
+ OLEWHICHMK_CONTAINER = 1
357
+ OLEWHICHMK_OBJREL = 2
358
+ OLEWHICHMK_OBJFULL = 3
359
+
360
+ USERCLASSTYPE_FULL = 1
361
+ USERCLASSTYPE_SHORT = 2
362
+ USERCLASSTYPE_APPNAME = 3
363
+
364
+ OLEMISC_RECOMPOSEONRESIZE = 0x00000001
365
+ OLEMISC_ONLYICONIC = 0x00000002
366
+ OLEMISC_INSERTNOTREPLACE = 0x00000004
367
+ OLEMISC_STATIC = 0x00000008
368
+ OLEMISC_CANTLINKINSIDE = 0x00000010
369
+ OLEMISC_CANLINKBYOLE1 = 0x00000020
370
+ OLEMISC_ISLINKOBJECT = 0x00000040
371
+ OLEMISC_INSIDEOUT = 0x00000080
372
+ OLEMISC_ACTIVATEWHENVISIBLE = 0x00000100
373
+ OLEMISC_RENDERINGISDEVICEINDEPENDENT = 0x00000200
374
+ OLEMISC_INVISIBLEATRUNTIME = 0x00000400
375
+ OLEMISC_ALWAYSRUN = 0x00000800
376
+ OLEMISC_ACTSLIKEBUTTON = 0x00001000
377
+ OLEMISC_ACTSLIKELABEL = 0x00002000
378
+ OLEMISC_NOUIACTIVATE = 0x00004000
379
+ OLEMISC_ALIGNABLE = 0x00008000
380
+ OLEMISC_SIMPLEFRAME = 0x00010000
381
+ OLEMISC_SETCLIENTSITEFIRST = 0x00020000
382
+ OLEMISC_IMEMODE = 0x00040000
383
+ OLEMISC_IGNOREACTIVATEWHENVISIBLE = 0x00080000
384
+ OLEMISC_WANTSTOMENUMERGE = 0x00100000
385
+ OLEMISC_SUPPORTSMULTILEVELUNDO = 0x00200000
386
+
387
+ OLECLOSE_SAVEIFDIRTY = 0
388
+ OLECLOSE_NOSAVE = 1
389
+ OLECLOSE_PROMPTSAVE = 2
390
+
391
+ IOleObject = COM::Interface[IUnknown,
392
+ GUID['00000112-0000-0000-C000-000000000046'],
393
+
394
+ SetClientSite: [[:pointer], :long],
395
+ GetClientSite: [[:pointer], :long],
396
+ SetHostNames: [[:pointer, :pointer], :long],
397
+ Close: [[:ulong], :long],
398
+ SetMoniker: [[:ulong, :pointer], :long],
399
+ GetMoniker: [[:ulong, :ulong, :pointer], :long],
400
+ InitFromData: [[:pointer, :int, :ulong], :long],
401
+ GetClipboardData: [[:ulong, :pointer], :long],
402
+ DoVerb: [[:long, :pointer, :pointer, :long, :pointer, :pointer], :long],
403
+ EnumVerbs: [[:pointer], :long],
404
+ Update: [[], :long],
405
+ IsUpToDate: [[], :long],
406
+ GetUserClassID: [[:pointer], :long],
407
+ GetUserType: [[:ulong, :pointer], :long],
408
+ SetExtent: [[:ulong, :pointer], :long],
409
+ GetExtent: [[:ulong, :pointer], :long],
410
+ Advise: [[:pointer, :pointer], :long],
411
+ Unadvise: [[:ulong], :long],
412
+ EnumAdvise: [[:pointer], :long],
413
+ GetMiscStatus: [[:ulong, :pointer], :long],
414
+ SetColorScheme: [[:pointer], :long]
415
+ ]
416
+
417
+ OleObject = COM::Instance[IOleObject]
418
+
419
+ class PARAMDATA < FFI::Struct
420
+ layout \
421
+ :szName, :pointer,
422
+ :vt, :ushort
423
+ end
424
+
425
+ CC_FASTCALL = 0
426
+ CC_CDECL = 1
427
+ CC_MSCPASCAL = CC_CDECL + 1
428
+ CC_PASCAL = CC_MSCPASCAL
429
+ CC_MACPASCAL = CC_PASCAL + 1
430
+ CC_STDCALL = CC_MACPASCAL + 1
431
+ CC_FPFASTCALL = CC_STDCALL + 1
432
+ CC_SYSCALL = CC_FPFASTCALL + 1
433
+ CC_MPWCDECL = CC_SYSCALL + 1
434
+ CC_MPWPASCAL = CC_MPWCDECL + 1
435
+ CC_MAX = CC_MPWPASCAL + 1
436
+
437
+ DISPATCH_METHOD = 0x1
438
+ DISPATCH_PROPERTYGET = 0x2
439
+ DISPATCH_PROPERTYPUT = 0x4
440
+ DISPATCH_PROPERTYPUTREF = 0x8
441
+
442
+ class METHODDATA < FFI::Struct
443
+ layout \
444
+ :szName, :pointer,
445
+ :ppdata, :pointer,
446
+ :dispid, :long,
447
+ :iMeth, :uint,
448
+ :cc, :uint,
449
+ :cArgs, :uint,
450
+ :wFlags, :ushort,
451
+ :vtReturn, :ushort
452
+ end
453
+
454
+ class INTERFACEDATA < FFI::Struct
455
+ layout \
456
+ :pmethdata, :pointer,
457
+ :cMembers, :uint
458
+ end
459
+
460
+ attach_function :CreateDispTypeInfo, [:pointer, :ulong, :pointer], :long
461
+
462
+ class DISPPARAMS < FFI::Struct
463
+ layout \
464
+ :rgvarg, :pointer,
465
+ :rgdispidNamedArgs, :pointer,
466
+ :cArgs, :uint,
467
+ :cNamedArgs, :uint
468
+ end
469
+
470
+ attach_function :DispInvoke, [:pointer, :pointer, :long, :ushort, :pointer, :pointer, :pointer, :pointer], :long
284
471
  end
285
472
  end
@@ -0,0 +1,171 @@
1
+ require_relative 'com'
2
+
3
+ module Fzeet
4
+ module Windows
5
+ ffi_lib 'shdocvw'
6
+ ffi_convention :stdcall
7
+
8
+ NavOpenInNewWindow = 0x0001
9
+ NavNoHistory = 0x0002
10
+ NavNoReadFromCache = 0x0004
11
+ NavNoWriteToCache = 0x0008
12
+ NavAllowAutosearch = 0x0010
13
+ NavBrowserBar = 0x0020
14
+ NavHyperlink = 0x0040
15
+ NavEnforceRestricted = 0x0080
16
+ NavNewWindowsManaged = 0x0100
17
+ NavUntrustedForDownload = 0x0200
18
+ NavTrustedForActiveX = 0x0400
19
+ NavOpenInNewTab = 0x0800
20
+ NavOpenInBackgroundTab = 0x1000
21
+ NavKeepWordWheelText = 0x2000
22
+ NavVirtualTab = 0x4000
23
+ NavBlockRedirectsXDomain = 0x8000
24
+ NavOpenNewForegroundTab = 0x10000
25
+
26
+ REFRESH_NORMAL = 0
27
+ REFRESH_IFEXPIRED = 1
28
+ REFRESH_COMPLETELY = 3
29
+
30
+ IWebBrowser = COM::Interface[IDispatch,
31
+ GUID['EAB22AC1-30C1-11CF-A7EB-0000C05BAE0B'],
32
+
33
+ GoBack: [[], :long],
34
+ GoForward: [[], :long],
35
+ GoHome: [[], :long],
36
+ GoSearch: [[], :long],
37
+ Navigate: [[:pointer, :pointer, :pointer, :pointer, :pointer], :long],
38
+ Refresh: [[], :long],
39
+ Refresh2: [[:pointer], :long],
40
+ Stop: [[], :long],
41
+ get_Application: [[:pointer], :long],
42
+ get_Parent: [[:pointer], :long],
43
+ get_Container: [[:pointer], :long],
44
+ get_Document: [[:pointer], :long],
45
+ get_TopLevelContainer: [[:pointer], :long],
46
+ get_Type: [[:pointer], :long],
47
+ get_Left: [[:pointer], :long],
48
+ put_Left: [[:long], :long],
49
+ get_Top: [[:pointer], :long],
50
+ put_Top: [[:long], :long],
51
+ get_Width: [[:pointer], :long],
52
+ put_Width: [[:long], :long],
53
+ get_Height: [[:pointer], :long],
54
+ put_Height: [[:long], :long],
55
+ get_LocationName: [[:pointer], :long],
56
+ get_LocationURL: [[:pointer], :long],
57
+ get_Busy: [[:pointer], :long]
58
+ ]
59
+
60
+ WebBrowser = COM::Factory[IWebBrowser, GUID['EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B']]
61
+
62
+ DWebBrowserEvents = COM::Interface[IDispatch,
63
+ GUID['EAB22AC2-30C1-11CF-A7EB-0000C05BAE0B'],
64
+
65
+ BeforeNavigate: [[:pointer, :long, :pointer, :pointer, :pointer, :pointer], :long],
66
+ NavigateComplete: [[:pointer], :long],
67
+ StatusTextChange: [[:pointer], :long],
68
+ ProgressChange: [[:long, :long], :long],
69
+ DownloadComplete: [[], :long],
70
+ CommandStateChange: [[:long, :short], :long],
71
+ DownloadBegin: [[], :long],
72
+ NewWindow: [[:pointer, :long, :pointer, :pointer, :pointer, :pointer], :long],
73
+ TitleChange: [[:pointer], :long],
74
+ FrameBeforeNavigate: [[:pointer, :long, :pointer, :pointer, :pointer, :pointer], :long],
75
+ FrameNavigateComplete: [[:pointer], :long],
76
+ FrameNewWindow: [[:pointer, :long, :pointer, :pointer, :pointer, :pointer], :long],
77
+ Quit: [[:pointer], :long],
78
+ WindowMove: [[], :long],
79
+ WindowResize: [[], :long],
80
+ WindowActivate: [[], :long],
81
+ PropertyChange: [[:pointer], :long]
82
+ ]
83
+
84
+ WebBrowserEvents = COM::Callback[DWebBrowserEvents]
85
+
86
+ class DOCHOSTUIINFO < FFI::Struct
87
+ layout \
88
+ :cbSize, :ulong,
89
+ :dwFlags, :ulong,
90
+ :dwDoubleClick, :ulong,
91
+ :pchHostCss, :pointer,
92
+ :pchHostNS, :pointer
93
+ end
94
+
95
+ IDocHostUIHandler = COM::Interface[IUnknown,
96
+ GUID['bd3f23c0-d43e-11cf-893b-00aa00bdce1a'],
97
+
98
+ ShowContextMenu: [[:ulong, :pointer, :pointer, :pointer], :long],
99
+ GetHostInfo: [[:pointer], :long],
100
+ ShowUI: [[:ulong, :pointer, :pointer, :pointer, :pointer], :long],
101
+ HideUI: [[], :long],
102
+ UpdateUI: [[], :long],
103
+ EnableModeless: [[:int], :long],
104
+ OnDocWindowActivate: [[:int], :long],
105
+ OnFrameWindowActivate: [[:int], :long],
106
+ ResizeBorder: [[:pointer, :pointer, :int], :long],
107
+ TranslateAccelerator: [[:pointer, :pointer, :ulong], :long],
108
+ GetOptionKeyPath: [[:pointer, :ulong], :long],
109
+ GetDropTarget: [[:pointer, :pointer], :long],
110
+ GetExternal: [[:pointer], :long],
111
+ TranslateUrl: [[:ulong, :pointer, :pointer], :long],
112
+ FilterDataObject: [[:pointer, :pointer], :long]
113
+ ]
114
+
115
+ DocHostUIHandler = COM::Callback[IDocHostUIHandler]
116
+
117
+ #~ IWebBrowserApp = COM::Interface[IWebBrowser,
118
+ #~ GUID['0002DF05-0000-0000-C000-000000000046'],
119
+
120
+ #~ ClientToWindow: [[:pointer, :pointer], :long],
121
+ #~ PutProperty: [[:pointer, PROPVARIANT], :long],
122
+ #~ GetProperty: [[:pointer, :pointer], :long],
123
+ #~ get_Name: [[:pointer], :long],
124
+ #~ get_HWND: [[:pointer], :long],
125
+ #~ get_FullName: [[:pointer], :long],
126
+ #~ get_Path: [[:pointer], :long],
127
+ #~ get_Visible: [[:pointer], :long],
128
+ #~ put_Visible: [[:short], :long],
129
+ #~ get_StatusBar: [[:pointer], :long],
130
+ #~ put_StatusBar: [[:short], :long],
131
+ #~ get_StatusText: [[:pointer], :long],
132
+ #~ put_StatusText: [[:pointer], :long],
133
+ #~ get_ToolBar: [[:pointer], :long],
134
+ #~ put_ToolBar: [[:int], :long],
135
+ #~ get_MenuBar: [[:pointer], :long],
136
+ #~ put_MenuBar: [[:short], :long],
137
+ #~ get_FullScreen: [[:pointer], :long],
138
+ #~ put_FullScreen: [[:short], :long]
139
+ #~ ]
140
+
141
+ #~ IWebBrowser2 = COM::Interface[IWebBrowserApp,
142
+ #~ GUID['D30C1661-CDAF-11d0-8A3E-00C04FC9E26E'],
143
+
144
+ #~ Quit: [[], :long],
145
+
146
+ #~ HRESULT Navigate2([in] VARIANT * URL,
147
+ #~ HRESULT QueryStatusWB([in] OLECMDID cmdID, [out, retval] OLECMDF * pcmdf);
148
+ #~ HRESULT ExecWB([in] OLECMDID cmdID, [in] OLECMDEXECOPT cmdexecopt, [in, optional, unique] VARIANT * pvaIn, [in, out, optional, unique] VARIANT * pvaOut);
149
+ #~ HRESULT ShowBrowserBar( [in] VARIANT * pvaClsid,
150
+ #~ [in, optional, unique] VARIANT * pvarShow,
151
+ #~ [in, optional, unique] VARIANT * pvarSize );
152
+ #~ HRESULT ReadyState([retval, out] READYSTATE * plReadyState);
153
+ #~ HRESULT Offline([out, retval] VARIANT_BOOL * pbOffline);
154
+ #~ HRESULT Offline([in] VARIANT_BOOL bOffline);
155
+ #~ HRESULT Silent([out, retval] VARIANT_BOOL * pbSilent);
156
+ #~ HRESULT Silent([in] VARIANT_BOOL bSilent);
157
+ #~ HRESULT RegisterAsBrowser([out, retval] VARIANT_BOOL * pbRegister);
158
+ #~ HRESULT RegisterAsBrowser([in] VARIANT_BOOL bRegister);
159
+ #~ HRESULT RegisterAsDropTarget([out, retval] VARIANT_BOOL * pbRegister);
160
+ #~ HRESULT RegisterAsDropTarget([in] VARIANT_BOOL bRegister);
161
+ #~ HRESULT TheaterMode([out, retval] VARIANT_BOOL * pbRegister);
162
+ #~ HRESULT TheaterMode([in] VARIANT_BOOL bRegister);
163
+ #~ HRESULT AddressBar([out, retval] VARIANT_BOOL * Value);
164
+ #~ HRESULT AddressBar([in] VARIANT_BOOL Value);
165
+ #~ HRESULT Resizable([out, retval] VARIANT_BOOL * Value);
166
+ #~ HRESULT Resizable([in] VARIANT_BOOL Value);
167
+ #~ ]
168
+
169
+ #~ WebBrowser = COM::Factory[IWebBrowser, GUID['8856F961-340A-11D0-A96B-00C04FD705A2']]
170
+ end
171
+ end
@@ -0,0 +1,102 @@
1
+ require_relative 'com'
2
+
3
+ module Fzeet
4
+ module Windows
5
+ ffi_lib 'shdocvw'
6
+ ffi_convention :stdcall
7
+
8
+ DISPID_BEFORENAVIGATE = 100
9
+ DISPID_NAVIGATECOMPLETE = 101
10
+ DISPID_STATUSTEXTCHANGE = 102
11
+ DISPID_QUIT = 103
12
+ DISPID_DOWNLOADCOMPLETE = 104
13
+ DISPID_COMMANDSTATECHANGE = 105
14
+ DISPID_DOWNLOADBEGIN = 106
15
+ DISPID_NEWWINDOW = 107
16
+ DISPID_PROGRESSCHANGE = 108
17
+ DISPID_WINDOWMOVE = 109
18
+ DISPID_WINDOWRESIZE = 110
19
+ DISPID_WINDOWACTIVATE = 111
20
+ DISPID_PROPERTYCHANGE = 112
21
+ DISPID_TITLECHANGE = 113
22
+ DISPID_TITLEICONCHANGE = 114
23
+
24
+ DWebBrowserEvents = COM::Interface[IDispatch,
25
+ GUID['EAB22AC2-30C1-11CF-A7EB-0000C05BAE0B'],
26
+
27
+ BeforeNavigate: [[:pointer, :long, :pointer, :pointer, :pointer, :pointer], :void],
28
+ NavigateComplete: [[:pointer], :void],
29
+ StatusTextChange: [[:pointer], :void],
30
+ ProgressChange: [[:long, :long], :void],
31
+ DownloadComplete: [[], :void],
32
+ CommandStateChange: [[:long, :short], :void],
33
+ DownloadBegin: [[], :void],
34
+ NewWindow: [[:pointer, :long, :pointer, :pointer, :pointer, :pointer], :void],
35
+ TitleChange: [[:pointer], :void],
36
+ FrameBeforeNavigate: [[:pointer, :long, :pointer, :pointer, :pointer, :pointer], :void],
37
+ FrameNavigateComplete: [[:pointer], :void],
38
+ FrameNewWindow: [[:pointer, :long, :pointer, :pointer, :pointer, :pointer], :void],
39
+ Quit: [[:pointer], :void],
40
+ WindowMove: [[], :void],
41
+ WindowResize: [[], :void],
42
+ WindowActivate: [[], :void],
43
+ PropertyChange: [[:pointer], :void]
44
+ ]
45
+
46
+ WebBrowserEvents = COM::Callback[DWebBrowserEvents]
47
+
48
+ NavOpenInNewWindow = 0x0001
49
+ NavNoHistory = 0x0002
50
+ NavNoReadFromCache = 0x0004
51
+ NavNoWriteToCache = 0x0008
52
+ NavAllowAutosearch = 0x0010
53
+ NavBrowserBar = 0x0020
54
+ NavHyperlink = 0x0040
55
+ NavEnforceRestricted = 0x0080
56
+ NavNewWindowsManaged = 0x0100
57
+ NavUntrustedForDownload = 0x0200
58
+ NavTrustedForActiveX = 0x0400
59
+ NavOpenInNewTab = 0x0800
60
+ NavOpenInBackgroundTab = 0x1000
61
+ NavKeepWordWheelText = 0x2000
62
+ NavVirtualTab = 0x4000
63
+ NavBlockRedirectsXDomain = 0x8000
64
+ NavOpenNewForegroundTab = 0x10000
65
+
66
+ REFRESH_NORMAL = 0
67
+ REFRESH_IFEXPIRED = 1
68
+ REFRESH_COMPLETELY = 3
69
+
70
+ IWebBrowser = COM::Interface[IDispatch,
71
+ GUID['EAB22AC1-30C1-11CF-A7EB-0000C05BAE0B'],
72
+
73
+ GoBack: [[], :long],
74
+ GoForward: [[], :long],
75
+ GoHome: [[], :long],
76
+ GoSearch: [[], :long],
77
+ Navigate: [[:pointer, :pointer, :pointer, :pointer, :pointer], :long],
78
+ Refresh: [[], :long],
79
+ Refresh2: [[:pointer], :long],
80
+ Stop: [[], :long],
81
+ get_Application: [[:pointer], :long],
82
+ get_Parent: [[:pointer], :long],
83
+ get_Container: [[:pointer], :long],
84
+ get_Document: [[:pointer], :long],
85
+ get_TopLevelContainer: [[:pointer], :long],
86
+ get_Type: [[:pointer], :long],
87
+ get_Left: [[:pointer], :long],
88
+ put_Left: [[:long], :long],
89
+ get_Top: [[:pointer], :long],
90
+ put_Top: [[:long], :long],
91
+ get_Width: [[:pointer], :long],
92
+ put_Width: [[:long], :long],
93
+ get_Height: [[:pointer], :long],
94
+ put_Height: [[:long], :long],
95
+ get_LocationName: [[:pointer], :long],
96
+ get_LocationURL: [[:pointer], :long],
97
+ get_Busy: [[:pointer], :long]
98
+ ]
99
+
100
+ WebBrowser = COM::Factory[IWebBrowser, GUID['EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B']]
101
+ end
102
+ end
@@ -108,5 +108,186 @@ module Fzeet
108
108
  ]
109
109
 
110
110
  ModalWindow = COM::Instance[IModalWindow]
111
+
112
+ IExplorerBrowserEvents = COM::Interface[IUnknown,
113
+ GUID['361bbdc7-e6ee-4e13-be58-58e2240c810f'],
114
+
115
+ OnNavigationPending: [[:pointer], :long],
116
+ OnViewCreated: [[:pointer], :long],
117
+ OnNavigationComplete: [[:pointer], :long],
118
+ OnNavigationFailed: [[:pointer], :long]
119
+ ]
120
+
121
+ ExplorerBrowserEvents = COM::Callback[IExplorerBrowserEvents]
122
+
123
+ EBO_NONE = 0x00000000
124
+ EBO_NAVIGATEONCE = 0x00000001
125
+ EBO_SHOWFRAMES = 0X00000002
126
+ EBO_ALWAYSNAVIGATE = 0x00000004
127
+ EBO_NOTRAVELLOG = 0x00000008
128
+ EBO_NOWRAPPERWINDOW = 0x00000010
129
+ EBO_HTMLSHAREPOINTVIEW = 0x00000020
130
+
131
+ EBF_NONE = 0x0000000
132
+ EBF_SELECTFROMDATAOBJECT = 0x0000100
133
+ EBF_NODROPTARGET = 0x0000200
134
+
135
+ IExplorerBrowser = COM::Interface[IUnknown,
136
+ GUID['dfd3b6b5-c10c-4be9-85f6-a66969f402f6'],
137
+
138
+ Initialize: [[:pointer, :pointer, :pointer], :long],
139
+ Destroy: [[], :long],
140
+ SetRect: [[:pointer, RECT], :long],
141
+ SetPropertyBag: [[:buffer_in], :long],
142
+ SetEmptyText: [[:buffer_in], :long],
143
+ SetFolderSettings: [[:pointer], :long],
144
+ Advise: [[:pointer, :pointer], :long],
145
+ Unadvise: [[:ulong], :long],
146
+ SetOptions: [[:ulong], :long],
147
+ GetOptions: [[:pointer], :long],
148
+ BrowseToIDList: [[:pointer, :uint], :long],
149
+ BrowseToObject: [[:pointer, :uint], :long],
150
+ FillFromObject: [[:pointer, :ulong], :long],
151
+ RemoveAll: [[], :long],
152
+ GetCurrentView: [[:pointer, :pointer], :long]
153
+ ]
154
+
155
+ ExplorerBrowser = COM::Factory[IExplorerBrowser, GUID['71f96385-ddd6-48d3-a0c1-ae06e8b055fb']]
156
+
157
+ FOLDERID_NetworkFolder = GUID['D20BEEC4-5CA8-4905-AE3B-BF251EA09B53']
158
+ FOLDERID_ComputerFolder = GUID['0AC0837C-BBF8-452A-850D-79D08E667CA7']
159
+ FOLDERID_InternetFolder = GUID['4D9F7874-4E0C-4904-967B-40B0D20C3E4B']
160
+ FOLDERID_ControlPanelFolder = GUID['82A74AEB-AEB4-465C-A014-D097EE346D63']
161
+ FOLDERID_PrintersFolder = GUID['76FC4E2D-D6AD-4519-A663-37BD56068185']
162
+ FOLDERID_SyncManagerFolder = GUID['43668BF8-C14E-49B2-97C9-747784D784B7']
163
+ FOLDERID_SyncSetupFolder = GUID['0F214138-B1D3-4a90-BBA9-27CBC0C5389A']
164
+ FOLDERID_ConflictFolder = GUID['4bfefb45-347d-4006-a5be-ac0cb0567192']
165
+ FOLDERID_SyncResultsFolder = GUID['289a9a43-be44-4057-a41b-587a76d7e7f9']
166
+ FOLDERID_RecycleBinFolder = GUID['B7534046-3ECB-4C18-BE4E-64CD4CB7D6AC']
167
+ FOLDERID_ConnectionsFolder = GUID['6F0CD92B-2E97-45D1-88FF-B0D186B8DEDD']
168
+ FOLDERID_Fonts = GUID['FD228CB7-AE11-4AE3-864C-16F3910AB8FE']
169
+ FOLDERID_Desktop = GUID['B4BFCC3A-DB2C-424C-B029-7FE99A87C641']
170
+ FOLDERID_Startup = GUID['B97D20BB-F46A-4C97-BA10-5E3608430854']
171
+ FOLDERID_Programs = GUID['A77F5D77-2E2B-44C3-A6A2-ABA601054A51']
172
+ FOLDERID_StartMenu = GUID['625B53C3-AB48-4EC1-BA1F-A1EF4146FC19']
173
+ FOLDERID_Recent = GUID['AE50C081-EBD2-438A-8655-8A092E34987A']
174
+ FOLDERID_SendTo = GUID['8983036C-27C0-404B-8F08-102D10DCFD74']
175
+ FOLDERID_Documents = GUID['FDD39AD0-238F-46AF-ADB4-6C85480369C7']
176
+ FOLDERID_Favorites = GUID['1777F761-68AD-4D8A-87BD-30B759FA33DD']
177
+ FOLDERID_NetHood = GUID['C5ABBF53-E17F-4121-8900-86626FC2C973']
178
+ FOLDERID_PrintHood = GUID['9274BD8D-CFD1-41C3-B35E-B13F55A758F4']
179
+ FOLDERID_Templates = GUID['A63293E8-664E-48DB-A079-DF759E0509F7']
180
+ FOLDERID_CommonStartup = GUID['82A5EA35-D9CD-47C5-9629-E15D2F714E6E']
181
+ FOLDERID_CommonPrograms = GUID['0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8']
182
+ FOLDERID_CommonStartMenu = GUID['A4115719-D62E-491D-AA7C-E74B8BE3B067']
183
+ FOLDERID_PublicDesktop = GUID['C4AA340D-F20F-4863-AFEF-F87EF2E6BA25']
184
+ FOLDERID_ProgramData = GUID['62AB5D82-FDC1-4DC3-A9DD-070D1D495D97']
185
+ FOLDERID_CommonTemplates = GUID['B94237E7-57AC-4347-9151-B08C6C32D1F7']
186
+ FOLDERID_PublicDocuments = GUID['ED4824AF-DCE4-45A8-81E2-FC7965083634']
187
+ FOLDERID_RoamingAppData = GUID['3EB685DB-65F9-4CF6-A03A-E3EF65729F3D']
188
+ FOLDERID_LocalAppData = GUID['F1B32785-6FBA-4FCF-9D55-7B8E7F157091']
189
+ FOLDERID_LocalAppDataLow = GUID['A520A1A4-1780-4FF6-BD18-167343C5AF16']
190
+ FOLDERID_InternetCache = GUID['352481E8-33BE-4251-BA85-6007CAEDCF9D']
191
+ FOLDERID_Cookies = GUID['2B0F765D-C0E9-4171-908E-08A611B84FF6']
192
+ FOLDERID_History = GUID['D9DC8A3B-B784-432E-A781-5A1130A75963']
193
+ FOLDERID_System = GUID['1AC14E77-02E7-4E5D-B744-2EB1AE5198B7']
194
+ FOLDERID_SystemX86 = GUID['D65231B0-B2F1-4857-A4CE-A8E7C6EA7D27']
195
+ FOLDERID_Windows = GUID['F38BF404-1D43-42F2-9305-67DE0B28FC23']
196
+ FOLDERID_Profile = GUID['5E6C858F-0E22-4760-9AFE-EA3317B67173']
197
+ FOLDERID_Pictures = GUID['33E28130-4E1E-4676-835A-98395C3BC3BB']
198
+ FOLDERID_ProgramFilesX86 = GUID['7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E']
199
+ FOLDERID_ProgramFilesCommonX86 = GUID['DE974D24-D9C6-4D3E-BF91-F4455120B917']
200
+ FOLDERID_ProgramFilesX64 = GUID['6D809377-6AF0-444b-8957-A3773F02200E']
201
+ FOLDERID_ProgramFilesCommonX64 = GUID['6365D5A7-0F0D-45e5-87F6-0DA56B6A4F7D']
202
+ FOLDERID_ProgramFiles = GUID['905e63b6-c1bf-494e-b29c-65b732d3d21a']
203
+ FOLDERID_ProgramFilesCommon = GUID['F7F1ED05-9F6D-47A2-AAAE-29D317C6F066']
204
+ FOLDERID_UserProgramFiles = GUID['5cd7aee2-2219-4a67-b85d-6c9ce15660cb']
205
+ FOLDERID_UserProgramFilesCommon = GUID['bcbd3057-ca5c-4622-b42d-bc56db0ae516']
206
+ FOLDERID_AdminTools = GUID['724EF170-A42D-4FEF-9F26-B60E846FBA4F']
207
+ FOLDERID_CommonAdminTools = GUID['D0384E7D-BAC3-4797-8F14-CBA229B392B5']
208
+ FOLDERID_Music = GUID['4BD8D571-6D19-48D3-BE97-422220080E43']
209
+ FOLDERID_Videos = GUID['18989B1D-99B5-455B-841C-AB7C74E4DDFC']
210
+ FOLDERID_Ringtones = GUID['C870044B-F49E-4126-A9C3-B52A1FF411E8']
211
+ FOLDERID_PublicPictures = GUID['B6EBFB86-6907-413C-9AF7-4FC2ABF07CC5']
212
+ FOLDERID_PublicMusic = GUID['3214FAB5-9757-4298-BB61-92A9DEAA44FF']
213
+ FOLDERID_PublicVideos = GUID['2400183A-6185-49FB-A2D8-4A392A602BA3']
214
+ FOLDERID_PublicRingtones = GUID['E555AB60-153B-4D17-9F04-A5FE99FC15EC']
215
+ FOLDERID_ResourceDir = GUID['8AD10C31-2ADB-4296-A8F7-E4701232C972']
216
+ FOLDERID_LocalizedResourcesDir = GUID['2A00375E-224C-49DE-B8D1-440DF7EF3DDC']
217
+ FOLDERID_CommonOEMLinks = GUID['C1BAE2D0-10DF-4334-BEDD-7AA20B227A9D']
218
+ FOLDERID_CDBurning = GUID['9E52AB10-F80D-49DF-ACB8-4330F5687855']
219
+ FOLDERID_UserProfiles = GUID['0762D272-C50A-4BB0-A382-697DCD729B80']
220
+ FOLDERID_Playlists = GUID['DE92C1C7-837F-4F69-A3BB-86E631204A23']
221
+ FOLDERID_SamplePlaylists = GUID['15CA69B3-30EE-49C1-ACE1-6B5EC372AFB5']
222
+ FOLDERID_SampleMusic = GUID['B250C668-F57D-4EE1-A63C-290EE7D1AA1F']
223
+ FOLDERID_SamplePictures = GUID['C4900540-2379-4C75-844B-64E6FAF8716B']
224
+ FOLDERID_SampleVideos = GUID['859EAD94-2E85-48AD-A71A-0969CB56A6CD']
225
+ FOLDERID_PhotoAlbums = GUID['69D2CF90-FC33-4FB7-9A0C-EBB0F0FCB43C']
226
+ FOLDERID_Public = GUID['DFDF76A2-C82A-4D63-906A-5644AC457385']
227
+ FOLDERID_ChangeRemovePrograms = GUID['df7266ac-9274-4867-8d55-3bd661de872d']
228
+ FOLDERID_AppUpdates = GUID['a305ce99-f527-492b-8b1a-7e76fa98d6e4']
229
+ FOLDERID_AddNewPrograms = GUID['de61d971-5ebc-4f02-a3a9-6c82895e5c04']
230
+ FOLDERID_Downloads = GUID['374DE290-123F-4565-9164-39C4925E467B']
231
+ FOLDERID_PublicDownloads = GUID['3D644C9B-1FB8-4f30-9B45-F670235F79C0']
232
+ FOLDERID_SavedSearches = GUID['7d1d3a04-debb-4115-95cf-2f29da2920da']
233
+ FOLDERID_QuickLaunch = GUID['52a4f021-7b75-48a9-9f6b-4b87a210bc8f']
234
+ FOLDERID_Contacts = GUID['56784854-C6CB-462b-8169-88E350ACB882']
235
+ FOLDERID_SidebarParts = GUID['A75D362E-50FC-4fb7-AC2C-A8BEAA314493']
236
+ FOLDERID_SidebarDefaultParts = GUID['7B396E54-9EC5-4300-BE0A-2482EBAE1A26']
237
+ FOLDERID_PublicGameTasks = GUID['DEBF2536-E1A8-4c59-B6A2-414586476AEA']
238
+ FOLDERID_GameTasks = GUID['054FAE61-4DD8-4787-80B6-090220C4B700']
239
+ FOLDERID_SavedGames = GUID['4C5C32FF-BB9D-43b0-B5B4-2D72E54EAAA4']
240
+ FOLDERID_Games = GUID['CAC52C1A-B53D-4edc-92D7-6B2E8AC19434']
241
+ FOLDERID_SEARCH_MAPI = GUID['98ec0e18-2098-4d44-8644-66979315a281']
242
+ FOLDERID_SEARCH_CSC = GUID['ee32e446-31ca-4aba-814f-a5ebd2fd6d5e']
243
+ FOLDERID_Links = GUID['bfb9d5e0-c6a9-404c-b2b2-ae6db6af4968']
244
+ FOLDERID_UsersFiles = GUID['f3ce0f7c-4901-4acc-8648-d5d44b04ef8f']
245
+ FOLDERID_UsersLibraries = GUID['A302545D-DEFF-464b-ABE8-61C8648D939B']
246
+ FOLDERID_SearchHome = GUID['190337d1-b8ca-4121-a639-6d472d16972a']
247
+ FOLDERID_OriginalImages = GUID['2C36C0AA-5812-4b87-BFD0-4CD0DFB19B39']
248
+ FOLDERID_DocumentsLibrary = GUID['7b0db17d-9cd2-4a93-9733-46cc89022e7c']
249
+ FOLDERID_MusicLibrary = GUID['2112AB0A-C86A-4ffe-A368-0DE96E47012E']
250
+ FOLDERID_PicturesLibrary = GUID['A990AE9F-A03B-4e80-94BC-9912D7504104']
251
+ FOLDERID_VideosLibrary = GUID['491E922F-5643-4af4-A7EB-4E7A138D8174']
252
+ FOLDERID_RecordedTVLibrary = GUID['1A6FDBA2-F42D-4358-A798-B74D745926C5']
253
+ FOLDERID_HomeGroup = GUID['52528A6B-B9E3-4add-B60D-588C2DBA842D']
254
+ FOLDERID_DeviceMetadataStore = GUID['5CE4A5E9-E4EB-479D-B89F-130C02886155']
255
+ FOLDERID_Libraries = GUID['1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE']
256
+ FOLDERID_PublicLibraries = GUID['48daf80b-e6cf-4f4e-b800-0e69d84ee384']
257
+ FOLDERID_UserPinned = GUID['9e3995ab-1f9c-4f13-b827-48b24b6c7174']
258
+ FOLDERID_ImplicitAppShortcuts = GUID['bcb5256f-79f6-4cee-b725-dc34e402fd46']
259
+
260
+ if WINVER.AtLeastWindowsVista?
261
+ attach_function :SHGetKnownFolderIDList, [:pointer, :ulong, :pointer, :pointer], :long
262
+ end
263
+
264
+ SBSP_DEFBROWSER = 0x0000
265
+ SBSP_SAMEBROWSER = 0x0001
266
+ SBSP_NEWBROWSER = 0x0002
267
+ SBSP_DEFMODE = 0x0000
268
+ SBSP_OPENMODE = 0x0010
269
+ SBSP_EXPLOREMODE = 0x0020
270
+ SBSP_HELPMODE = 0x0040
271
+ SBSP_NOTRANSFERHIST = 0x0080
272
+ SBSP_ABSOLUTE = 0x0000
273
+ SBSP_RELATIVE = 0x1000
274
+ SBSP_PARENT = 0x2000
275
+ SBSP_NAVIGATEBACK = 0x4000
276
+ SBSP_NAVIGATEFORWARD = 0x8000
277
+ SBSP_ALLOW_AUTONAVIGATE = 0x00010000
278
+ SBSP_KEEPSAMETEMPLATE = 0x00020000
279
+ SBSP_KEEPWORDWHEELTEXT = 0x00040000
280
+ SBSP_ACTIVATE_NOFOCUS = 0x00080000
281
+ SBSP_CREATENOHISTORY = 0x00100000
282
+ SBSP_PLAYNOSOUND = 0x00200000
283
+ SBSP_CALLERUNTRUSTED = 0x00800000
284
+ SBSP_TRUSTFIRSTDOWNLOAD = 0x01000000
285
+ SBSP_UNTRUSTEDFORDOWNLOAD = 0x02000000
286
+ SBSP_NOAUTOSELECT = 0x04000000
287
+ SBSP_WRITENOHISTORY = 0x08000000
288
+ SBSP_TRUSTEDFORACTIVEX = 0x10000000
289
+ SBSP_FEEDNAVIGATION = 0x20000000
290
+ SBSP_REDIRECT = 0x40000000
291
+ SBSP_INITIATEDBYHLINKFRAME = 0x80000000
111
292
  end
112
293
  end
@@ -445,6 +445,17 @@ module Fzeet
445
445
 
446
446
  attach_function :GetDlgItem, [:pointer, :int], :pointer
447
447
 
448
+ GW_HWNDFIRST = 0
449
+ GW_HWNDLAST = 1
450
+ GW_HWNDNEXT = 2
451
+ GW_HWNDPREV = 3
452
+ GW_OWNER = 4
453
+ GW_CHILD = 5
454
+ GW_ENABLEDPOPUP = 6
455
+ GW_MAX = 6
456
+
457
+ attach_function :GetWindow, [:pointer, :uint], :pointer
458
+
448
459
  callback :WNDENUMPROC, [:pointer, :long], :int
449
460
 
450
461
  attach_function :EnumChildWindows, [:pointer, :WNDENUMPROC, :long], :int
data/lib/fzeet/windows.rb CHANGED
@@ -13,6 +13,7 @@ require_relative 'windows/com'
13
13
  require_relative 'windows/ole'
14
14
  require_relative 'windows/shell'
15
15
  require_relative 'windows/shlwapi'
16
+ require_relative 'windows/shdocvw'
16
17
 
17
18
  require_relative 'windows/propsys' if Fzeet::Windows::WINVER.AtLeastWindowsVista?
18
19