win32screenshot 3.0.0 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 715102dbb42b3d540877ce3c29143f96cdb82038e6693807e174630b0c212df7
4
- data.tar.gz: 8b9e11a96da5eb9fbc917d8ed84bcff3d9235e41d6ebb0c8abcd5c386f7899e3
3
+ metadata.gz: af9b9611193b8f4cc8d98745a6130cf16fe6fb2674e26e76a3745e34cf8de959
4
+ data.tar.gz: 278502bd7bc360a2813db04f590ee82b706eaee894cd6ce252227acb0765676e
5
5
  SHA512:
6
- metadata.gz: 237afec95fe95cf6b209fad244763c350adbfdd6477d72d6b74af6c7783cd33fb09d20f4a1f06aa07251529344bb190b17a43250c465239095b772e5d4407cb7
7
- data.tar.gz: d36b345764cd101b823a2b742f96947b9137634739c00c08249159c2f5453a9ebf84a199692279f6e37fb8a78e008ae2ebb9fe356109c6bcc509aeb93e68f0b8
6
+ metadata.gz: 636cfeb1613a8b84a000b1c5b449168cf398306bfbe47de4ac882ad6bfbb5e461055e921b63cc17ad4bd1f915fc6e13c582158da5518f835813f41b55662f947
7
+ data.tar.gz: 1209209433553596e94ed0a65c67becbb652756eca79ac3ff00777e5cc8b29ea8faa9eea42312303d048bd5121a985622e5aac93db1a55e86242f3fa196d92a4
data/CHANGES.md CHANGED
@@ -1,3 +1,6 @@
1
+ # 3.1.0 2022-02-05
2
+ * Update dependencies
3
+
1
4
  # 3.0.0 2019-12-11
2
5
  * Use RAutomation 1.0.0 as its dependency to be able to use newer ffi.
3
6
  * Update bundled ImageMagick to 7.0.9-8.
data/Gemfile.lock CHANGED
@@ -1,39 +1,45 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- win32screenshot (3.0.0)
5
- ffi (~> 1.11.0)
4
+ win32screenshot (3.1.0)
5
+ ffi (~> 1.15.0)
6
6
  mini_magick (~> 4.9)
7
- rautomation (~> 1.0.0)
7
+ rautomation (~> 1.1.0)
8
8
 
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- diff-lcs (1.2.1)
13
- ffi (1.11.3-x86-mingw32)
14
- mini_magick (4.9.5)
15
- rake (10.1.0)
16
- rautomation (1.0.0)
17
- ffi (~> 1.11.0)
18
- rspec (2.13.0)
19
- rspec-core (~> 2.13.0)
20
- rspec-expectations (~> 2.13.0)
21
- rspec-mocks (~> 2.13.0)
22
- rspec-core (2.13.0)
23
- rspec-expectations (2.13.0)
24
- diff-lcs (>= 1.1.3, < 2.0)
25
- rspec-mocks (2.13.0)
26
- yard (0.9.20)
12
+ diff-lcs (1.5.0)
13
+ ffi (1.15.5-x86-mingw32)
14
+ mini_magick (4.11.0)
15
+ rake (13.0.6)
16
+ rautomation (1.1.0)
17
+ ffi (~> 1.15.0)
18
+ rspec (3.10.0)
19
+ rspec-core (~> 3.10.0)
20
+ rspec-expectations (~> 3.10.0)
21
+ rspec-mocks (~> 3.10.0)
22
+ rspec-core (3.10.2)
23
+ rspec-support (~> 3.10.0)
24
+ rspec-expectations (3.10.2)
25
+ diff-lcs (>= 1.2.0, < 2.0)
26
+ rspec-support (~> 3.10.0)
27
+ rspec-mocks (3.10.3)
28
+ diff-lcs (>= 1.2.0, < 2.0)
29
+ rspec-support (~> 3.10.0)
30
+ rspec-support (3.10.3)
31
+ webrick (1.7.0)
32
+ yard (0.9.27)
33
+ webrick (~> 1.7.0)
27
34
 
28
35
  PLATFORMS
29
- ruby
30
36
  x86-mingw32
31
37
 
32
38
  DEPENDENCIES
33
39
  rake
34
- rspec (~> 2.5)
40
+ rspec (~> 3.10)
35
41
  win32screenshot!
36
42
  yard
37
43
 
38
44
  BUNDLED WITH
39
- 1.17.2
45
+ 2.3.3
@@ -1,5 +1,5 @@
1
- module Win32
2
- module Screenshot
3
- VERSION = "3.0.0"
4
- end
5
- end
1
+ module Win32
2
+ module Screenshot
3
+ VERSION = "3.1.0"
4
+ end
5
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,47 +1,47 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
- require 'win32/screenshot'
4
- require 'rspec'
5
- require 'fileutils'
6
-
7
- module SpecHelper
8
- HWND_TOPMOST = -1
9
- HWND_NOTOPMOST = -2
10
- SWP_NOSIZE = 1
11
- SWP_NOMOVE = 2
12
- SWP_SHOWWINDOW = 40
13
-
14
- extend FFI::Library
15
- ffi_lib 'user32'
16
- ffi_convention :stdcall
17
-
18
- # user32.dll
19
- attach_function :set_window_pos, :SetWindowPos,
20
- [:long, :long, :int, :int, :int, :int, :int], :bool
21
-
22
- def save_and_verify_image(img, file=nil)
23
- FileUtils.mkdir @temp_dir unless File.exists?(@temp_dir)
24
- file_name = File.join @temp_dir, "#{file}.bmp"
25
- img.write file_name
26
- img.bitmap[0..1].should == 'BM'
27
- end
28
-
29
- def resize title
30
- hwnd = RAutomation::Window.new(:title => title).hwnd
31
- set_window_pos(hwnd,
32
- HWND_TOPMOST,
33
- 0, 0, 150, 238,
34
- SWP_NOMOVE)
35
- set_window_pos(hwnd,
36
- HWND_NOTOPMOST,
37
- 0, 0, 0, 0,
38
- SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE)
39
- sleep 1
40
- end
41
- end
42
-
43
- RSpec.configure do |config|
44
- config.include(SpecHelper)
45
- config.before(:suite) {FileUtils.rm Dir.glob(File.join(File.dirname(__FILE__), "tmp/*"))}
46
- config.before(:all) {@temp_dir = File.join(File.dirname(__FILE__), 'tmp')}
47
- end
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'win32/screenshot'
4
+ require 'rspec'
5
+ require 'fileutils'
6
+
7
+ module SpecHelper
8
+ HWND_TOPMOST = -1
9
+ HWND_NOTOPMOST = -2
10
+ SWP_NOSIZE = 1
11
+ SWP_NOMOVE = 2
12
+ SWP_SHOWWINDOW = 40
13
+
14
+ extend FFI::Library
15
+ ffi_lib 'user32'
16
+ ffi_convention :stdcall
17
+
18
+ # user32.dll
19
+ attach_function :set_window_pos, :SetWindowPos,
20
+ [:long, :long, :int, :int, :int, :int, :int], :bool
21
+
22
+ def save_and_verify_image(img, file=nil)
23
+ FileUtils.mkdir @temp_dir unless File.exists?(@temp_dir)
24
+ file_name = File.join @temp_dir, "#{file}.bmp"
25
+ img.write file_name
26
+ expect(img.bitmap[0..1]).to eq('BM')
27
+ end
28
+
29
+ def resize title
30
+ hwnd = RAutomation::Window.new(:title => title).hwnd
31
+ set_window_pos(hwnd,
32
+ HWND_TOPMOST,
33
+ 0, 0, 150, 238,
34
+ SWP_NOMOVE)
35
+ set_window_pos(hwnd,
36
+ HWND_NOTOPMOST,
37
+ 0, 0, 0, 0,
38
+ SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE)
39
+ sleep 1
40
+ end
41
+ end
42
+
43
+ RSpec.configure do |config|
44
+ config.include(SpecHelper)
45
+ config.before(:suite) {FileUtils.rm Dir.glob(File.join(File.dirname(__FILE__), "tmp/*"))}
46
+ config.before(:all) {@temp_dir = File.join(File.dirname(__FILE__), 'tmp')}
47
+ end
@@ -1,78 +1,78 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
-
3
- describe Win32::Screenshot::Image do
4
-
5
- before :all do
6
- IO.popen("notepad")
7
- @notepad = RAutomation::Window.new(:title => /notepad/i).pid
8
- @image = Win32::Screenshot::Take.of(:window, :pid => @notepad)
9
- end
10
-
11
- describe "stores raw bitmap data" do
12
- it "#bitmap" do
13
- @image.bitmap[0..1].should == 'BM'
14
- end
15
- end
16
-
17
- describe "saving the image to the disk" do
18
- context "saving to the bmp format" do
19
- it "#write" do
20
- file_path = @temp_dir + '/image.bmp'
21
- expect {@image.write(file_path)}.to_not raise_exception
22
- File.open(file_path, "rb") {|io| io.read}[0..1].should == "BM"
23
- end
24
- end
25
-
26
- context "saving to the png format" do
27
- it "#write" do
28
- file_path = @temp_dir + '/image.png'
29
- expect {@image.write(file_path)}.to_not raise_exception
30
- File.open(file_path, "rb") {|io| io.read}[0..3].should == "\211PNG".force_encoding(Encoding::ASCII_8BIT)
31
- end
32
- end
33
-
34
- context "trying to save to the unknown format" do
35
- it "#write" do
36
- file_path = @temp_dir + '/image.notknown'
37
- expect {@image.write(file_path)}.
38
- to raise_exception("File '#{file_path}' has to have one of the following extensions: #{Win32::Screenshot::Image::FORMATS.join(", ")}")
39
- File.should_not exist(file_path)
40
- end
41
- end
42
-
43
- context "trying to save with the filename without an extension" do
44
- it "#write" do
45
- file_path = @temp_dir + '/image'
46
- expect {@image.write(file_path)}.
47
- to raise_exception("File '#{file_path}' has to have one of the following extensions: #{Win32::Screenshot::Image::FORMATS.join(", ")}")
48
- File.should_not exist(file_path)
49
- end
50
- end
51
-
52
- context "not allowing to overwrite existing files" do
53
- it "#write" do
54
- file_path = @temp_dir + '/invalid-image.png'
55
- content = "invalid content"
56
- File.open(file_path, "w") {|io| io.write content}
57
- expect {@image.write(file_path)}.to raise_exception("File already exists: #{file_path}!")
58
- File.size(file_path).should == content.size
59
- end
60
- end
61
-
62
- context "allowing to overwrite existing files when desired" do
63
- it "#write!" do
64
- file_path = @temp_dir + '/overwritten-image.png'
65
- content = "content"
66
- File.open(file_path, "w") {|io| io.write content}
67
- @image.write!(file_path)
68
- File.size(file_path).should_not eq(content.size)
69
- end
70
- end
71
- end
72
-
73
- after :all do
74
- # kill in a jruby friendly way
75
- system("taskkill /PID #{@notepad} > nul")
76
- end
77
-
78
- end
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe Win32::Screenshot::Image do
4
+
5
+ before :all do
6
+ IO.popen("notepad")
7
+ @notepad = RAutomation::Window.new(:title => /notepad/i).pid
8
+ @image = Win32::Screenshot::Take.of(:window, :pid => @notepad)
9
+ end
10
+
11
+ describe "stores raw bitmap data" do
12
+ it "#bitmap" do
13
+ expect(@image.bitmap[0..1]).to eq('BM')
14
+ end
15
+ end
16
+
17
+ describe "saving the image to the disk" do
18
+ context "saving to the bmp format" do
19
+ it "#write" do
20
+ file_path = @temp_dir + '/image.bmp'
21
+ expect {@image.write(file_path)}.to_not raise_exception
22
+ expect(File.open(file_path, "rb") {|io| io.read}[0..1]).to eq("BM")
23
+ end
24
+ end
25
+
26
+ context "saving to the png format" do
27
+ it "#write" do
28
+ file_path = @temp_dir + '/image.png'
29
+ expect {@image.write(file_path)}.to_not raise_exception
30
+ expect(File.open(file_path, "rb") {|io| io.read}[0..3]).to eq("\211PNG".force_encoding(Encoding::ASCII_8BIT))
31
+ end
32
+ end
33
+
34
+ context "trying to save to the unknown format" do
35
+ it "#write" do
36
+ file_path = @temp_dir + '/image.notknown'
37
+ expect {@image.write(file_path)}.
38
+ to raise_exception("File '#{file_path}' has to have one of the following extensions: #{Win32::Screenshot::Image::FORMATS.join(", ")}")
39
+ expect(File.exist?(file_path)).to eq(false)
40
+ end
41
+ end
42
+
43
+ context "trying to save with the filename without an extension" do
44
+ it "#write" do
45
+ file_path = @temp_dir + '/image'
46
+ expect {@image.write(file_path)}.
47
+ to raise_exception("File '#{file_path}' has to have one of the following extensions: #{Win32::Screenshot::Image::FORMATS.join(", ")}")
48
+ expect(File.exist?(file_path)).to eq(false)
49
+ end
50
+ end
51
+
52
+ context "not allowing to overwrite existing files" do
53
+ it "#write" do
54
+ file_path = @temp_dir + '/invalid-image.png'
55
+ content = "invalid content"
56
+ File.open(file_path, "w") {|io| io.write content}
57
+ expect {@image.write(file_path)}.to raise_exception("File already exists: #{file_path}!")
58
+ expect(File.size(file_path)).to eq(content.size)
59
+ end
60
+ end
61
+
62
+ context "allowing to overwrite existing files when desired" do
63
+ it "#write!" do
64
+ file_path = @temp_dir + '/overwritten-image.png'
65
+ content = "content"
66
+ File.open(file_path, "w") {|io| io.write content}
67
+ @image.write!(file_path)
68
+ expect(File.size(file_path)).to_not eq(content.size)
69
+ end
70
+ end
71
+ end
72
+
73
+ after :all do
74
+ # kill in a jruby friendly way
75
+ system("taskkill /PID #{@notepad} > nul")
76
+ end
77
+
78
+ end
@@ -1,151 +1,151 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
-
3
- describe Win32::Screenshot::Take do
4
-
5
- before :all do
6
- Dir.chdir("c:/program files/Internet Explorer") { IO.popen(".\\iexplore about:blank") }
7
- IO.popen("notepad")
8
- @iexplore = RAutomation::Window.new(:title => /internet explorer/i).pid
9
- @notepad = RAutomation::Window.new(:title => /notepad/i).pid
10
- end
11
-
12
- it "captures the foreground" do
13
- image = Win32::Screenshot::Take.of(:foreground)
14
- save_and_verify_image(image, 'foreground')
15
- hwnd = Win32::Screenshot::BitmapMaker.foreground_window
16
- [image.width, image.height].should == Win32::Screenshot::BitmapMaker.dimensions_for(hwnd, :window)
17
- end
18
-
19
- it "captures an area of the foreground" do
20
- image = Win32::Screenshot::Take.of(:foreground, :area => [30, 30, 100, 150])
21
- save_and_verify_image(image, 'foreground_area')
22
- image.width.should == 70
23
- image.height.should == 120
24
- end
25
-
26
- it "doesn't allow to capture an area of the foreground with invalid coordinates" do
27
- expect {Win32::Screenshot::Take.of(:foreground, :area => [0, 0, -1, 100])}.
28
- to raise_exception("specified coordinates (x1: 0, y1: 0, x2: -1, y2: 100) are invalid - cannot be negative!")
29
- end
30
-
31
- it "captures the desktop" do
32
- image = Win32::Screenshot::Take.of(:desktop)
33
- save_and_verify_image(image, 'desktop')
34
- hwnd = Win32::Screenshot::BitmapMaker.desktop_window
35
- [image.width, image.height].should == Win32::Screenshot::BitmapMaker.dimensions_for(hwnd, :window)
36
- end
37
-
38
- it "captures an area of the desktop" do
39
- image = Win32::Screenshot::Take.of(:desktop, :area => [30, 30, 100, 150])
40
- save_and_verify_image(image, 'desktop_area')
41
- image.width.should == 70
42
- image.height.should == 120
43
- end
44
-
45
- it "doesn't allow to capture an area of the desktop with invalid coordinates" do
46
- expect {Win32::Screenshot::Take.of(:desktop, :area => [0, 0, -1, 100])}.
47
- to raise_exception("specified coordinates (x1: 0, y1: 0, x2: -1, y2: 100) are invalid - cannot be negative!")
48
- end
49
-
50
- it "captures a maximized window" do
51
- window = RAutomation::Window.new(:pid => @iexplore)
52
- window.maximize
53
- image = Win32::Screenshot::Take.of(:window, :pid => @iexplore)
54
- save_and_verify_image(image, 'iexplore_max')
55
- [image.width, image.height].should == Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :window)
56
- end
57
-
58
- it "captures a minimized window" do
59
- window = RAutomation::Window.new(:pid => @notepad)
60
- window.minimize
61
- image = Win32::Screenshot::Take.of(:window, :pid => @notepad)
62
- save_and_verify_image(image, 'notepad_min')
63
- [image.width, image.height].should == Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :window)
64
- end
65
-
66
- it "captures a small window" do
67
- title = /Internet Explorer/
68
- resize(title)
69
- image = Win32::Screenshot::Take.of(:window, :pid => @iexplore)
70
- save_and_verify_image(image, 'iexplore_resized')
71
-
72
- # we should get the size of the picture because
73
- # screenshot doesn't include titlebar and the size
74
- # varies between different themes and Windows versions
75
- window = RAutomation::Window.new(:pid => @iexplore)
76
- [image.width, image.height].should == Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :window)
77
- end
78
-
79
- it "captures a window context of the window" do
80
- image = Win32::Screenshot::Take.of(:window, :pid => @notepad, :context => :window)
81
- save_and_verify_image(image, 'notepad_context_window')
82
- window = RAutomation::Window.new(:pid => @notepad)
83
- [image.width, image.height].should == Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :window)
84
- end
85
-
86
- it "captures a client context of the window" do
87
- image = Win32::Screenshot::Take.of(:window, :pid => @notepad, :context => :client)
88
- save_and_verify_image(image, 'notepad_context_client')
89
- window = RAutomation::Window.new(:pid => @notepad)
90
- [image.width, image.height].should == Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :client)
91
- end
92
-
93
- it "captures an area of the window" do
94
- image = Win32::Screenshot::Take.of(:window, :pid => @notepad, :area => [30, 30, 100, 150])
95
- save_and_verify_image(image, 'notepad_area')
96
- image.width.should == 70
97
- image.height.should == 120
98
- end
99
-
100
- it "captures by the RAutomation::Window" do
101
- window = RAutomation::Window.new(:pid => @notepad)
102
- image = Win32::Screenshot::Take.of(:window, :rautomation => window)
103
- save_and_verify_image(image, 'notepad_rautomation')
104
- [image.width, image.height].should == Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :window)
105
- end
106
-
107
- it "captures a child windows" do
108
- window = RAutomation::Window.new(:pid => @iexplore).child(:class => "Internet Explorer_Server")
109
- image = Win32::Screenshot::Take.of(:window, :rautomation => window)
110
- save_and_verify_image(image, 'iexplore_child')
111
- [image.width, image.height].should == Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :window)
112
- end
113
-
114
- it "captures a whole window if window size is specified as coordinates" do
115
- window = RAutomation::Window.new(:pid => @notepad)
116
- expected_width, expected_height = Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :window)
117
- image = Win32::Screenshot::Take.of(:window, :rautomation => window, :area => [0, 0, expected_width, expected_height])
118
- save_and_verify_image(image, 'notepad_area_full_window')
119
- image.width.should == expected_width
120
- image.height.should == expected_height
121
- end
122
-
123
- it "doesn't allow to capture an area of the window with negative coordinates" do
124
- expect {Win32::Screenshot::Take.of(:window, :pid => @notepad, :area => [0, 0, -1, 100])}.
125
- to raise_exception("specified coordinates (x1: 0, y1: 0, x2: -1, y2: 100) are invalid - cannot be negative!")
126
- end
127
-
128
- it "doesn't allow to capture an area of the window if coordinates are the same" do
129
- expect {Win32::Screenshot::Take.of(:window, :pid => @notepad, :area => [10, 0, 10, 20])}.
130
- to raise_exception("specified coordinates (x1: 10, y1: 0, x2: 10, y2: 20) are invalid - cannot be x1 >= x2 or y1 >= y2!")
131
- end
132
-
133
- it "doesn't allow to capture an area of the window if second coordinate is smaller than first one" do
134
- expect {Win32::Screenshot::Take.of(:window, :pid => @notepad, :area => [0, 10, 10, 9])}.
135
- to raise_exception("specified coordinates (x1: 0, y1: 10, x2: 10, y2: 9) are invalid - cannot be x1 >= x2 or y1 >= y2!")
136
- end
137
-
138
- it "doesn't allow to capture an area of the window with too big coordinates" do
139
- window = RAutomation::Window.new(:pid => @notepad)
140
- expected_width, expected_height = Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :window)
141
- expect {Win32::Screenshot::Take.of(:window, :pid => @notepad, :area => [0, 0, 10, 100000])}.
142
- to raise_exception("specified coordinates (x1: 0, y1: 0, x2: 10, y2: 100000) are invalid - maximum x2: #{expected_width} and y2: #{expected_height}!")
143
- end
144
-
145
- after :all do
146
- [@iexplore, @notepad].each do |pid|
147
- # kill them in a jruby friendly way
148
- system("taskkill /PID #{pid} > nul")
149
- end
150
- end
151
- end
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe Win32::Screenshot::Take do
4
+
5
+ before :all do
6
+ Dir.chdir("c:/program files/Internet Explorer") { IO.popen(".\\iexplore about:blank") }
7
+ IO.popen("notepad")
8
+ @iexplore = RAutomation::Window.new(:title => /internet explorer/i).pid
9
+ @notepad = RAutomation::Window.new(:title => /notepad/i).pid
10
+ end
11
+
12
+ it "captures the foreground" do
13
+ image = Win32::Screenshot::Take.of(:foreground)
14
+ save_and_verify_image(image, 'foreground')
15
+ hwnd = Win32::Screenshot::BitmapMaker.foreground_window
16
+ expect([image.width, image.height]).to eq(Win32::Screenshot::BitmapMaker.dimensions_for(hwnd, :window))
17
+ end
18
+
19
+ it "captures an area of the foreground" do
20
+ image = Win32::Screenshot::Take.of(:foreground, :area => [30, 30, 100, 150])
21
+ save_and_verify_image(image, 'foreground_area')
22
+ expect(image.width).to eq(70)
23
+ expect(image.height).to eq(120)
24
+ end
25
+
26
+ it "doesn't allow to capture an area of the foreground with invalid coordinates" do
27
+ expect {Win32::Screenshot::Take.of(:foreground, :area => [0, 0, -1, 100])}.
28
+ to raise_exception("specified coordinates (x1: 0, y1: 0, x2: -1, y2: 100) are invalid - cannot be negative!")
29
+ end
30
+
31
+ it "captures the desktop" do
32
+ image = Win32::Screenshot::Take.of(:desktop)
33
+ save_and_verify_image(image, 'desktop')
34
+ hwnd = Win32::Screenshot::BitmapMaker.desktop_window
35
+ expect([image.width, image.height]).to eq(Win32::Screenshot::BitmapMaker.dimensions_for(hwnd, :window))
36
+ end
37
+
38
+ it "captures an area of the desktop" do
39
+ image = Win32::Screenshot::Take.of(:desktop, :area => [30, 30, 100, 150])
40
+ save_and_verify_image(image, 'desktop_area')
41
+ expect(image.width).to eq(70)
42
+ expect(image.height).to eq(120)
43
+ end
44
+
45
+ it "doesn't allow to capture an area of the desktop with invalid coordinates" do
46
+ expect {Win32::Screenshot::Take.of(:desktop, :area => [0, 0, -1, 100])}.
47
+ to raise_exception("specified coordinates (x1: 0, y1: 0, x2: -1, y2: 100) are invalid - cannot be negative!")
48
+ end
49
+
50
+ it "captures a maximized window" do
51
+ window = RAutomation::Window.new(:pid => @iexplore)
52
+ window.maximize
53
+ image = Win32::Screenshot::Take.of(:window, :pid => @iexplore)
54
+ save_and_verify_image(image, 'iexplore_max')
55
+ expect([image.width, image.height]).to eq(Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :window))
56
+ end
57
+
58
+ it "captures a minimized window" do
59
+ window = RAutomation::Window.new(:pid => @notepad)
60
+ window.minimize
61
+ image = Win32::Screenshot::Take.of(:window, :pid => @notepad)
62
+ save_and_verify_image(image, 'notepad_min')
63
+ expect([image.width, image.height]).to eq(Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :window))
64
+ end
65
+
66
+ it "captures a small window" do
67
+ title = /Internet Explorer/
68
+ resize(title)
69
+ image = Win32::Screenshot::Take.of(:window, :pid => @iexplore)
70
+ save_and_verify_image(image, 'iexplore_resized')
71
+
72
+ # we should get the size of the picture because
73
+ # screenshot doesn't include titlebar and the size
74
+ # varies between different themes and Windows versions
75
+ window = RAutomation::Window.new(:pid => @iexplore)
76
+ expect([image.width, image.height]).to eq(Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :window))
77
+ end
78
+
79
+ it "captures a window context of the window" do
80
+ image = Win32::Screenshot::Take.of(:window, :pid => @notepad, :context => :window)
81
+ save_and_verify_image(image, 'notepad_context_window')
82
+ window = RAutomation::Window.new(:pid => @notepad)
83
+ expect([image.width, image.height]).to eq(Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :window))
84
+ end
85
+
86
+ it "captures a client context of the window" do
87
+ image = Win32::Screenshot::Take.of(:window, :pid => @notepad, :context => :client)
88
+ save_and_verify_image(image, 'notepad_context_client')
89
+ window = RAutomation::Window.new(:pid => @notepad)
90
+ expect([image.width, image.height]).to eq(Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :client))
91
+ end
92
+
93
+ it "captures an area of the window" do
94
+ image = Win32::Screenshot::Take.of(:window, :pid => @notepad, :area => [30, 30, 100, 150])
95
+ save_and_verify_image(image, 'notepad_area')
96
+ expect(image.width).to eq(70)
97
+ expect(image.height).to eq(120)
98
+ end
99
+
100
+ it "captures by the RAutomation::Window" do
101
+ window = RAutomation::Window.new(:pid => @notepad)
102
+ image = Win32::Screenshot::Take.of(:window, :rautomation => window)
103
+ save_and_verify_image(image, 'notepad_rautomation')
104
+ expect([image.width, image.height]).to eq(Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :window))
105
+ end
106
+
107
+ it "captures a child windows" do
108
+ window = RAutomation::Window.new(:pid => @iexplore).child(:class => "Internet Explorer_Server")
109
+ image = Win32::Screenshot::Take.of(:window, :rautomation => window)
110
+ save_and_verify_image(image, 'iexplore_child')
111
+ expect([image.width, image.height]).to eq(Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :window))
112
+ end
113
+
114
+ it "captures a whole window if window size is specified as coordinates" do
115
+ window = RAutomation::Window.new(:pid => @notepad)
116
+ expected_width, expected_height = Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :window)
117
+ image = Win32::Screenshot::Take.of(:window, :rautomation => window, :area => [0, 0, expected_width, expected_height])
118
+ save_and_verify_image(image, 'notepad_area_full_window')
119
+ expect(image.width).to eq(expected_width)
120
+ expect(image.height).to eq(expected_height)
121
+ end
122
+
123
+ it "doesn't allow to capture an area of the window with negative coordinates" do
124
+ expect {Win32::Screenshot::Take.of(:window, :pid => @notepad, :area => [0, 0, -1, 100])}.
125
+ to raise_exception("specified coordinates (x1: 0, y1: 0, x2: -1, y2: 100) are invalid - cannot be negative!")
126
+ end
127
+
128
+ it "doesn't allow to capture an area of the window if coordinates are the same" do
129
+ expect {Win32::Screenshot::Take.of(:window, :pid => @notepad, :area => [10, 0, 10, 20])}.
130
+ to raise_exception("specified coordinates (x1: 10, y1: 0, x2: 10, y2: 20) are invalid - cannot be x1 >= x2 or y1 >= y2!")
131
+ end
132
+
133
+ it "doesn't allow to capture an area of the window if second coordinate is smaller than first one" do
134
+ expect {Win32::Screenshot::Take.of(:window, :pid => @notepad, :area => [0, 10, 10, 9])}.
135
+ to raise_exception("specified coordinates (x1: 0, y1: 10, x2: 10, y2: 9) are invalid - cannot be x1 >= x2 or y1 >= y2!")
136
+ end
137
+
138
+ it "doesn't allow to capture an area of the window with too big coordinates" do
139
+ window = RAutomation::Window.new(:pid => @notepad)
140
+ expected_width, expected_height = Win32::Screenshot::BitmapMaker.dimensions_for(window.hwnd, :window)
141
+ expect {Win32::Screenshot::Take.of(:window, :pid => @notepad, :area => [0, 0, 10, 100000])}.
142
+ to raise_exception("specified coordinates (x1: 0, y1: 0, x2: 10, y2: 100000) are invalid - maximum x2: #{expected_width} and y2: #{expected_height}!")
143
+ end
144
+
145
+ after :all do
146
+ [@iexplore, @notepad].each do |pid|
147
+ # kill them in a jruby friendly way
148
+ system("taskkill /PID #{pid} > nul")
149
+ end
150
+ end
151
+ end
@@ -1,25 +1,25 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "win32/screenshot/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = "win32screenshot"
7
- s.version = Win32::Screenshot::VERSION
8
- s.authors = ["Jarmo Pertman", "Aslak Hellesøy"]
9
- s.email = ["jarmo.p@gmail.com", "aslak.hellesoy@gmail.com"]
10
- s.description = "Capture Screenshots on Windows with Ruby to bmp, gif, jpg or png formats."
11
- s.homepage = "http://github.com/jarmo/win32screenshot"
12
- s.summary = "Capture Screenshots on Windows with Ruby to bmp, gif, jpg or png formats."
13
- s.files = `git ls-files`.split("\n")
14
- s.test_files = `git ls-files -- spec/*`.split("\n")
15
- s.require_paths = ["lib"]
16
- s.license = "MIT"
17
-
18
- s.add_dependency("ffi", "~> 1.11.0")
19
- s.add_dependency("mini_magick", "~> 4.9")
20
- s.add_dependency("rautomation", "~> 1.0.0")
21
-
22
- s.add_development_dependency("rspec", "~> 2.5")
23
- s.add_development_dependency("yard")
24
- s.add_development_dependency("rake")
25
- end
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "win32/screenshot/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "win32screenshot"
7
+ s.version = Win32::Screenshot::VERSION
8
+ s.authors = ["Jarmo Pertman", "Aslak Hellesøy"]
9
+ s.email = ["jarmo.p@gmail.com", "aslak.hellesoy@gmail.com"]
10
+ s.description = "Capture Screenshots on Windows with Ruby to bmp, gif, jpg or png formats."
11
+ s.homepage = "http://github.com/jarmo/win32screenshot"
12
+ s.summary = "Capture Screenshots on Windows with Ruby to bmp, gif, jpg or png formats."
13
+ s.files = `git ls-files`.split("\n")
14
+ s.test_files = `git ls-files -- spec/*`.split("\n")
15
+ s.require_paths = ["lib"]
16
+ s.license = "MIT"
17
+
18
+ s.add_dependency("ffi", "~> 1.15.0")
19
+ s.add_dependency("mini_magick", "~> 4.9")
20
+ s.add_dependency("rautomation", "~> 1.1.0")
21
+
22
+ s.add_development_dependency("rspec", "~> 3.10")
23
+ s.add_development_dependency("yard")
24
+ s.add_development_dependency("rake")
25
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: win32screenshot
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jarmo Pertman
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-12-11 00:00:00.000000000 Z
12
+ date: 2022-02-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ffi
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 1.11.0
20
+ version: 1.15.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 1.11.0
27
+ version: 1.15.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: mini_magick
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -45,28 +45,28 @@ dependencies:
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: 1.0.0
48
+ version: 1.1.0
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: 1.0.0
55
+ version: 1.1.0
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rspec
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '2.5'
62
+ version: '3.10'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '2.5'
69
+ version: '3.10'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: yard
72
72
  requirement: !ruby/object:Gem::Requirement
@@ -121,7 +121,6 @@ files:
121
121
  - lib/win32/screenshot/image.rb
122
122
  - lib/win32/screenshot/take.rb
123
123
  - lib/win32/screenshot/version.rb
124
- - rdoc.rb
125
124
  - spec/spec_helper.rb
126
125
  - spec/win32/screenshot/image_spec.rb
127
126
  - spec/win32/screenshot/take_spec.rb
data/rdoc.rb DELETED
@@ -1,3 +0,0 @@
1
- require 'rdoc'
2
- h = RDoc::Markup::ToMarkdown.new
3
- puts h.convert(File.read(ARGV[0]))