win32api4ruby 0.2.2

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.
@@ -0,0 +1,320 @@
1
+ # -*- coding: UTF-8 -*-
2
+
3
+ require 'win32api4ruby/base'
4
+
5
+ module Win32api4ruby
6
+ class Winspool < Base
7
+ extend FFI::Library
8
+ ffi_lib 'winspool.drv'
9
+ ffi_convention :stdcall
10
+
11
+ PRINTER_ENUM_DEFAULT = 0x00000001
12
+ PRINTER_ENUM_LOCAL = 0x00000002
13
+ PRINTER_ENUM_CONNECTIONS = 0x00000004
14
+ PRINTER_ENUM_FAVORITE = 0x00000004
15
+ PRINTER_ENUM_NAME = 0x00000008
16
+ PRINTER_ENUM_REMOTE = 0x00000010
17
+ PRINTER_ENUM_SHARED = 0x00000020
18
+ PRINTER_ENUM_NETWORK = 0x00000040
19
+
20
+ PRINTER_INFO_1 = 1
21
+ PRINTER_INFO_2 = 2
22
+ PRINTER_INFO_3 = 3
23
+ PRINTER_INFO_4 = 4
24
+ PRINTER_INFO_5 = 5
25
+
26
+ DM_PROMPT = 4
27
+ DM_IN_PROMPT = DM_PROMPT
28
+ DM_MODIFY = 8
29
+ DM_IN_BUFFER = DM_MODIFY
30
+ DM_COPY = 2
31
+ DM_OUT_BUFFER = DM_COPY
32
+
33
+ IDOK = 1
34
+ IDCANCEL = 2
35
+
36
+ attach_function :EnumPrintersA, [ :long, :pointer, :long, :pointer, :long, :pointer, :pointer ], :int
37
+ attach_function :EnumPrintersW, [ :long, :pointer, :long, :pointer, :long, :pointer, :pointer ], :int
38
+ def self.enum_printers(flags, name, level)
39
+ pcbNeeded = FFI::MemoryPointer.new(:long)
40
+ pcReturned = FFI::MemoryPointer.new(:long)
41
+ pcbNeeded.write_long 0
42
+
43
+ # erst einmal ermitteln, wieviel Speicher gebraucht wird
44
+ args = flags, name, level, nil, 0, pcbNeeded, pcReturned
45
+ unicode ? EnumPrintersW(*args) : EnumPrintersA(*args)
46
+
47
+ # und dann die Infos holen
48
+ cbBuf = pcbNeeded.read_long
49
+ # puts "pcbNeeded: #{cbBuf}"
50
+ pPrinterEnum = FFI::MemoryPointer.new(cbBuf)
51
+ exception_for_0{
52
+ args = flags, name, level, pPrinterEnum, cbBuf, pcbNeeded, pcReturned
53
+ unicode ? EnumPrintersW(*args) : EnumPrintersA(*args)
54
+ }
55
+
56
+ #~ p "Laenge des übergebenen Puffers: #{cbBuf}"
57
+ returned = pcReturned.read_long
58
+ # puts "benoetigte Bytes: #{pcbNeeded.read_long}"
59
+ # puts "zurueckgegebene Drucker: #{returned}"
60
+
61
+ printers = (0...returned).map{|idx|
62
+ case level
63
+ when PRINTER_INFO_4
64
+ create_PRINTER_INFO_4(pPrinterEnum + idx*PRINTER_INFO_4_struct.size)
65
+ else
66
+ raise "unsupported printer info level #{level.inspect}"
67
+ end
68
+ }
69
+ return printers
70
+ end
71
+
72
+ class PRINTER_INFO_4_struct < FFI::Struct
73
+ # typedef self.struct _PRINTER_INFO_4 {
74
+ # LPTSTR pPrinterName;
75
+ # LPTSTR pServerName;
76
+ # DWORD Attributes;
77
+ # }PRINTER_INFO_4, *PPRINTER_INFO_4;
78
+ #
79
+ layout :pPrinterName, :pointer,
80
+ :pServerName, :pointer,
81
+ :Attributes, :uint32
82
+ end
83
+
84
+ def self.create_PRINTER_INFO_4(data_or_size=nil)
85
+ create_struct(PRINTER_INFO_4_struct, data_or_size)
86
+ end
87
+
88
+
89
+ # LONG DocumentProperties(
90
+ # __in HWND hWnd,
91
+ # __in HANDLE hPrinter,
92
+ # __in LPTSTR pDeviceName,
93
+ # __out PDEVMODE pDevModeOutput,
94
+ # __in PDEVMODE pDevModeInput,
95
+ # __in DWORD fMode
96
+ # );
97
+ #
98
+ attach_function :DocumentPropertiesW, [ :handle, :handle, :pointer, :pointer, :pointer, :uint32 ], :long
99
+ attach_function :DocumentPropertiesA, [ :handle, :handle, :pointer, :pointer, :pointer, :uint32 ], :long
100
+ def self.document_properties(hWnd, hPrinter, deviceName, devModeInput, mode)
101
+ # erst einmal ermitteln, wieviel Speicher gebraucht wird
102
+ bufsize = exception_for_negative{
103
+ args = hWnd, hPrinter, deviceName, nil, devModeInput, 0
104
+ unicode ? DocumentPropertiesW(*args) : DocumentPropertiesA(*args)
105
+ }
106
+
107
+ # und dann die Infos holen
108
+ pDevModeOutput = create_DEVMOD(bufsize)
109
+ res = exception_for_negative{
110
+ args = hWnd, hPrinter, deviceName, pDevModeOutput, devModeInput, mode
111
+ unicode ? DocumentPropertiesW(*args) : DocumentPropertiesA(*args)
112
+ }
113
+ if res==IDOK
114
+ return pDevModeOutput
115
+ else
116
+ return nil
117
+ end
118
+ end
119
+
120
+
121
+ attach_function :OpenPrinterW, [ :pointer, :pointer, :pointer ], :long
122
+ attach_function :OpenPrinterA, [ :pointer, :pointer, :pointer ], :long
123
+ # BOOL OpenPrinter(
124
+ # __in LPTSTR pPrinterName,
125
+ # __out LPHANDLE phPrinter,
126
+ # __in LPPRINTER_DEFAULTS pDefault
127
+ # );
128
+ def self.open_printer(pPrinterName, phPrinter, pDefault)
129
+ check(pPrinterName,String)
130
+ #phPrinter is the PRINTER_DEFAULTS structure.. 0 for default
131
+ # since we want to send through a zero for default, can't enforce string check...
132
+ exception_for_0{
133
+ args = pPrinterName, phPrinter, pDefault
134
+ unicode ? OpenPrinterW(*args) : OpenPrinterA(*args)
135
+ }
136
+ end
137
+ #-----------------------------------------------------------------------------------------------------------------
138
+
139
+ attach_function :ClosePrinter, [ :handle ], :int
140
+ def self.close_printer(hPrinter)
141
+ exception_for_0{
142
+ ClosePrinter(hPrinter)
143
+ }
144
+ end
145
+ #-----------------------------------------------------------------------------------------------------------------
146
+
147
+ attach_function :AbortPrinter, [ :handle ], :int
148
+ def self.abort_printer(hPrinter)
149
+ exception_for_0{
150
+ AbortPrinter(hPrinter)
151
+ }
152
+ end
153
+ #-----------------------------------------------------------------------------------------------------------------
154
+
155
+ attach_function :StartDocPrinterA, [ :handle, :uint32, :pointer ], :uint32
156
+ attach_function :StartDocPrinterW, [ :handle, :uint32, :pointer ], :uint32
157
+ def self.start_doc_printer(hPrinter, level, pDocInfo)
158
+ check(level, Integer);
159
+ # check(pDocInfo, String)
160
+ exception_for_0{
161
+ args = hPrinter, level, pDocInfo
162
+ unicode ? StartDocPrinterW(*args) : StartDocPrinterA(*args)
163
+ }
164
+ end
165
+ #-----------------------------------------------------------------------------------------------------------------
166
+
167
+ attach_function :EndDocPrinter, [ :handle ], :int
168
+ def self.end_doc_printer(hPrinter)
169
+ exception_for_0{
170
+ EndDocPrinter(hPrinter)
171
+ }
172
+ end
173
+ #-----------------------------------------------------------------------------------------------------------------
174
+
175
+ attach_function :StartPagePrinter, [ :handle ], :int
176
+ def self.start_page_printer(hPrinter)
177
+ exception_for_0{
178
+ StartPagePrinter(hPrinter)
179
+ }
180
+ end
181
+ #-----------------------------------------------------------------------------------------------------------------
182
+
183
+ attach_function :EndPagePrinter, [ :handle ], :int
184
+ def self.end_page_printer(hPrinter)
185
+ exception_for_0{
186
+ EndPagePrinter(hPrinter)
187
+ }
188
+ end
189
+ #-----------------------------------------------------------------------------------------------------------------
190
+
191
+ attach_function :GetPrinterA, [ :handle, :uint32, :pointer, :uint32, :pointer ], :int
192
+ attach_function :GetPrinterW, [ :handle, :uint32, :pointer, :uint32, :pointer ], :int
193
+ def self.get_printer(hPrinter, level, pPrinter, cbBuf, pcbNeeded)
194
+ #~ BOOL GetPrinter(
195
+ #~ __in HANDLE hPrinter,
196
+ #~ __in DWORD Level,
197
+ #~ __out LPBYTE pPrinter,
198
+ #~ __in DWORD cbBuf,
199
+ #~ __out LPDWORD pcbNeeded
200
+ #~ );
201
+ #~ exception_for_0{
202
+ args = hPrinter, level, pPrinter, cbBuf, pcbNeeded
203
+ unicode ? GetPrinterW(*args) : GetPrinterA(*args)
204
+ #~ }
205
+ end
206
+
207
+ #-----------------------------------------------------------------------------------------------------------------
208
+
209
+ attach_function :WritePrinter, [ :handle, :pointer, :uint32, :pointer ], :int
210
+ def self.write_printer(hPrinter, pBuf)
211
+ #~ BOOL WritePrinter(
212
+ #~ __in HANDLE hPrinter,
213
+ #~ __in LPVOID pBuf,
214
+ #~ __in DWORD cbBuf,
215
+ #~ __out LPDWORD pcWritten
216
+ #~ );
217
+ pcWritten = FFI::MemoryPointer.new :uint32
218
+ exception_for_0{
219
+ WritePrinter(hPrinter, pBuf, pBuf.length, pcWritten)
220
+ }
221
+ pcWritten.read_uint32
222
+ end
223
+
224
+ class DOC_INFO_1W < FFI::Struct
225
+ layout :pDocName, :pointer,
226
+ :pOutputFile, :pointer,
227
+ :pDatatype, :pointer
228
+ end
229
+
230
+ class DOC_INFO_1A < FFI::Struct
231
+ layout :pDocName, :pointer,
232
+ :pOutputFile, :pointer,
233
+ :pDatatype, :pointer
234
+ end
235
+
236
+ def self.create_DOC_INFO_1(data_or_size=nil)
237
+ create_struct(unicode ? DOC_INFO_1W : DOC_INFO_1A, data_or_size)
238
+ end
239
+
240
+ #-----------------------------------------------------------------------------------------------------------------
241
+
242
+ class DEVMODW < FFI::Struct
243
+ layout :dmDeviceName, [:uint16, 32],
244
+ :dmSpecVersion, :uint16,
245
+ :dmDriverVersion, :uint16,
246
+ :dmSize, :uint16,
247
+ :dmDriverExtra, :uint16,
248
+ :dmFields, :uint32,
249
+ :dmOrientation, :int16,
250
+ :dmPaperSize, :int16,
251
+ :dmPaperLength, :int16,
252
+ :dmPaperWidth, :int16,
253
+ :dmScale, :int16,
254
+ :dmCopies, :int16,
255
+ :dmDefaultSource, :int16,
256
+ :dmPrintQuality, :int16,
257
+ :dmColor, :int16,
258
+ :dmDuplex, :int16,
259
+ :dmYResolution, :int16,
260
+ :dmTTOption, :int16,
261
+ :dmCollate, :int16,
262
+ :dmFormName, [:uint16, 32],
263
+ :dmLogPixels, :uint16,
264
+ :dmBitsPerPel, :uint32,
265
+ :dmPelsWidth, :uint32,
266
+ :dmPelsHeight, :uint32,
267
+ :dmNup, :uint32,
268
+ :dmDisplayFrequency, :uint32,
269
+ :dmICMMethod, :uint32,
270
+ :dmICMIntent, :uint32,
271
+ :dmMediaType, :uint32,
272
+ :dmDitherType, :uint32,
273
+ :dmReserved1, :uint32,
274
+ :dmReserved2, :uint32,
275
+ :dmPanningWidth, :uint32,
276
+ :dmPanningHeight, :uint32
277
+ end
278
+
279
+ class DEVMODA < FFI::Struct
280
+ layout :dmDeviceName, [:uint8, 32],
281
+ :dmSpecVersion, :uint16,
282
+ :dmDriverVersion, :uint16,
283
+ :dmSize, :uint16,
284
+ :dmDriverExtra, :uint16,
285
+ :dmFields, :uint32,
286
+ :dmOrientation, :int16,
287
+ :dmPaperSize, :int16,
288
+ :dmPaperLength, :int16,
289
+ :dmPaperWidth, :int16,
290
+ :dmScale, :int16,
291
+ :dmCopies, :int16,
292
+ :dmDefaultSource, :int16,
293
+ :dmPrintQuality, :int16,
294
+ :dmColor, :int16,
295
+ :dmDuplex, :int16,
296
+ :dmYResolution, :int16,
297
+ :dmTTOption, :int16,
298
+ :dmCollate, :int16,
299
+ :dmFormName, [:uint8, 32],
300
+ :dmLogPixels, :uint16,
301
+ :dmBitsPerPel, :uint32,
302
+ :dmPelsWidth, :uint32,
303
+ :dmPelsHeight, :uint32,
304
+ :dmNup, :uint32,
305
+ :dmDisplayFrequency, :uint32,
306
+ :dmICMMethod, :uint32,
307
+ :dmICMIntent, :uint32,
308
+ :dmMediaType, :uint32,
309
+ :dmDitherType, :uint32,
310
+ :dmReserved1, :uint32,
311
+ :dmReserved2, :uint32,
312
+ :dmPanningWidth, :uint32,
313
+ :dmPanningHeight, :uint32
314
+ end
315
+
316
+ def self.create_DEVMOD(data_or_size=nil)
317
+ create_struct(unicode ? DEVMODW : DEVMODA, data_or_size)
318
+ end
319
+ end
320
+ end
@@ -0,0 +1,12 @@
1
+ # -*- coding: UTF-8 -*-
2
+
3
+ module Win32api4ruby
4
+ VERSION = '0.2.2'
5
+
6
+ autoload 'Base', 'win32api4ruby/base'
7
+ autoload 'Comdlg', 'win32api4ruby/comdlg'
8
+ autoload 'Gdi', 'win32api4ruby/gdi'
9
+ autoload 'Kernel', 'win32api4ruby/kernel'
10
+ autoload 'User', 'win32api4ruby/user'
11
+ autoload 'Winspool', 'win32api4ruby/winspool'
12
+ end
data/test/all_tests.rb ADDED
@@ -0,0 +1,5 @@
1
+ require "test/unit"
2
+ require "win32api4ruby"
3
+
4
+ basedir = File.dirname(__FILE__)
5
+ Dir[File.join(basedir, 'test_*.rb')].each{|f| load f }
data/test/base.rb ADDED
@@ -0,0 +1,17 @@
1
+
2
+ def define_test_class(modul)
3
+ Class.instance_eval <<-EOT
4
+ class TestAnsi#{modul} < Test::Unit::TestCase
5
+ include #{modul}
6
+ def setup
7
+ Win32api4ruby::Base.unicode = false
8
+ end
9
+ end
10
+ class TestUnicode#{modul} < Test::Unit::TestCase
11
+ include #{modul}
12
+ def setup
13
+ Win32api4ruby::Base.unicode = true
14
+ end
15
+ end
16
+ EOT
17
+ end
@@ -0,0 +1,30 @@
1
+ require "test/unit"
2
+ require "win32api4ruby"
3
+ require File.join(File.dirname(__FILE__),"base")
4
+
5
+ module TestComdlg
6
+ include Win32api4ruby
7
+
8
+ def test_print_dialog
9
+ # wird zwar gestartet, liefert aber keine gef�llte struktur zur�ck
10
+ pdlg = Comdlg.create_PRINTDLG
11
+ pdlg[:hwndOwner] = 0
12
+ pdlg[:Flags] = Comdlg::PD_RETURNDC | Comdlg::PD_NOSELECTION
13
+ ok = Comdlg.print_dlg(pdlg)
14
+
15
+ puts "res: #{ok.to_s(16)}" # pdlg: #{pdlg.values}"
16
+ hDevNames = pdlg[:hDevNames]
17
+ Kernel.with_global_lock(hDevNames){|pDevNames|
18
+ dn_prt = Comdlg.create_DEVNAMES(pDevNames)
19
+
20
+ u = Base.unicode ? 2 : 1
21
+ driver = FFI::Pointer.new(pDevNames+dn_prt[:wDriverOffset]*u).to_s_utf8
22
+ device = FFI::Pointer.new(pDevNames+dn_prt[:wDeviceOffset]*u).to_s_utf8
23
+ output = FFI::Pointer.new(pDevNames+dn_prt[:wOutputOffset]*u).to_s_utf8
24
+ default = FFI::Pointer.new(pDevNames+dn_prt[:wDefault]*u).to_s_utf8
25
+ puts "Driver: #{driver.inspect} Device: #{device.inspect} Output: #{output.inspect} Default: #{default.inspect}"
26
+ }
27
+ end
28
+ end
29
+
30
+ define_test_class(TestComdlg)
data/test/test_gdi.rb ADDED
@@ -0,0 +1,85 @@
1
+ require "test/unit"
2
+ require "win32api4ruby"
3
+ require File.join(File.dirname(__FILE__),"base")
4
+
5
+ module TestGdi
6
+ include Win32api4ruby
7
+
8
+ def test_create_font
9
+ nHeight = 0
10
+ nWidth = 0
11
+ nEscapement = 0
12
+ nOrientation = 0
13
+ fnWeight = 400
14
+ fdwItalic = 0
15
+ fdwUnderline = 0
16
+ fdwStrikeOut = 0
17
+ fdwCharSet = 0
18
+ fdwOutputPrecision = 0
19
+ fdwClipPrecision = 0
20
+ fdwQuality = 0
21
+ fdwPitchAndFamily = 0
22
+ lpszFace = "Arial".to_s_win32
23
+
24
+ font = Gdi.create_font(nHeight, nWidth, nEscapement, nOrientation, fnWeight, fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet, fdwOutputPrecision, fdwClipPrecision, fdwQuality, fdwPitchAndFamily, lpszFace)
25
+
26
+ assert font.to_i != 0
27
+ end
28
+
29
+ def test_create_bitmap
30
+ hwnd = User.create_window_ex(0, 'STATIC'.to_s_win32, 'Name'.to_s_win32, User::WS_VISIBLE, 0,0,600,300, nil, nil, nil)
31
+ hdc = User.get_dc(hwnd)
32
+ lpbmi = Gdi.create_BITMAPINFOHEADER
33
+
34
+ xDest, yDest, dwWidth, dwHeight, xSrc, ySrc = 0,0, 60,50, 0,0
35
+ lpvBits = ('z000'+'0z00'+'00z0') * (dwWidth/3) * dwHeight
36
+ uStartScan, cScanLines = 0, dwHeight
37
+ fuColorUse = Gdi::DIB_RGB_COLORS
38
+
39
+ lpbmi[:biWidth] = dwWidth
40
+ lpbmi[:biHeight] = dwHeight
41
+ lpbmi[:biPlanes] = 1
42
+ lpbmi[:biBitCount] = 32
43
+ lpbmi[:biCompression] = Gdi::BI_RGB
44
+ lpbmi[:biSizeImage] = lpvBits.length
45
+ lpbmi[:biXPelsPerMeter] = 0
46
+ lpbmi[:biYPelsPerMeter] = 0
47
+ lpbmi[:biClrUsed] = 0
48
+ lpbmi[:biClrImportant] = 0
49
+
50
+ Gdi.set_dibits_to_device(hdc, xDest, yDest, dwWidth, dwHeight, xSrc, ySrc, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse)
51
+ end
52
+
53
+ def test_escape
54
+ hPrinter = Win32api4ruby::Gdi.create_dc(nil, "Microsoft XPS Document Writer".to_s_win32, nil, nil)
55
+ #~ hPrinter = Win32api4ruby::Gdi.create_dc(nil, "Zebra P430i Card Printer USB".to_s_win32, nil, nil)
56
+
57
+ documentName = "Test Escape"
58
+ docinfo = Win32api4ruby::Gdi.create_DOCINFO
59
+ docinfo[:lpszDocName] = documentName.to_s_win32
60
+ Gdi.start_doc(hPrinter, docinfo)
61
+
62
+ send_escape(hPrinter, "MCL")
63
+ send_escape(hPrinter, "MCI")
64
+
65
+ Gdi.end_doc(hPrinter)
66
+ Gdi.delete_dc(hPrinter)
67
+ GC.start
68
+ end
69
+
70
+ private
71
+
72
+ def send_escape(hPrinter, escape)
73
+ command = ["1B", escape, "0D"].pack("H*a*H*")
74
+ puts("Send #{escape}")
75
+ start = Time.now
76
+ Gdi.escape(hPrinter, Gdi::PASSTHROUGH, [command.length, command].pack('va*'), nil)
77
+ # dur = Time.now - start
78
+ # puts("Time for #{escape}: #{dur}s")
79
+ # puts("Sleep for 5s...")
80
+ sleep(5)
81
+ end
82
+
83
+ end
84
+
85
+ define_test_class(TestGdi)
@@ -0,0 +1,34 @@
1
+ require "test/unit"
2
+ require "win32api4ruby"
3
+ require "ffi"
4
+ require File.join(File.dirname(__FILE__),"base")
5
+
6
+ module TestKernel
7
+ include Win32api4ruby
8
+
9
+ def test_global_lock
10
+ assert_raise(Win32api4ruby::Base::ApiError){
11
+ Kernel.global_lock(FFI::Pointer.new(1234567))
12
+ }
13
+ end
14
+
15
+ def test_format_message
16
+ message = FFI::MemoryPointer.new(1024) #store 1kb space
17
+ Kernel.format_message(0x1000, '', 100, 0, message, 1024, '')
18
+ mu = message.to_s_utf8
19
+ assert mu.length > 5
20
+ assert mu.length < 100
21
+ if String.method_defined?(:encoding)
22
+ assert mu.valid_encoding?
23
+ assert_equal Encoding::UTF_8, mu.encoding
24
+ end
25
+ end
26
+
27
+ def test_get_set_last_error
28
+ Kernel.set_last_error(100)
29
+ # get_last_error wird bereits irgendwo vorher abgefragt:
30
+ assert_equal 100, Kernel.get_last_error
31
+ end
32
+ end
33
+
34
+ define_test_class(TestKernel)
data/test/test_user.rb ADDED
@@ -0,0 +1,15 @@
1
+ require "test/unit"
2
+ require "win32api4ruby"
3
+ require File.join(File.dirname(__FILE__),"base")
4
+
5
+ module TestUser
6
+ include Win32api4ruby
7
+
8
+ def test_create_window_ex
9
+ hwnd = User.create_window_ex(0, 'Button'.to_s_win32, "name".to_s_win32, User::WS_VISIBLE, 0,0,100,100, nil, nil, nil)
10
+ assert hwnd.to_i > 0
11
+ User.destroy_window(hwnd)
12
+ end
13
+ end
14
+
15
+ define_test_class(TestUser)
@@ -0,0 +1,36 @@
1
+ require "test/unit"
2
+ require "win32api4ruby"
3
+ require File.join(File.dirname(__FILE__),"base")
4
+
5
+ module TestWinspool
6
+ include Win32api4ruby
7
+
8
+ def test_enum_printers
9
+ flags = Winspool::PRINTER_ENUM_NAME
10
+ name = nil
11
+ level = 4
12
+ infos = Winspool.enum_printers(flags, name, level)
13
+ infos[0..1].each{|info|
14
+ puts "PrinterName: #{info[:pPrinterName].to_s_utf8}, ServerName: #{info[:pServerName].to_s_utf8}, Attributes: #{info[:Attributes]}"
15
+ }
16
+ end
17
+
18
+ def test_document_properties
19
+ flags = Winspool::PRINTER_ENUM_NAME
20
+ name = nil
21
+ level = 4
22
+ infos = Winspool.enum_printers(flags, name, level)
23
+ info = infos[0]
24
+
25
+ if info
26
+ devmod = Winspool.document_properties nil, nil, info[:pPrinterName], nil, Winspool::DM_OUT_BUFFER
27
+ assert devmod.size > 10
28
+ assert_operator 50..10000, :===, devmod[:dmYResolution]
29
+ assert_operator 50..10000, :===, devmod[:dmPrintQuality]
30
+ else
31
+ puts "no printer installed"
32
+ end
33
+ end
34
+ end
35
+
36
+ define_test_class(TestWinspool)
data.tar.gz.sig ADDED
Binary file
metadata ADDED
@@ -0,0 +1,139 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: win32api4ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.2
5
+ platform: ruby
6
+ authors:
7
+ - Lars Kanis
8
+ bindir: bin
9
+ cert_chain:
10
+ - |
11
+ -----BEGIN CERTIFICATE-----
12
+ MIIEBDCCAmygAwIBAgIBBDANBgkqhkiG9w0BAQsFADAoMSYwJAYDVQQDDB1sYXJz
13
+ L0RDPWdyZWl6LXJlaW5zZG9yZi9EQz1kZTAeFw0yNjAxMDUxMTE5MzRaFw0yNzAx
14
+ MDUxMTE5MzRaMCgxJjAkBgNVBAMMHWxhcnMvREM9Z3JlaXotcmVpbnNkb3JmL0RD
15
+ PWRlMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAwum6Y1KznfpzXOT/
16
+ mZgJTBbxZuuZF49Fq3K0WA67YBzNlDv95qzSp7V/7Ek3NCcnT7G+2kSuhNo1FhdN
17
+ eSDO/moYebZNAcu3iqLsuzuULXPLuoU0GsMnVMqV9DZPh7cQHE5EBZ7hlzDBK7k/
18
+ 8nBMvR0mHo77kIkapHc26UzVq/G0nKLfDsIHXVylto3PjzOumjG6GhmFN4r3cP6e
19
+ SDfl1FSeRYVpt4kmQULz/zdSaOH3AjAq7PM2Z91iGwQvoUXMANH2v89OWjQO/NHe
20
+ JMNDFsmHK/6Ji4Kk48Z3TyscHQnipAID5GhS1oD21/WePdj7GhmbF5gBzkV5uepd
21
+ eJQPgWGwrQW/Z2oPjRuJrRofzWfrMWqbOahj9uth6WSxhNexUtbjk6P8emmXOJi5
22
+ chQPnWX+N3Gj+jjYxqTFdwT7Mj3pv1VHa+aNUbqSPpvJeDyxRIuo9hvzDaBHb/Cg
23
+ 9qRVcm8a96n4t7y2lrX1oookY6bkBaxWOMtWlqIprq8JZXM9AgMBAAGjOTA3MAkG
24
+ A1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQ4h1tIyvdUWtMI739xMzTR
25
+ 7EfMFzANBgkqhkiG9w0BAQsFAAOCAYEAg/1LuXN3X8xwHVnhRvmBCZYkNErko40y
26
+ juq/qPF9vkPGxLEGaeZF1rv/obTs5SgIGEUkWdRsOl3F6bQN4MYUFlN/n6rPx19g
27
+ CqUMkmRtuFD+9EFBI4twoF2IJS0pYr9tkjUq8mb0VXblvfbEEUf460BJmuBXZTc6
28
+ OoLQHxjhhqhKBoP4lHXg/OMK9dnGn8+5DoKcsyWQvqq/GdK8pi4E47M/egzw54Go
29
+ g+oeyGDsNKOQlnIA9gbyPpExD1+akJ4v88T8jOUnsOkhBBUkpSktC2QmEYIU5e9j
30
+ N7muw6O5Bz3CQuSWIEjj9mMUS2fEEfq2km6zO5vs5eD6TdFnt8AC/HlOrPaxGcUX
31
+ Hjw/K7ZTvZLEb4awRijdy4wx3OlL9FAyZPjYOh8TdJrLl076c7GyimAkgnc8BrL5
32
+ g1vGc759o2t3KNnlUg8VwqkhFJp4gCko1QO/8Io5hPQZOvJw8dmqNiiiHqaDupfl
33
+ CI4mk2K8yQa8xtQ/RmFZxYS5XbHhDJCw
34
+ -----END CERTIFICATE-----
35
+ date: 1980-01-02 00:00:00.000000000 Z
36
+ dependencies:
37
+ - !ruby/object:Gem::Dependency
38
+ name: ffi
39
+ requirement: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 1.0.0
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 1.0.0
51
+ - !ruby/object:Gem::Dependency
52
+ name: rdoc
53
+ requirement: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '6.0'
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '8'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '6.0'
68
+ - - "<"
69
+ - !ruby/object:Gem::Version
70
+ version: '8'
71
+ - !ruby/object:Gem::Dependency
72
+ name: hoe
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '4.7'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: '4.7'
85
+ description: |
86
+ Yet another win32 to ruby wrapper
87
+
88
+ ==== To Install:
89
+ email:
90
+ - lars@greiz-reinsdorf.de
91
+ executables: []
92
+ extensions: []
93
+ extra_rdoc_files:
94
+ - History.txt
95
+ - README.txt
96
+ files:
97
+ - ".autotest"
98
+ - History.txt
99
+ - Manifest.txt
100
+ - README.txt
101
+ - Rakefile
102
+ - lib/win32api4ruby.rb
103
+ - lib/win32api4ruby/base.rb
104
+ - lib/win32api4ruby/comdlg.rb
105
+ - lib/win32api4ruby/gdi.rb
106
+ - lib/win32api4ruby/kernel.rb
107
+ - lib/win32api4ruby/user.rb
108
+ - lib/win32api4ruby/winspool.rb
109
+ - test/all_tests.rb
110
+ - test/base.rb
111
+ - test/test_comdlg.rb
112
+ - test/test_gdi.rb
113
+ - test/test_kernel.rb
114
+ - test/test_user.rb
115
+ - test/test_winspool.rb
116
+ homepage: https://github.com/larskanis/win32api4ruby
117
+ licenses:
118
+ - MIT
119
+ metadata: {}
120
+ rdoc_options:
121
+ - "--main"
122
+ - README.txt
123
+ require_paths:
124
+ - lib
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ requirements: []
136
+ rubygems_version: 4.0.16
137
+ specification_version: 4
138
+ summary: 'Yet another win32 to ruby wrapper ==== To Install:'
139
+ test_files: []