windows-api 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +4 -0
- data/MANIFEST +0 -2
- data/README +3 -3
- data/Rakefile +0 -27
- data/lib/windows/api.rb +39 -44
- data/test/tc_windows_api.rb +2 -2
- data/windows-api.gemspec +2 -1
- metadata +13 -6
data/CHANGES
CHANGED
data/MANIFEST
CHANGED
data/README
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
= Description
|
2
|
-
This is a wrapper for
|
3
|
-
used by people who use
|
2
|
+
This is a wrapper for Win32::API that simplifies various idioms typically
|
3
|
+
used by people who use Win32::API.
|
4
4
|
|
5
5
|
= Synopsis
|
6
6
|
require 'windows/api'
|
@@ -55,7 +55,7 @@
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
= Advantages over plain
|
58
|
+
= Advantages over plain Win32::API
|
59
59
|
* Automatic constant generation.
|
60
60
|
* Automatic definition of ANSI and Unicode method wrappers, including
|
61
61
|
special handling for boolean methods.
|
data/Rakefile
CHANGED
@@ -19,33 +19,6 @@ task :install_gem do
|
|
19
19
|
sh "gem install #{file}"
|
20
20
|
end
|
21
21
|
|
22
|
-
desc "Clean any build files for Windows::API"
|
23
|
-
task :clean do
|
24
|
-
Dir.chdir('ext') do
|
25
|
-
if File.exists?("api.so") || File.exists?("windows/api.so")
|
26
|
-
sh "nmake distclean"
|
27
|
-
rm "api.c" if File.exists?("api.c")
|
28
|
-
rm "windows/api.so" if File.exists?("windows/api.so")
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
desc "Build Windows::API (but don't install it)"
|
34
|
-
task :build_c => [:clean] do
|
35
|
-
Dir.chdir('ext') do
|
36
|
-
cp "windows/api.c", "."
|
37
|
-
sh "ruby extconf.rb"
|
38
|
-
sh "nmake"
|
39
|
-
mv "api.so", "windows"
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
Rake::TestTask.new('test_c') do |test|
|
44
|
-
task :test_c => [:build_c]
|
45
|
-
test.libs << 'ext'
|
46
|
-
test.test_files = FileList['test/tc*']
|
47
|
-
end
|
48
|
-
|
49
22
|
Rake::TestTask.new do |test|
|
50
23
|
test.libs << 'lib'
|
51
24
|
test.warning = true
|
data/lib/windows/api.rb
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
-
require '
|
1
|
+
require 'win32/api'
|
2
2
|
|
3
3
|
module Windows
|
4
4
|
class API
|
5
|
-
VERSION = '0.
|
5
|
+
VERSION = '0.2.0'
|
6
6
|
|
7
7
|
class Error < RuntimeError; end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
@auto_constant = false
|
10
|
+
@auto_method = false
|
11
|
+
@auto_unicode = false
|
12
|
+
@auto_namespace = nil
|
13
13
|
|
14
|
-
# Returns the value of the
|
15
|
-
# is nil, i.e. none. See the Windows::API.auto_constant=
|
16
|
-
# for more information.
|
14
|
+
# Returns the value of the @auto_constant class instance variable. The
|
15
|
+
# default is nil, i.e. none. See the Windows::API.auto_constant=
|
16
|
+
# documentation for more information.
|
17
17
|
#
|
18
18
|
def self.auto_constant
|
19
|
-
|
19
|
+
@auto_constant
|
20
20
|
end
|
21
21
|
|
22
22
|
# Automatically sets a constant to match the function name.
|
@@ -52,34 +52,34 @@ module Windows
|
|
52
52
|
# nesting and all, I'd love to know the solution.
|
53
53
|
#
|
54
54
|
def self.auto_constant=(bool)
|
55
|
-
|
55
|
+
@auto_constant = bool
|
56
56
|
end
|
57
57
|
|
58
|
-
# Returns the value of the auto_namespace class variable.
|
59
|
-
# conjunction with API.auto_constant and/or API.auto_method.
|
58
|
+
# Returns the value of the auto_namespace class instance variable. Used
|
59
|
+
# in conjunction with API.auto_constant and/or API.auto_method.
|
60
60
|
#
|
61
61
|
def self.auto_namespace
|
62
|
-
|
62
|
+
@auto_namespace
|
63
63
|
end
|
64
64
|
|
65
|
-
# Sets the value of the auto_namespace class variable. The
|
66
|
-
# nil, i.e. none. Use in conjunction with the auto_constant
|
67
|
-
# auto_method class variables, this method will automatically set
|
68
|
-
# constant and/or method in +namespace+ equal to the function name set
|
65
|
+
# Sets the value of the auto_namespace class nstance variable. The
|
66
|
+
# default is nil, i.e. none. Use in conjunction with the auto_constant
|
67
|
+
# and/or auto_method class variables, this method will automatically set
|
68
|
+
# a constant and/or method in +namespace+ equal to the function name set
|
69
69
|
# in the constructor.
|
70
70
|
#
|
71
71
|
# The +namespace+ must refer to an existing module, not a class.
|
72
72
|
#
|
73
73
|
def self.auto_namespace=(namespace)
|
74
|
-
|
74
|
+
@auto_namespace = namespace
|
75
75
|
end
|
76
76
|
|
77
|
-
# Returns the value of the auto_method class variable. Used in
|
77
|
+
# Returns the value of the auto_method class instance variable. Used in
|
78
78
|
# conjunction with auto_unicode. See API.auto_method= for more
|
79
79
|
# information.
|
80
80
|
#
|
81
81
|
def self.auto_method
|
82
|
-
|
82
|
+
@auto_method
|
83
83
|
end
|
84
84
|
|
85
85
|
# If this option is set to true then a corresponding method is
|
@@ -122,15 +122,15 @@ module Windows
|
|
122
122
|
# already ends with 'A' or 'W'.
|
123
123
|
#
|
124
124
|
def self.auto_method=(bool)
|
125
|
-
|
125
|
+
@auto_method = bool
|
126
126
|
end
|
127
127
|
|
128
|
-
# Returns the value of the auto_unicode class variable. This
|
129
|
-
# in conjunction with the auto_method and/or auto_constant class
|
128
|
+
# Returns the value of the auto_unicode class instance variable. This
|
129
|
+
# is used in conjunction with the auto_method and/or auto_constant class
|
130
130
|
# variables. Not significant if neither of those variables are set.
|
131
131
|
#
|
132
132
|
def self.auto_unicode
|
133
|
-
|
133
|
+
@auto_unicode
|
134
134
|
end
|
135
135
|
|
136
136
|
# If set to true, and the auto_constant variable is set, then the
|
@@ -167,7 +167,7 @@ module Windows
|
|
167
167
|
# already ends with an 'A' or 'W'.
|
168
168
|
#
|
169
169
|
def self.auto_unicode=(bool)
|
170
|
-
|
170
|
+
@auto_unicode = bool
|
171
171
|
end
|
172
172
|
|
173
173
|
attr_reader :function_name
|
@@ -208,12 +208,7 @@ module Windows
|
|
208
208
|
@boolean = rtype == 'B' ? true : false
|
209
209
|
|
210
210
|
begin
|
211
|
-
@api =
|
212
|
-
@dll_name,
|
213
|
-
@function_name,
|
214
|
-
@prototype,
|
215
|
-
@return_type
|
216
|
-
)
|
211
|
+
@api = Win32::API.new(func, proto, rtype, dll)
|
217
212
|
rescue RuntimeError => err
|
218
213
|
raise Error, err
|
219
214
|
end
|
@@ -222,21 +217,21 @@ module Windows
|
|
222
217
|
api_w = nil
|
223
218
|
|
224
219
|
# If the auto_unicode option is set, and the func is not already
|
225
|
-
# an explicit ANSI or Unicode function name, generate
|
220
|
+
# an explicit ANSI or Unicode function name, generate Win32::API
|
226
221
|
# objects for those functions as well. Ignore errors because not
|
227
222
|
# all functions have explicit ANSI or Unicode equivalents.
|
228
223
|
#
|
229
|
-
if
|
224
|
+
if Windows::API.auto_unicode
|
230
225
|
begin
|
231
226
|
if func[-1].chr != 'A'
|
232
|
-
api_a =
|
227
|
+
api_a = Win32::API.new("#{func}A", proto, rtype, dll)
|
233
228
|
end
|
234
229
|
rescue RuntimeError
|
235
230
|
end
|
236
231
|
|
237
232
|
begin
|
238
233
|
if func[-1].chr != 'W'
|
239
|
-
api_w =
|
234
|
+
api_w = Win32::API.new("#{func}W", proto, rtype, dll)
|
240
235
|
end
|
241
236
|
rescue RuntimeError
|
242
237
|
end
|
@@ -245,11 +240,11 @@ module Windows
|
|
245
240
|
# Automatically define a constant matching the function name if the
|
246
241
|
# auto_constant option is set.
|
247
242
|
#
|
248
|
-
if
|
249
|
-
if
|
250
|
-
namespace = class_for(
|
243
|
+
if Windows::API.auto_constant && Windows::API.auto_namespace
|
244
|
+
if Windows::API.auto_namespace != 'Windows'
|
245
|
+
namespace = class_for(Windows::API.auto_namespace)
|
251
246
|
else
|
252
|
-
namespace =
|
247
|
+
namespace = Windows::API.auto_namespace
|
253
248
|
end
|
254
249
|
|
255
250
|
namespace.const_set(func, @api)
|
@@ -257,7 +252,7 @@ module Windows
|
|
257
252
|
# Automatically define the explicit ANSI and Unicode functions
|
258
253
|
# as constants as well, if appropriate.
|
259
254
|
#
|
260
|
-
if
|
255
|
+
if Windows::API.auto_unicode
|
261
256
|
namespace.const_set("#{func}A", api_a) if api_a
|
262
257
|
namespace.const_set("#{func}W", api_w) if api_w
|
263
258
|
end
|
@@ -267,7 +262,7 @@ module Windows
|
|
267
262
|
# auto_method option is set. The explicit ANSI and Unicode methods
|
268
263
|
# are added as well if the auto_unicode option is set to true.
|
269
264
|
#
|
270
|
-
if
|
265
|
+
if Windows::API.auto_method && Windows::API.auto_namespace
|
271
266
|
if proto == 'V'
|
272
267
|
proto = ''
|
273
268
|
else
|
@@ -287,7 +282,7 @@ module Windows
|
|
287
282
|
|
288
283
|
if @boolean
|
289
284
|
string = <<-EOC
|
290
|
-
module #{
|
285
|
+
module #{Windows::API.auto_namespace}
|
291
286
|
def #{func}(#{proto})
|
292
287
|
#{func}.call(#{proto}) != 0
|
293
288
|
end
|
@@ -312,7 +307,7 @@ module Windows
|
|
312
307
|
string << 'end'
|
313
308
|
else
|
314
309
|
string = <<-EOC
|
315
|
-
module #{
|
310
|
+
module #{Windows::API.auto_namespace}
|
316
311
|
def #{func}(#{proto})
|
317
312
|
#{func}.call(#{proto})
|
318
313
|
end
|
data/test/tc_windows_api.rb
CHANGED
@@ -43,7 +43,7 @@ class TC_Windows_API < Test::Unit::TestCase
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def test_version
|
46
|
-
assert_equal('0.
|
46
|
+
assert_equal('0.2.0', API::VERSION)
|
47
47
|
end
|
48
48
|
|
49
49
|
def test_auto_unicode
|
@@ -57,7 +57,7 @@ class TC_Windows_API < Test::Unit::TestCase
|
|
57
57
|
assert_not_nil(Windows::Test::GetCurrentDirectory)
|
58
58
|
assert_not_nil(Windows::Bar::GetUserName)
|
59
59
|
|
60
|
-
assert_kind_of(
|
60
|
+
assert_kind_of(Win32::API, Windows::Test::GetCurrentDirectory)
|
61
61
|
assert_respond_to(Windows::Test::GetCurrentDirectory, :call)
|
62
62
|
end
|
63
63
|
|
data/windows-api.gemspec
CHANGED
@@ -2,7 +2,7 @@ require "rubygems"
|
|
2
2
|
|
3
3
|
spec = Gem::Specification.new do |gem|
|
4
4
|
gem.name = "windows-api"
|
5
|
-
gem.version = "0.
|
5
|
+
gem.version = "0.2.0"
|
6
6
|
gem.author = "Daniel J. Berger"
|
7
7
|
gem.email = "djberg96@gmail.com"
|
8
8
|
gem.homepage = "http://www.rubyforge.org/projects/win32utils"
|
@@ -15,6 +15,7 @@ spec = Gem::Specification.new do |gem|
|
|
15
15
|
gem.files.reject! { |fn| fn.include? "CVS" }
|
16
16
|
gem.require_path = "lib"
|
17
17
|
gem.extra_rdoc_files = ["README", "CHANGES", "MANIFEST"]
|
18
|
+
gem.add_dependency("win32-api", ">= 1.0.0")
|
18
19
|
end
|
19
20
|
|
20
21
|
if $0 == __FILE__
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
rubygems_version: 0.9.4
|
3
3
|
specification_version: 1
|
4
4
|
name: windows-api
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.2.0
|
7
|
+
date: 2007-09-20 00:00:00 -06:00
|
8
8
|
summary: An easier way to create methods using Win32API
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -34,7 +34,6 @@ files:
|
|
34
34
|
- test/tc_windows_api.rb
|
35
35
|
- CHANGES
|
36
36
|
- CVS
|
37
|
-
- ext
|
38
37
|
- lib
|
39
38
|
- MANIFEST
|
40
39
|
- Rakefile
|
@@ -55,5 +54,13 @@ extensions: []
|
|
55
54
|
|
56
55
|
requirements: []
|
57
56
|
|
58
|
-
dependencies:
|
59
|
-
|
57
|
+
dependencies:
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: win32-api
|
60
|
+
version_requirement:
|
61
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 1.0.0
|
66
|
+
version:
|