fzeet 0.6.3 → 0.6.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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