fzeet 0.5.2 → 0.5.3
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.
- data/examples/Dialog/Dialog.rbw +2 -2
- data/examples/Raw/UIRibbon/Command.dll +0 -0
- data/examples/Raw/UIRibbon/Command.rb +17 -11
- data/examples/Raw/UIRibbon/Command.xml +6 -0
- data/examples/Raw/UIRibbon/Minimal.dll +0 -0
- data/examples/Raw/UIRibbon/Minimal.rb +10 -6
- data/examples/Raw/UIRibbon/Minimal.xml +4 -0
- data/examples/UIRibbon/Color.rbw +12 -0
- data/examples/UIRibbon/Command.dll +0 -0
- data/examples/UIRibbon/Command.rb +17 -11
- data/examples/UIRibbon/Command.xml +6 -0
- data/examples/UIRibbon/ContextPopup.dll +0 -0
- data/examples/UIRibbon/ContextPopup.rb +23 -0
- data/examples/UIRibbon/ContextPopup.rbw +12 -0
- data/examples/UIRibbon/ContextPopup.xml +83 -0
- data/examples/UIRibbon/Minimal.dll +0 -0
- data/examples/UIRibbon/Minimal.rb +10 -6
- data/examples/UIRibbon/Minimal.xml +4 -0
- data/examples/Version.rbw +5 -0
- data/examples/res/go-next-big.bmp +0 -0
- data/examples/res/go-previous-big.bmp +0 -0
- data/lib/fzeet/Accelerator.rb +23 -3
- data/lib/fzeet/Application.rb +1 -1
- data/lib/fzeet/{common.rb → Common.rb} +2 -50
- data/lib/fzeet/{ControlButton.rb → Control/Button.rb} +1 -1
- data/lib/fzeet/{ControlCommon.rb → Control/Common.rb} +1 -1
- data/lib/fzeet/Control.rb +1 -1
- data/lib/fzeet/Dialog/Common.rb +5 -0
- data/lib/fzeet/{DialogFileDialog.rb → Dialog/FileDialog.rb} +1 -43
- data/lib/fzeet/Dialog/FolderDialog.rb +45 -0
- data/lib/fzeet/Dialog.rb +2 -1
- data/lib/fzeet/Menu.rb +77 -77
- data/lib/fzeet/UIRibbon.rb +86 -1
- data/lib/fzeet/{WindowCommon.rb → Window/Common.rb} +52 -2
- data/lib/fzeet/{WindowDialog.rb → Window/Dialog.rb} +6 -6
- data/lib/fzeet/{WindowWindow.rb → Window/Window.rb} +1 -1
- data/lib/fzeet/{WindowMethods.rb → Window/WindowMethods.rb} +49 -43
- data/lib/fzeet/Window.rb +2 -2
- data/lib/fzeet/windows/com.rb +97 -15
- data/lib/fzeet/windows/{comctlbutton.rb → comctl/Button.rb} +1 -1
- data/lib/fzeet/windows/{comctlcommon.rb → comctl/Common.rb} +1 -1
- data/lib/fzeet/windows/comctl.rb +1 -1
- data/lib/fzeet/windows/{comdlgcommon.rb → comdlg/Common.rb} +1 -1
- data/lib/fzeet/windows/{comdlgofn.rb → comdlg/FileDialog.rb} +1 -1
- data/lib/fzeet/windows/comdlg.rb +1 -1
- data/lib/fzeet/windows/common.rb +80 -5
- data/lib/fzeet/windows/gdi.rb +30 -0
- data/lib/fzeet/windows/kernel.rb +74 -21
- data/lib/fzeet/windows/ole.rb +60 -0
- data/lib/fzeet/windows/propsys.rb +40 -0
- data/lib/fzeet/windows/shell/Common.rb +10 -0
- data/lib/fzeet/windows/shell/FolderDialog.rb +39 -0
- data/lib/fzeet/windows/shell.rb +1 -43
- data/lib/fzeet/windows/uiribbon.rb +275 -18
- data/lib/fzeet/windows/user/Accelerator.rb +182 -0
- data/lib/fzeet/windows/user/Common.rb +33 -0
- data/lib/fzeet/windows/{userctlbutton.rb → user/Control/Button.rb} +1 -1
- data/lib/fzeet/windows/{userctlcommon.rb → user/Control/Common.rb} +1 -1
- data/lib/fzeet/windows/user/Control.rb +1 -0
- data/lib/fzeet/windows/user/Menu.rb +115 -0
- data/lib/fzeet/windows/{usermsg.rb → user/Message.rb} +1 -3
- data/lib/fzeet/windows/{usermbox.rb → user/MessageBox.rb} +1 -5
- data/lib/fzeet/windows/user/SystemParametersInfo.rb +244 -0
- data/lib/fzeet/windows/{userwnd.rb → user/Window.rb} +70 -38
- data/lib/fzeet/windows/user.rb +7 -7
- data/lib/fzeet/windows.rb +2 -73
- data/lib/fzeet.rb +1 -1
- metadata +39 -27
- data/lib/fzeet/DialogCommon.rb +0 -5
- data/lib/fzeet/windows/usercommon.rb +0 -8
- data/lib/fzeet/windows/userctl.rb +0 -1
- data/lib/fzeet/windows/userkbd.rb +0 -20
- data/lib/fzeet/windows/usermenu.rb +0 -50
- data/lib/fzeet/windows/userspi.rb +0 -29
- /data/examples/Dialog/{FileDialog.rbw → FileAndFolderDialog.rbw} +0 -0
data/lib/fzeet/windows/comctl.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative 'comctl/Button'
|
data/lib/fzeet/windows/comdlg.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative 'comdlg/FileDialog'
|
data/lib/fzeet/windows/common.rb
CHANGED
@@ -4,17 +4,92 @@ module Fzeet
|
|
4
4
|
module Windows
|
5
5
|
extend FFI::Library
|
6
6
|
|
7
|
+
ffi_lib 'kernel32'
|
8
|
+
ffi_convention :stdcall
|
9
|
+
|
10
|
+
INVALID_HANDLE_VALUE = FFI::Pointer.new(-1)
|
11
|
+
INVALID_FILE_SIZE = 0xFFFFFFFF
|
12
|
+
INVALID_SET_FILE_POINTER = 0xFFFFFFFF
|
13
|
+
INVALID_FILE_ATTRIBUTES = 0xFFFFFFFF
|
14
|
+
INVALID_ATOM = 0
|
15
|
+
|
16
|
+
attach_function :GetLastError, [], :ulong
|
17
|
+
attach_function :SetLastError, [:ulong], :void
|
18
|
+
attach_function :RestoreLastError, [:ulong], :void
|
19
|
+
|
20
|
+
def DetonateLastError(on, name, *args)
|
21
|
+
raise "#{name} failed (last error #{GetLastError()})." if (failed = [*on].include?(result = send(name, *args)))
|
22
|
+
|
23
|
+
result
|
24
|
+
ensure
|
25
|
+
yield failed if block_given?
|
26
|
+
end
|
27
|
+
|
28
|
+
module_function :DetonateLastError
|
29
|
+
|
30
|
+
class OSVERSIONINFOEX < FFI::Struct
|
31
|
+
layout \
|
32
|
+
:dwOSVersionInfoSize, :ulong,
|
33
|
+
:dwMajorVersion, :ulong,
|
34
|
+
:dwMinorVersion, :ulong,
|
35
|
+
:dwBuildNumber, :ulong,
|
36
|
+
:dwPlatformId, :ulong,
|
37
|
+
:szCSDVersion, [:char, 128],
|
38
|
+
:wServicePackMajor, :ushort,
|
39
|
+
:wServicePackMinor, :ushort,
|
40
|
+
:wSuiteMask, :ushort,
|
41
|
+
:wProductType, :uchar,
|
42
|
+
:wReserved, :uchar
|
43
|
+
|
44
|
+
def major; self[:dwMajorVersion] end
|
45
|
+
def minor; self[:dwMinorVersion] end
|
46
|
+
def build; self[:dwBuildNumber] end
|
47
|
+
def sp; self[:wServicePackMajor] end
|
48
|
+
|
49
|
+
def to_s; "#{major}.#{minor}.#{build} SP#{sp} (#{name})" end
|
50
|
+
|
51
|
+
def name
|
52
|
+
if Windows2000?; 'Windows 2000'
|
53
|
+
elsif WindowsXP?; 'Windows XP'
|
54
|
+
elsif WindowsVista?; 'Windows Vista'
|
55
|
+
elsif Windows7?; 'Windows 7'
|
56
|
+
else 'Unknown'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def Windows2000?; major == 5 && minor == 0 end
|
61
|
+
def WindowsXP?; major == 5 && minor == 1 end
|
62
|
+
def WindowsVista?; major == 6 && minor == 0 end
|
63
|
+
def Windows7?; major == 6 && minor == 1 end
|
64
|
+
|
65
|
+
def AtLeastWindows2000?; major >= 5 end
|
66
|
+
def AtLeastWindowsXP?; major > 5 || (major == 5 && minor >= 1) end
|
67
|
+
def AtLeastWindowsVista?; major >= 6 end
|
68
|
+
def AtLeastWindows7?; major > 6 || (major == 6 && minor >= 1) end
|
69
|
+
end
|
70
|
+
|
71
|
+
attach_function :GetVersionEx, :GetVersionExA, [:pointer], :int
|
72
|
+
|
73
|
+
WINVER = OSVERSIONINFOEX.new
|
74
|
+
|
75
|
+
WINVER[:dwOSVersionInfoSize] = WINVER.size
|
76
|
+
|
77
|
+
DetonateLastError(0, :GetVersionEx, WINVER)
|
78
|
+
|
79
|
+
def LOBYTE(w) w & 0xff end
|
80
|
+
def HIBYTE(w) (w >> 8) & 0xff end
|
81
|
+
def MAKEWORD(low, high) (low & 0xff) | ((high & 0xff) << 8) end
|
7
82
|
def LOWORD(l) l & 0xffff end
|
8
83
|
def HIWORD(l) (l >> 16) & 0xffff end
|
9
|
-
def
|
10
|
-
def
|
84
|
+
def MAKELONG(low, high) (low & 0xffff) | ((high & 0xffff) << 16) end
|
85
|
+
def GET_X_LPARAM(l) ((w = LOWORD(l)) > 0x7fff) ? w - 0x1_0000 : w end
|
86
|
+
def GET_Y_LPARAM(l) ((w = HIWORD(l)) > 0x7fff) ? w - 0x1_0000 : w end
|
11
87
|
|
12
88
|
module_function \
|
13
|
-
:
|
89
|
+
:LOBYTE, :HIBYTE, :MAKEWORD,
|
90
|
+
:LOWORD, :HIWORD, :MAKELONG,
|
14
91
|
:GET_X_LPARAM, :GET_Y_LPARAM
|
15
92
|
|
16
|
-
INVALID_HANDLE_VALUE = FFI::Pointer.new(-1)
|
17
|
-
|
18
93
|
class POINT < FFI::Struct
|
19
94
|
layout \
|
20
95
|
:x, :long,
|
data/lib/fzeet/windows/gdi.rb
CHANGED
@@ -5,10 +5,40 @@ module Fzeet
|
|
5
5
|
ffi_lib 'gdi32'
|
6
6
|
ffi_convention :stdcall
|
7
7
|
|
8
|
+
def GetRValue(rgb) LOBYTE(rgb) end
|
9
|
+
def GetGValue(rgb) LOBYTE(rgb >> 8) end
|
10
|
+
def GetBValue(rgb) LOBYTE(rgb >> 16) end
|
11
|
+
def RGB(r, g, b) r | (g << 8) | (b << 16) end
|
12
|
+
|
13
|
+
module_function \
|
14
|
+
:GetRValue, :GetGValue, :GetBValue, :RGB
|
15
|
+
|
8
16
|
DEFAULT_GUI_FONT = 17
|
9
17
|
|
10
18
|
attach_function :GetStockObject, [:int], :pointer
|
19
|
+
|
20
|
+
=begin
|
21
|
+
class LOGFONT < FFI::Struct
|
22
|
+
layout \
|
23
|
+
:lfHeight, :long,
|
24
|
+
:lfWidth, :long,
|
25
|
+
:lfEscapement, :long,
|
26
|
+
:lfOrientation, :long,
|
27
|
+
:lfWeight, :long,
|
28
|
+
:lfItalic, :uchar,
|
29
|
+
:lfUnderline, :uchar,
|
30
|
+
:lfStrikeOut, :uchar,
|
31
|
+
:lfCharSet, :uchar,
|
32
|
+
:lfOutPrecision, :uchar,
|
33
|
+
:lfClipPrecision, :uchar,
|
34
|
+
:lfQuality, :uchar,
|
35
|
+
:lfPitchAndFamily, :uchar,
|
36
|
+
:lfFaceName, [:char, 32]
|
37
|
+
end
|
38
|
+
=end
|
39
|
+
|
11
40
|
attach_function :CreateFontIndirect, :CreateFontIndirectA, [:pointer], :pointer
|
41
|
+
|
12
42
|
attach_function :DeleteObject, [:pointer], :int
|
13
43
|
|
14
44
|
attach_function :MoveToEx, [:pointer, :int, :int, :pointer], :int
|
data/lib/fzeet/windows/kernel.rb
CHANGED
@@ -5,31 +5,84 @@ module Fzeet
|
|
5
5
|
ffi_lib 'kernel32'
|
6
6
|
ffi_convention :stdcall
|
7
7
|
|
8
|
-
attach_function :
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
8
|
+
attach_function :GetModuleHandle, :GetModuleHandleA, [:string], :pointer
|
9
|
+
|
10
|
+
attach_function :LoadLibrary, :LoadLibraryA, [:string], :pointer
|
11
|
+
attach_function :FreeLibrary, [:pointer], :int
|
12
|
+
|
13
|
+
if WINVER.AtLeastWindowsXP?
|
14
|
+
class ACTCTX < FFI::Struct
|
15
|
+
layout \
|
16
|
+
:cbSize, :ulong,
|
17
|
+
:dwFlags, :ulong,
|
18
|
+
:lpSource, :pointer,
|
19
|
+
:wProcessorArchitecture, :ushort,
|
20
|
+
:wLangId, :ushort,
|
21
|
+
:lpAssemblyDirectory, :pointer,
|
22
|
+
:lpResourceName, :pointer,
|
23
|
+
:lpApplicationName, :pointer,
|
24
|
+
:hModule, :pointer
|
25
|
+
end
|
26
|
+
|
27
|
+
attach_function :CreateActCtx, :CreateActCtxA, [:pointer], :pointer
|
28
|
+
attach_function :ReleaseActCtx, [:pointer], :void
|
29
|
+
|
30
|
+
attach_function :ActivateActCtx, [:pointer, :pointer], :int
|
31
|
+
attach_function :DeactivateActCtx, [:ulong, :ulong], :int
|
32
|
+
|
33
|
+
COMMON_CONTROLS_ACTCTX = {
|
34
|
+
handle: INVALID_HANDLE_VALUE,
|
35
|
+
cookie: FFI::MemoryPointer.new(:ulong),
|
36
|
+
activated: false
|
37
|
+
}
|
38
|
+
|
39
|
+
at_exit {
|
40
|
+
DeactivateActCtx(0, COMMON_CONTROLS_ACTCTX[:cookie].get_ulong(0)) if
|
41
|
+
COMMON_CONTROLS_ACTCTX[:activated]
|
42
|
+
|
43
|
+
COMMON_CONTROLS_ACTCTX[:cookie].free
|
44
|
+
|
45
|
+
ReleaseActCtx(COMMON_CONTROLS_ACTCTX[:handle]) unless
|
46
|
+
COMMON_CONTROLS_ACTCTX[:handle] == INVALID_HANDLE_VALUE
|
47
|
+
}
|
22
48
|
end
|
23
49
|
|
24
|
-
|
25
|
-
|
50
|
+
def EnableVisualStyles
|
51
|
+
return unless WINVER.AtLeastWindowsXP?
|
26
52
|
|
27
|
-
|
28
|
-
attach_function :DeactivateActCtx, [:ulong, :ulong], :int
|
53
|
+
raise 'Visual styles already enabled.' if COMMON_CONTROLS_ACTCTX[:activated]
|
29
54
|
|
30
|
-
|
55
|
+
manifest = "#{ENV['TEMP']}/Fzeet.Common-Controls.manifest"
|
31
56
|
|
32
|
-
|
33
|
-
|
57
|
+
File.open(manifest, 'w:utf-8') { |file|
|
58
|
+
file << <<-XML
|
59
|
+
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
|
60
|
+
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
|
61
|
+
<dependency>
|
62
|
+
<dependentAssembly>
|
63
|
+
<assemblyIdentity type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*' />
|
64
|
+
</dependentAssembly>
|
65
|
+
</dependency>
|
66
|
+
</assembly>
|
67
|
+
XML
|
68
|
+
}
|
69
|
+
|
70
|
+
ac = ACTCTX.new
|
71
|
+
|
72
|
+
ac[:cbSize] = ac.size
|
73
|
+
ac[:lpSource] = source = FFI::MemoryPointer.from_string(File.expand_path(manifest))
|
74
|
+
|
75
|
+
COMMON_CONTROLS_ACTCTX[:handle] = DetonateLastError(INVALID_HANDLE_VALUE, :CreateActCtx, ac) { source.free }
|
76
|
+
|
77
|
+
DetonateLastError(0, :ActivateActCtx, COMMON_CONTROLS_ACTCTX[:handle], COMMON_CONTROLS_ACTCTX[:cookie]) { |failed|
|
78
|
+
next unless failed
|
79
|
+
|
80
|
+
ReleaseActCtx(COMMON_CONTROLS_ACTCTX[:handle]); COMMON_CONTROLS_ACTCTX[:handle] = INVALID_HANDLE_VALUE
|
81
|
+
}
|
82
|
+
|
83
|
+
COMMON_CONTROLS_ACTCTX[:activated] = true
|
84
|
+
end
|
85
|
+
|
86
|
+
module_function :EnableVisualStyles
|
34
87
|
end
|
35
88
|
end
|
data/lib/fzeet/windows/ole.rb
CHANGED
@@ -8,9 +8,63 @@ module Fzeet
|
|
8
8
|
attach_function :OleInitialize, [:pointer], :long
|
9
9
|
attach_function :OleUninitialize, [], :void
|
10
10
|
|
11
|
+
def InitializeOle
|
12
|
+
DetonateHresult(:OleInitialize, nil)
|
13
|
+
|
14
|
+
at_exit { OleUninitialize() }
|
15
|
+
end
|
16
|
+
|
17
|
+
module_function :InitializeOle
|
18
|
+
|
11
19
|
attach_function :CoTaskMemFree, [:pointer], :void
|
12
20
|
|
21
|
+
VT_EMPTY = 0
|
22
|
+
VT_NULL = 1
|
23
|
+
VT_I2 = 2
|
24
|
+
VT_I4 = 3
|
25
|
+
VT_R4 = 4
|
26
|
+
VT_R8 = 5
|
27
|
+
VT_CY = 6
|
28
|
+
VT_DATE = 7
|
29
|
+
VT_BSTR = 8
|
30
|
+
VT_DISPATCH = 9
|
31
|
+
VT_ERROR = 10
|
13
32
|
VT_BOOL = 11
|
33
|
+
VT_VARIANT = 12
|
34
|
+
VT_UNKNOWN = 13
|
35
|
+
VT_DECIMAL = 14
|
36
|
+
VT_I1 = 16
|
37
|
+
VT_UI1 = 17
|
38
|
+
VT_UI2 = 18
|
39
|
+
VT_UI4 = 19
|
40
|
+
VT_I8 = 20
|
41
|
+
VT_UI8 = 21
|
42
|
+
VT_INT = 22
|
43
|
+
VT_UINT = 23
|
44
|
+
VT_VOID = 24
|
45
|
+
VT_HRESULT = 25
|
46
|
+
VT_PTR = 26
|
47
|
+
VT_SAFEARRAY = 27
|
48
|
+
VT_CARRAY = 28
|
49
|
+
VT_USERDEFINED = 29
|
50
|
+
VT_LPSTR = 30
|
51
|
+
VT_LPWSTR = 31
|
52
|
+
VT_FILETIME = 64
|
53
|
+
VT_BLOB = 65
|
54
|
+
VT_STREAM = 66
|
55
|
+
VT_STORAGE = 67
|
56
|
+
VT_STREAMED_OBJECT = 68
|
57
|
+
VT_STORED_OBJECT = 69
|
58
|
+
VT_BLOB_OBJECT = 70
|
59
|
+
VT_CF = 71
|
60
|
+
VT_CLSID = 72
|
61
|
+
VT_VECTOR = 0x1000
|
62
|
+
VT_ARRAY = 0x2000
|
63
|
+
VT_BYREF = 0x4000
|
64
|
+
VT_RESERVED = 0x8000
|
65
|
+
VT_ILLEGAL = 0xffff
|
66
|
+
VT_ILLEGALMASKED = 0xfff
|
67
|
+
VT_TYPEMASK = 0xff
|
14
68
|
|
15
69
|
class PROPERTYKEY < FFI::Struct
|
16
70
|
layout \
|
@@ -208,6 +262,12 @@ module Fzeet
|
|
208
262
|
|
209
263
|
def bool; raise 'Wrong type tag.' unless self[:vt] == VT_BOOL; self[:boolVal] != 0 end
|
210
264
|
def bool=(bool) self[:vt] = VT_BOOL; self[:boolVal] = (bool) ? -1 : 0 end
|
265
|
+
|
266
|
+
def int; raise 'Wrong type tag.' unless self[:vt] == VT_I4; self[:intVal] end
|
267
|
+
def int=(int) self[:vt] = VT_I4; self[:intVal] = int end
|
268
|
+
|
269
|
+
def uint; raise 'Wrong type tag.' unless self[:vt] == VT_UI4; self[:uintVal] end
|
270
|
+
def uint=(uint) self[:vt] = VT_UI4; self[:uintVal] = uint end
|
211
271
|
end
|
212
272
|
end
|
213
273
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative 'ole'
|
2
|
+
|
3
|
+
module Fzeet
|
4
|
+
module Windows
|
5
|
+
ffi_lib 'propsys'
|
6
|
+
ffi_convention :stdcall
|
7
|
+
|
8
|
+
IPropertyStore = COM::Interface[IUnknown,
|
9
|
+
GUID['886d8eeb-8cf2-4446-8d02-cdba1dbdcf99'],
|
10
|
+
|
11
|
+
GetCount: [[:pointer], :long],
|
12
|
+
GetAt: [[:ulong, :pointer], :long],
|
13
|
+
GetValue: [[:pointer, :pointer], :long],
|
14
|
+
SetValue: [[:pointer, :pointer], :long],
|
15
|
+
Commit: [[], :long]
|
16
|
+
]
|
17
|
+
|
18
|
+
PropertyStore = COM::Instance[IPropertyStore]
|
19
|
+
|
20
|
+
class PropertyStore
|
21
|
+
def count; count = 0; FFI::MemoryPointer.new(:ulong) { |p| count = p.get_ulong(0) }; count end
|
22
|
+
alias :size :count
|
23
|
+
alias :length :count
|
24
|
+
|
25
|
+
# superclass.superclass is FFI::Struct, so do NOT touch [] and []=
|
26
|
+
def get(k) PROPVARIANT.new.tap { |v| GetValue(k, v) } end
|
27
|
+
def set(k, v) SetValue(k, v); self end
|
28
|
+
|
29
|
+
def prop(*args)
|
30
|
+
case args.length
|
31
|
+
when 1; get(*args)
|
32
|
+
when 2; set(*args)
|
33
|
+
else raise ArgumentError
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def commit; Commit(); self end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative 'Common'
|
2
|
+
|
3
|
+
module Fzeet
|
4
|
+
module Windows
|
5
|
+
BIF_RETURNONLYFSDIRS = 0x00000001
|
6
|
+
BIF_DONTGOBELOWDOMAIN = 0x00000002
|
7
|
+
BIF_STATUSTEXT = 0x00000004
|
8
|
+
BIF_RETURNFSANCESTORS = 0x00000008
|
9
|
+
BIF_EDITBOX = 0x00000010
|
10
|
+
BIF_VALIDATE = 0x00000020
|
11
|
+
BIF_NEWDIALOGSTYLE = 0x00000040
|
12
|
+
BIF_USENEWUI = BIF_NEWDIALOGSTYLE | BIF_EDITBOX
|
13
|
+
BIF_BROWSEINCLUDEURLS = 0x00000080
|
14
|
+
BIF_UAHINT = 0x00000100
|
15
|
+
BIF_NONEWFOLDERBUTTON = 0x00000200
|
16
|
+
BIF_NOTRANSLATETARGETS = 0x00000400
|
17
|
+
BIF_BROWSEFORCOMPUTER = 0x00001000
|
18
|
+
BIF_BROWSEFORPRINTER = 0x00002000
|
19
|
+
BIF_BROWSEINCLUDEFILES = 0x00004000
|
20
|
+
BIF_SHAREABLE = 0x00008000
|
21
|
+
BIF_BROWSEFILEJUNCTIONS = 0x00010000
|
22
|
+
|
23
|
+
callback :BFFCALLBACK, [:pointer, :uint, :long, :long], :int
|
24
|
+
|
25
|
+
class BROWSEINFO < FFI::Struct
|
26
|
+
layout \
|
27
|
+
:hwndOwner, :pointer,
|
28
|
+
:pidlRoot, :pointer,
|
29
|
+
:pszDisplayName, :pointer,
|
30
|
+
:lpszTitle, :pointer,
|
31
|
+
:ulFlags, :uint,
|
32
|
+
:lpfn, :BFFCALLBACK,
|
33
|
+
:lParam, :long,
|
34
|
+
:iImage, :int
|
35
|
+
end
|
36
|
+
|
37
|
+
attach_function :SHBrowseForFolder, :SHBrowseForFolderA, [:pointer], :pointer
|
38
|
+
end
|
39
|
+
end
|
data/lib/fzeet/windows/shell.rb
CHANGED
@@ -1,43 +1 @@
|
|
1
|
-
require_relative '
|
2
|
-
|
3
|
-
module Fzeet
|
4
|
-
module Windows
|
5
|
-
ffi_lib 'shell32'
|
6
|
-
ffi_convention :stdcall
|
7
|
-
|
8
|
-
BIF_RETURNONLYFSDIRS = 0x00000001
|
9
|
-
BIF_DONTGOBELOWDOMAIN = 0x00000002
|
10
|
-
BIF_STATUSTEXT = 0x00000004
|
11
|
-
BIF_RETURNFSANCESTORS = 0x00000008
|
12
|
-
BIF_EDITBOX = 0x00000010
|
13
|
-
BIF_VALIDATE = 0x00000020
|
14
|
-
BIF_NEWDIALOGSTYLE = 0x00000040
|
15
|
-
BIF_USENEWUI = BIF_NEWDIALOGSTYLE | BIF_EDITBOX
|
16
|
-
BIF_BROWSEINCLUDEURLS = 0x00000080
|
17
|
-
BIF_UAHINT = 0x00000100
|
18
|
-
BIF_NONEWFOLDERBUTTON = 0x00000200
|
19
|
-
BIF_NOTRANSLATETARGETS = 0x00000400
|
20
|
-
BIF_BROWSEFORCOMPUTER = 0x00001000
|
21
|
-
BIF_BROWSEFORPRINTER = 0x00002000
|
22
|
-
BIF_BROWSEINCLUDEFILES = 0x00004000
|
23
|
-
BIF_SHAREABLE = 0x00008000
|
24
|
-
BIF_BROWSEFILEJUNCTIONS = 0x00010000
|
25
|
-
|
26
|
-
callback :BFFCALLBACK, [:pointer, :uint, :long, :long], :int
|
27
|
-
|
28
|
-
class BROWSEINFO < FFI::Struct
|
29
|
-
layout \
|
30
|
-
:hwndOwner, :pointer,
|
31
|
-
:pidlRoot, :pointer,
|
32
|
-
:pszDisplayName, :pointer,
|
33
|
-
:lpszTitle, :pointer,
|
34
|
-
:ulFlags, :uint,
|
35
|
-
:lpfn, :BFFCALLBACK,
|
36
|
-
:lParam, :long,
|
37
|
-
:iImage, :int
|
38
|
-
end
|
39
|
-
|
40
|
-
attach_function :SHBrowseForFolder, :SHBrowseForFolderA, [:pointer], :pointer
|
41
|
-
attach_function :SHGetPathFromIDList, :SHGetPathFromIDListA, [:pointer, :pointer], :int
|
42
|
-
end
|
43
|
-
end
|
1
|
+
require_relative 'shell/FolderDialog'
|