fzeet 0.6.5 → 0.6.6

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.
Files changed (140) hide show
  1. data/LICENSE_CEF +29 -0
  2. data/checks/Bstr.rb +14 -0
  3. data/checks/Decimal.rb +27 -0
  4. data/checks/OSVERSIONINFOEX.rb +14 -0
  5. data/checks/Point.rb +65 -0
  6. data/checks/Rect.rb +104 -0
  7. data/checks/RunAll.rb +2 -0
  8. data/checks/SafeArray.rb +27 -0
  9. data/checks/Size.rb +45 -0
  10. data/checks/SystemTime.rb +43 -0
  11. data/checks/Variant.rb +160 -0
  12. data/examples/Control/DateTimePicker.rbw +1 -1
  13. data/examples/Control/MonthCalendar.rbw +1 -1
  14. data/examples/Control/{WebBrowser.rbw → WebBrowser/WebBrowser.rbw} +2 -2
  15. data/examples/Control/{WebBrowser1.rbw → WebBrowser/WebBrowser1.rbw} +0 -0
  16. data/examples/Control/WebBrowser/WebBrowser2.rbw +24 -0
  17. data/examples/Control/{WebBrowser3.rbw → WebBrowser/WebBrowser3.rbw} +0 -0
  18. data/examples/Control/{WebBrowser4.rbw → WebBrowser/WebBrowser4.rbw} +8 -3
  19. data/examples/Control/{WebBrowser4Sinatra.rb → WebBrowser/WebBrowser4Sinatra.rb} +0 -0
  20. data/examples/Control/{WebBrowser5.rbw → WebBrowser/WebBrowser5.rbw} +4 -2
  21. data/examples/Control/WebBrowser/jQueryUI.html +53 -0
  22. data/examples/Control/WebBrowser/jQueryUI.rbw +26 -0
  23. data/examples/MDI.rbw +2 -2
  24. data/examples/Raw/UIRibbon/Command.rbw +3 -3
  25. data/examples/Raw/UIRibbon/Minimal.rbw +3 -3
  26. data/examples/Version.rbw +1 -1
  27. data/lib/fzeet.rb +22 -7
  28. data/lib/fzeet/windows.rb +82 -5
  29. data/lib/fzeet/windows/com.rb +1 -318
  30. data/lib/fzeet/windows/com/Common.rb +318 -0
  31. data/lib/fzeet/windows/comctl.rb +1 -1
  32. data/lib/fzeet/windows/comctl/ComboBoxEx.rb +32 -0
  33. data/lib/fzeet/windows/comctl/DateTimePicker.rb +35 -0
  34. data/lib/fzeet/windows/comctl/Header.rb +61 -1
  35. data/lib/fzeet/windows/comctl/ListView.rb +133 -3
  36. data/lib/fzeet/windows/comctl/MonthCalendar.rb +35 -0
  37. data/lib/fzeet/windows/comctl/ProgressBar.rb +37 -0
  38. data/lib/fzeet/windows/comctl/PropertySheet.rb +50 -2
  39. data/lib/fzeet/windows/comctl/SysLink.rb +37 -0
  40. data/lib/fzeet/windows/comctl/Tab.rb +56 -0
  41. data/lib/fzeet/windows/comctl/TreeView.rb +81 -2
  42. data/lib/fzeet/windows/comctl/UpDown.rb +33 -0
  43. data/lib/fzeet/windows/comdlg.rb +1 -0
  44. data/lib/fzeet/windows/comdlg/ColorDialog.rb +41 -0
  45. data/lib/fzeet/windows/comdlg/Common.rb +87 -0
  46. data/lib/fzeet/windows/comdlg/FileDialog.rb +133 -0
  47. data/lib/fzeet/windows/comdlg/FindReplaceDialog.rb +102 -0
  48. data/lib/fzeet/windows/comdlg/FontDialog.rb +36 -0
  49. data/lib/fzeet/windows/comdlg/PrintDialog.rb +72 -0
  50. data/lib/fzeet/{Dialog → windows/comdlg}/ShellFileDialog.rb +0 -0
  51. data/lib/fzeet/windows/core.rb +5 -0
  52. data/lib/fzeet/windows/core/Common.rb +324 -0
  53. data/lib/fzeet/windows/core/Point.rb +42 -0
  54. data/lib/fzeet/windows/core/Rect.rb +114 -0
  55. data/lib/fzeet/windows/core/Size.rb +34 -0
  56. data/lib/fzeet/windows/core/SystemTime.rb +46 -0
  57. data/lib/fzeet/windows/core/Version.rb +57 -0
  58. data/lib/fzeet/windows/gdi.rb +1 -62
  59. data/lib/fzeet/windows/gdi/Common.rb +40 -0
  60. data/lib/fzeet/windows/gdi/Font.rb +64 -0
  61. data/lib/fzeet/windows/kernel.rb +1 -92
  62. data/lib/fzeet/windows/kernel/Common.rb +92 -0
  63. data/lib/fzeet/windows/libc.rb +1 -1
  64. data/lib/fzeet/windows/libcef.rb +1 -0
  65. data/lib/fzeet/windows/mshtml.rb +1 -1135
  66. data/lib/fzeet/windows/mshtml/Common.rb +1135 -0
  67. data/lib/fzeet/windows/ole.rb +1 -561
  68. data/lib/fzeet/windows/ole/Common.rb +112 -0
  69. data/lib/fzeet/windows/ole/PropVariant.rb +141 -0
  70. data/lib/fzeet/windows/oleaut.rb +3 -0
  71. data/lib/fzeet/windows/oleaut/Bstr.rb +39 -0
  72. data/lib/fzeet/windows/oleaut/Common.rb +187 -0
  73. data/lib/fzeet/windows/oleaut/SafeArray.rb +104 -0
  74. data/lib/fzeet/windows/oleaut/Variant.rb +269 -0
  75. data/lib/fzeet/windows/scintilla.rb +115 -1
  76. data/lib/fzeet/windows/{SciLexer.dll → scintilla/SciLexer.dll} +0 -0
  77. data/lib/fzeet/windows/shdocvw.rb +150 -0
  78. data/lib/fzeet/windows/shell.rb +1 -1
  79. data/lib/fzeet/windows/shell/Common.rb +94 -2
  80. data/lib/fzeet/windows/shlwapi.rb +1 -1
  81. data/lib/fzeet/windows/uiribbon.rb +416 -0
  82. data/lib/fzeet/windows/urlmon.rb +2 -2
  83. data/lib/fzeet/windows/user.rb +20 -0
  84. data/lib/fzeet/windows/user/Accelerator.rb +45 -0
  85. data/lib/fzeet/windows/user/Common.rb +3 -2
  86. data/lib/fzeet/windows/user/Control/Button.rb +54 -0
  87. data/lib/fzeet/windows/user/Control/ComboBox.rb +44 -1
  88. data/lib/fzeet/windows/user/Control/Common.rb +88 -1
  89. data/lib/fzeet/windows/user/Control/Edit.rb +50 -0
  90. data/lib/fzeet/windows/user/Control/ListBox.rb +69 -0
  91. data/lib/fzeet/windows/user/Control/Static.rb +31 -0
  92. data/lib/fzeet/windows/user/Menu.rb +130 -0
  93. data/lib/fzeet/windows/user/Message.rb +9 -0
  94. data/lib/fzeet/windows/user/MessageBox.rb +47 -0
  95. data/lib/fzeet/windows/user/SystemParametersInfo.rb +1 -1
  96. data/lib/fzeet/windows/user/Window.rb +5 -463
  97. data/lib/fzeet/{Window → windows/user/Window}/Common.rb +460 -0
  98. data/lib/fzeet/{Window → windows/user/Window}/Container.rb +0 -0
  99. data/lib/fzeet/{Window → windows/user/Window}/Dialog.rb +0 -0
  100. data/lib/fzeet/{Window → windows/user/Window}/MDI.rb +0 -0
  101. data/lib/fzeet/{Window → windows/user/Window}/View.rb +0 -0
  102. data/lib/fzeet/{Window → windows/user/Window}/Window.rb +0 -0
  103. data/lib/fzeet/{Window → windows/user/Window}/WindowMethods.rb +1 -1
  104. metadata +55 -61
  105. data/examples/Control/WebBrowser2.rbw +0 -39
  106. data/lib/fzeet/Accelerator.rb +0 -48
  107. data/lib/fzeet/Application.rb +0 -71
  108. data/lib/fzeet/Common.rb +0 -350
  109. data/lib/fzeet/Control.rb +0 -19
  110. data/lib/fzeet/Control/Button.rb +0 -57
  111. data/lib/fzeet/Control/ComboBox.rb +0 -46
  112. data/lib/fzeet/Control/ComboBoxEx.rb +0 -35
  113. data/lib/fzeet/Control/Common.rb +0 -89
  114. data/lib/fzeet/Control/DateTimePicker.rb +0 -38
  115. data/lib/fzeet/Control/Edit.rb +0 -53
  116. data/lib/fzeet/Control/ExplorerBrowser.rb +0 -66
  117. data/lib/fzeet/Control/Header.rb +0 -63
  118. data/lib/fzeet/Control/ListBox.rb +0 -72
  119. data/lib/fzeet/Control/ListView.rb +0 -133
  120. data/lib/fzeet/Control/MonthCalendar.rb +0 -38
  121. data/lib/fzeet/Control/ProgressBar.rb +0 -40
  122. data/lib/fzeet/Control/PropertySheet.rb +0 -51
  123. data/lib/fzeet/Control/Scintilla.rb +0 -117
  124. data/lib/fzeet/Control/Static.rb +0 -34
  125. data/lib/fzeet/Control/SysLink.rb +0 -40
  126. data/lib/fzeet/Control/Tab.rb +0 -59
  127. data/lib/fzeet/Control/TreeView.rb +0 -82
  128. data/lib/fzeet/Control/UpDown.rb +0 -36
  129. data/lib/fzeet/Control/WebBrowser.rb +0 -153
  130. data/lib/fzeet/Dialog.rb +0 -6
  131. data/lib/fzeet/Dialog/ColorDialog.rb +0 -44
  132. data/lib/fzeet/Dialog/Common.rb +0 -89
  133. data/lib/fzeet/Dialog/FileDialog.rb +0 -136
  134. data/lib/fzeet/Dialog/FindReplaceDialog.rb +0 -105
  135. data/lib/fzeet/Dialog/FontDialog.rb +0 -39
  136. data/lib/fzeet/Dialog/PrintDialog.rb +0 -75
  137. data/lib/fzeet/Menu.rb +0 -133
  138. data/lib/fzeet/UIRibbon.rb +0 -417
  139. data/lib/fzeet/Window.rb +0 -5
  140. data/lib/fzeet/windows/common.rb +0 -244
@@ -0,0 +1,112 @@
1
+ require_relative '../com'
2
+
3
+ module Fzeet
4
+ module Windows
5
+ ffi_lib 'ole32'
6
+ ffi_convention :stdcall
7
+
8
+ attach_function :OleInitialize, [:pointer], :long
9
+ attach_function :OleUninitialize, [], :void
10
+
11
+ def InitializeOle
12
+ DetonateHresult(:OleInitialize, nil)
13
+
14
+ at_exit { OleUninitialize() }
15
+ end
16
+
17
+ module_function :InitializeOle
18
+
19
+ attach_function :CoTaskMemAlloc, [:ulong], :pointer
20
+ attach_function :CoTaskMemFree, [:pointer], :void
21
+
22
+ class LARGE_INTEGER < FFI::Union
23
+ include AnonymousSupport
24
+
25
+ layout \
26
+ :_, Class.new(FFI::Struct) {
27
+ layout \
28
+ :LowPart, :ulong,
29
+ :HighPart, :long
30
+ },
31
+
32
+ :QuadPart, :long_long
33
+ end
34
+
35
+ class ULARGE_INTEGER < FFI::Union
36
+ include AnonymousSupport
37
+
38
+ layout \
39
+ :_, Class.new(FFI::Struct) {
40
+ layout \
41
+ :LowPart, :ulong,
42
+ :HighPart, :ulong
43
+ },
44
+
45
+ :QuadPart, :ulong_long
46
+ end
47
+
48
+ class FILETIME < FFI::Struct
49
+ layout \
50
+ :dwLowDateTime, :ulong,
51
+ :dwHighDateTime, :ulong
52
+ end
53
+
54
+ class BSTRBLOB < FFI::Struct
55
+ layout \
56
+ :cbSize, :ulong,
57
+ :pData, :pointer
58
+ end
59
+
60
+ class BLOB < FFI::Struct
61
+ layout \
62
+ :cbSize, :ulong,
63
+ :pBlobData, :pointer
64
+ end
65
+
66
+ class CA < FFI::Struct
67
+ layout \
68
+ :cElems, :ulong,
69
+ :pElems, :pointer
70
+ end
71
+
72
+ class DECIMAL < FFI::Struct
73
+ layout \
74
+ :wReserved, :ushort,
75
+ :scale, :uchar,
76
+ :sign, :uchar,
77
+ :Hi32, :ulong,
78
+ :Lo64, :ulong_long
79
+
80
+ def self.[](value)
81
+ new.tap { |decimal|
82
+ case value
83
+ when Integer; Windows.DetonateHresult(:VarDecFromI8, value, decimal)
84
+ when Float; Windows.DetonateHresult(:VarDecFromR8, value, decimal)
85
+ else raise ArgumentError
86
+ end
87
+ }
88
+ end
89
+
90
+ def i8
91
+ FFI::MemoryPointer.new(:long_long) { |pi8|
92
+ Windows.DetonateHresult(:VarI8FromDec, self, pi8)
93
+
94
+ return pi8.get_long_long(0)
95
+ }
96
+ end
97
+
98
+ def r8
99
+ FFI::MemoryPointer.new(:double) { |pr8|
100
+ Windows.DetonateHresult(:VarR8FromDec, self, pr8)
101
+
102
+ return pr8.get_double(0)
103
+ }
104
+ end
105
+
106
+ alias longlong i8; alias int longlong
107
+ alias double r8; alias float double
108
+ end
109
+ end
110
+
111
+ Decimal = Windows::DECIMAL
112
+ end
@@ -0,0 +1,141 @@
1
+ require_relative 'Common'
2
+
3
+ module Fzeet
4
+ module Windows
5
+ class PROPVARIANT < FFI::Union
6
+ include AnonymousSupport
7
+
8
+ layout \
9
+ :_, Class.new(FFI::Struct) {
10
+ layout \
11
+ :vt, :ushort,
12
+ :wReserved1, :ushort,
13
+ :wReserved2, :ushort,
14
+ :wReserved3, :ushort,
15
+ :_, Class.new(FFI::Union) {
16
+ layout \
17
+ :cVal, :char,
18
+ :bVal, :uchar,
19
+ :iVal, :short,
20
+ :uiVal, :ushort,
21
+ :lVal, :long,
22
+ :ulVal, :ulong,
23
+ :intVal, :int,
24
+ :uintVal, :uint,
25
+ :hVal, LARGE_INTEGER,
26
+ :uhVal, ULARGE_INTEGER,
27
+ :fltVal, :float,
28
+ :dblVal, :double,
29
+ :boolVal, :short,
30
+ :bool, :short,
31
+ :scode, :long,
32
+ :cyVal, :long_long,
33
+ :date, :double,
34
+ :filetime, FILETIME,
35
+ :puuid, :pointer,
36
+ :pclipdata, :pointer,
37
+ :bstrVal, :pointer,
38
+ :bstrblobVal, BSTRBLOB,
39
+ :blob, BLOB,
40
+ :pszVal, :pointer,
41
+ :pwszVal, :pointer,
42
+ :punkVal, :pointer,
43
+ :pdispVal, :pointer,
44
+ :pStream, :pointer,
45
+ :pStorage, :pointer,
46
+ :pVersionedStream, :pointer,
47
+ :parray, :pointer,
48
+ :cac, CA,
49
+ :caub, CA,
50
+ :cai, CA,
51
+ :caui, CA,
52
+ :cal, CA,
53
+ :caul, CA,
54
+ :cah, CA,
55
+ :cauh, CA,
56
+ :caflt, CA,
57
+ :cadbl, CA,
58
+ :cabool, CA,
59
+ :cascode, CA,
60
+ :cacy, CA,
61
+ :cadate, CA,
62
+ :cafiletime, CA,
63
+ :cauuid, CA,
64
+ :caclipdata, CA,
65
+ :cabstr, CA,
66
+ :cabstrblob, CA,
67
+ :calpstr, CA,
68
+ :calpwstr, CA,
69
+ :capropvar, CA,
70
+ :pcVal, :pointer,
71
+ :pbVal, :pointer,
72
+ :piVal, :pointer,
73
+ :puiVal, :pointer,
74
+ :plVal, :pointer,
75
+ :pulVal, :pointer,
76
+ :pintVal, :pointer,
77
+ :puintVal, :pointer,
78
+ :pfltVal, :pointer,
79
+ :pdblVal, :pointer,
80
+ :pboolVal, :pointer,
81
+ :pdecVal, :pointer,
82
+ :pscode, :pointer,
83
+ :pcyVal, :pointer,
84
+ :pdate, :pointer,
85
+ :pbstrVal, :pointer,
86
+ :ppunkVal, :pointer,
87
+ :ppdispVal, :pointer,
88
+ :pparray, :pointer,
89
+ :pvarVal, :pointer
90
+ }
91
+ },
92
+
93
+ :decVal, DECIMAL
94
+
95
+ def self.[](t, *v) new.tap { |var| var.send("#{t}=", *v) } end
96
+
97
+ def bool; raise 'Wrong type tag.' unless self[:vt] == VT_BOOL; self[:boolVal] != 0 end
98
+ def bool=(bool) self[:vt] = VT_BOOL; self[:boolVal] = (bool) ? -1 : 0 end
99
+
100
+ def int; raise 'Wrong type tag.' unless self[:vt] == VT_I4; self[:intVal] end
101
+ def int=(int) self[:vt] = VT_I4; self[:intVal] = int end
102
+
103
+ def uint; raise 'Wrong type tag.' unless self[:vt] == VT_UI4; self[:uintVal] end
104
+ def uint=(uint) self[:vt] = VT_UI4; self[:uintVal] = uint end
105
+
106
+ def unknown
107
+ raise 'Wrong type tag.' unless self[:vt] == VT_UNKNOWN
108
+
109
+ yield Unknown.new(self[:punkVal])
110
+ ensure
111
+ Windows.PropVariantClear(self)
112
+ end
113
+
114
+ def unknown=(unknown) self[:vt] = VT_UNKNOWN; self[:punkVal] = unknown.pointer; unknown.AddRef end
115
+
116
+ def wstring; raise 'Wrong type tag.' unless self[:vt] == VT_LPWSTR; Windows.WCSTOMBS(self[:pwszVal]) end
117
+
118
+ def wstring=(string)
119
+ self[:vt] = VT_LPWSTR
120
+
121
+ FFI::MemoryPointer.new(:pointer) { |p|
122
+ Windows.DetonateHresult(:SHStrDup, string, p)
123
+
124
+ self[:pwszVal] = p.read_pointer
125
+ }
126
+ end
127
+
128
+ def decimal
129
+ raise 'Wrong type tag.' unless self[:vt] == VT_DECIMAL
130
+
131
+ Rational(self[:decVal][:Lo64], 10 ** self[:decVal][:scale]) + self[:decVal][:Hi32]
132
+ end
133
+
134
+ def decimal=(decimal) self[:vt] = VT_DECIMAL; self[:decVal][:Lo64] = decimal end
135
+ end
136
+
137
+ attach_function :PropVariantClear, [:pointer], :long
138
+ end
139
+
140
+ PropVariant = Windows::PROPVARIANT
141
+ end
@@ -0,0 +1,3 @@
1
+ require_relative 'oleaut/Bstr'
2
+ require_relative 'oleaut/Variant'
3
+ require_relative 'oleaut/SafeArray'
@@ -0,0 +1,39 @@
1
+ require_relative 'Common'
2
+
3
+ module Fzeet
4
+ module Windows
5
+ class BSTR
6
+ def self.[](s)
7
+ bstr = new(Windows.SysAllocString("#{s}\0".encode('utf-16le')))
8
+
9
+ if block_given?
10
+ yield bstr; bstr.dispose; return nil
11
+ end
12
+
13
+ bstr
14
+ end
15
+
16
+ class << self
17
+ alias from []
18
+ end
19
+
20
+ def initialize(pointer) @pointer = pointer end
21
+
22
+ attr_reader :pointer
23
+
24
+ def free; Windows.SysFreeString(@pointer) end
25
+ alias dispose free
26
+
27
+ def length; Windows.SysStringLen(@pointer) end
28
+ alias size length
29
+
30
+ def multibyte; Windows.WCSTOMBS(@pointer) end
31
+ end
32
+
33
+ attach_function :SysAllocString, [:buffer_in], :pointer
34
+ attach_function :SysFreeString, [:pointer], :void
35
+ attach_function :SysStringLen, [:pointer], :uint
36
+ end
37
+
38
+ Bstr = Windows::BSTR
39
+ end
@@ -0,0 +1,187 @@
1
+ require_relative '../ole'
2
+
3
+ module Fzeet
4
+ module Windows
5
+ ffi_lib 'oleaut32'
6
+ ffi_convention :stdcall
7
+
8
+ OLEIVERB_PRIMARY = 0
9
+ OLEIVERB_SHOW = -1
10
+ OLEIVERB_OPEN = -2
11
+ OLEIVERB_HIDE = -3
12
+ OLEIVERB_UIACTIVATE = -4
13
+ OLEIVERB_INPLACEACTIVATE = -5
14
+ OLEIVERB_DISCARDUNDOSTATE = -6
15
+
16
+ IOleWindow = COM::Interface[IUnknown,
17
+ GUID['00000114-0000-0000-C000-000000000046'],
18
+
19
+ GetWindow: [[:pointer], :long],
20
+ ContextSensitiveHelp: [[:int], :long]
21
+ ]
22
+
23
+ OleWindow = COM::Instance[IOleWindow]
24
+
25
+ IOleInPlaceObject = COM::Interface[IOleWindow,
26
+ GUID['00000113-0000-0000-C000-000000000046'],
27
+
28
+ InPlaceDeactivate: [[], :long],
29
+ UIDeactivate: [[], :long],
30
+ SetObjectRects: [[:pointer, :pointer], :long],
31
+ ReactivateAndUndo: [[], :long]
32
+ ]
33
+
34
+ OleInPlaceObject = COM::Instance[IOleInPlaceObject]
35
+
36
+ IOleInPlaceSite = COM::Interface[IOleWindow,
37
+ GUID['00000119-0000-0000-C000-000000000046'],
38
+
39
+ CanInPlaceActivate: [[], :long],
40
+ OnInPlaceActivate: [[], :long],
41
+ OnUIActivate: [[], :long],
42
+ GetWindowContext: [[:pointer, :pointer, :pointer, :pointer, :pointer], :long],
43
+ Scroll: [[:long_long], :long],
44
+ OnUIDeactivate: [[:int], :long],
45
+ OnInPlaceDeactivate: [[], :long],
46
+ DiscardUndoState: [[], :long],
47
+ DeactivateAndUndo: [[], :long],
48
+ OnPosRectChange: [[:pointer], :long]
49
+ ]
50
+
51
+ OleInPlaceSite = COM::Callback[IOleInPlaceSite]
52
+
53
+ IOleClientSite = COM::Interface[IUnknown,
54
+ GUID['00000118-0000-0000-C000-000000000046'],
55
+
56
+ SaveObject: [[], :long],
57
+ GetMoniker: [[:ulong, :ulong, :pointer], :long],
58
+ GetContainer: [[:pointer], :long],
59
+ ShowObject: [[], :long],
60
+ OnShowWindow: [[:int], :long],
61
+ RequestNewObjectLayout: [[], :long]
62
+ ]
63
+
64
+ OleClientSite = COM::Callback[IOleClientSite]
65
+
66
+ OLEGETMONIKER_ONLYIFTHERE = 1
67
+ OLEGETMONIKER_FORCEASSIGN = 2
68
+ OLEGETMONIKER_UNASSIGN = 3
69
+ OLEGETMONIKER_TEMPFORUSER = 4
70
+
71
+ OLEWHICHMK_CONTAINER = 1
72
+ OLEWHICHMK_OBJREL = 2
73
+ OLEWHICHMK_OBJFULL = 3
74
+
75
+ USERCLASSTYPE_FULL = 1
76
+ USERCLASSTYPE_SHORT = 2
77
+ USERCLASSTYPE_APPNAME = 3
78
+
79
+ OLEMISC_RECOMPOSEONRESIZE = 0x00000001
80
+ OLEMISC_ONLYICONIC = 0x00000002
81
+ OLEMISC_INSERTNOTREPLACE = 0x00000004
82
+ OLEMISC_STATIC = 0x00000008
83
+ OLEMISC_CANTLINKINSIDE = 0x00000010
84
+ OLEMISC_CANLINKBYOLE1 = 0x00000020
85
+ OLEMISC_ISLINKOBJECT = 0x00000040
86
+ OLEMISC_INSIDEOUT = 0x00000080
87
+ OLEMISC_ACTIVATEWHENVISIBLE = 0x00000100
88
+ OLEMISC_RENDERINGISDEVICEINDEPENDENT = 0x00000200
89
+ OLEMISC_INVISIBLEATRUNTIME = 0x00000400
90
+ OLEMISC_ALWAYSRUN = 0x00000800
91
+ OLEMISC_ACTSLIKEBUTTON = 0x00001000
92
+ OLEMISC_ACTSLIKELABEL = 0x00002000
93
+ OLEMISC_NOUIACTIVATE = 0x00004000
94
+ OLEMISC_ALIGNABLE = 0x00008000
95
+ OLEMISC_SIMPLEFRAME = 0x00010000
96
+ OLEMISC_SETCLIENTSITEFIRST = 0x00020000
97
+ OLEMISC_IMEMODE = 0x00040000
98
+ OLEMISC_IGNOREACTIVATEWHENVISIBLE = 0x00080000
99
+ OLEMISC_WANTSTOMENUMERGE = 0x00100000
100
+ OLEMISC_SUPPORTSMULTILEVELUNDO = 0x00200000
101
+
102
+ OLECLOSE_SAVEIFDIRTY = 0
103
+ OLECLOSE_NOSAVE = 1
104
+ OLECLOSE_PROMPTSAVE = 2
105
+
106
+ IOleObject = COM::Interface[IUnknown,
107
+ GUID['00000112-0000-0000-C000-000000000046'],
108
+
109
+ SetClientSite: [[:pointer], :long],
110
+ GetClientSite: [[:pointer], :long],
111
+ SetHostNames: [[:pointer, :pointer], :long],
112
+ Close: [[:ulong], :long],
113
+ SetMoniker: [[:ulong, :pointer], :long],
114
+ GetMoniker: [[:ulong, :ulong, :pointer], :long],
115
+ InitFromData: [[:pointer, :int, :ulong], :long],
116
+ GetClipboardData: [[:ulong, :pointer], :long],
117
+ DoVerb: [[:long, :pointer, :pointer, :long, :pointer, :pointer], :long],
118
+ EnumVerbs: [[:pointer], :long],
119
+ Update: [[], :long],
120
+ IsUpToDate: [[], :long],
121
+ GetUserClassID: [[:pointer], :long],
122
+ GetUserType: [[:ulong, :pointer], :long],
123
+ SetExtent: [[:ulong, :pointer], :long],
124
+ GetExtent: [[:ulong, :pointer], :long],
125
+ Advise: [[:pointer, :pointer], :long],
126
+ Unadvise: [[:ulong], :long],
127
+ EnumAdvise: [[:pointer], :long],
128
+ GetMiscStatus: [[:ulong, :pointer], :long],
129
+ SetColorScheme: [[:pointer], :long]
130
+ ]
131
+
132
+ OleObject = COM::Instance[IOleObject]
133
+
134
+ class PARAMDATA < FFI::Struct
135
+ layout \
136
+ :szName, :pointer,
137
+ :vt, :ushort
138
+ end
139
+
140
+ CC_FASTCALL = 0
141
+ CC_CDECL = 1
142
+ CC_MSCPASCAL = CC_CDECL + 1
143
+ CC_PASCAL = CC_MSCPASCAL
144
+ CC_MACPASCAL = CC_PASCAL + 1
145
+ CC_STDCALL = CC_MACPASCAL + 1
146
+ CC_FPFASTCALL = CC_STDCALL + 1
147
+ CC_SYSCALL = CC_FPFASTCALL + 1
148
+ CC_MPWCDECL = CC_SYSCALL + 1
149
+ CC_MPWPASCAL = CC_MPWCDECL + 1
150
+ CC_MAX = CC_MPWPASCAL + 1
151
+
152
+ DISPATCH_METHOD = 0x1
153
+ DISPATCH_PROPERTYGET = 0x2
154
+ DISPATCH_PROPERTYPUT = 0x4
155
+ DISPATCH_PROPERTYPUTREF = 0x8
156
+
157
+ class METHODDATA < FFI::Struct
158
+ layout \
159
+ :szName, :pointer,
160
+ :ppdata, :pointer,
161
+ :dispid, :long,
162
+ :iMeth, :uint,
163
+ :cc, :uint,
164
+ :cArgs, :uint,
165
+ :wFlags, :ushort,
166
+ :vtReturn, :ushort
167
+ end
168
+
169
+ class INTERFACEDATA < FFI::Struct
170
+ layout \
171
+ :pmethdata, :pointer,
172
+ :cMembers, :uint
173
+ end
174
+
175
+ attach_function :CreateDispTypeInfo, [:pointer, :ulong, :pointer], :long
176
+
177
+ class DISPPARAMS < FFI::Struct
178
+ layout \
179
+ :rgvarg, :pointer,
180
+ :rgdispidNamedArgs, :pointer,
181
+ :cArgs, :uint,
182
+ :cNamedArgs, :uint
183
+ end
184
+
185
+ attach_function :DispInvoke, [:pointer, :pointer, :long, :ushort, :pointer, :pointer, :pointer, :pointer], :long
186
+ end
187
+ end