rdp-win32screenshot 0.0.6 → 0.0.6.1

Sign up to get free protection for your applications and to get access to all the features.
data/History.rdoc CHANGED
@@ -1,5 +1,6 @@
1
1
  = 0.0.6 2010-XX-XX
2
2
  * Trying to bring window to the foreground more aggressively (Roger Pack)
3
+ * Minor bug fixes with using gdi32.dll BitBlt (Roger Pack)
3
4
 
4
5
  = 0.0.5 2010-07-07
5
6
  * Added method window_area for capturing specified area of the window instead of full window (Jarmo Pertman)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.6
1
+ 0.0.6.1
@@ -76,7 +76,7 @@ module Win32
76
76
  true
77
77
  end
78
78
  end
79
-
79
+
80
80
  module_function
81
81
 
82
82
  class WindowStruct < FFI::Struct
@@ -91,6 +91,20 @@ module Win32
91
91
  enum_windows(EnumWindowCallback, window.to_ptr)
92
92
  window[:hwnd] == 0 ? nil : window[:hwnd]
93
93
  end
94
+
95
+ def list_window_titles
96
+ out = []
97
+ out_proc = Proc.new do |hwnd, param|
98
+ title_length = window_text_length(hwnd) + 1
99
+ title = FFI::MemoryPointer.new :char, title_length
100
+ window_text(hwnd, title, title_length)
101
+ out << title.read_string
102
+ true
103
+ end
104
+
105
+ enum_windows(out_proc, nil)
106
+ out
107
+ end
94
108
 
95
109
  def prepare_window(hwnd, pause)
96
110
  restore(hwnd) if minimized(hwnd)
@@ -82,16 +82,16 @@ module Win32
82
82
  def validate_coordinates(hwnd, *coords)
83
83
  specified_coordinates = coords.join(', ')
84
84
  if coords.any? {|c| c < 0}
85
- raise "specified coordinates (#{specified_coordinates}) are invalid! cannot have any less than zero"
85
+ raise "specified coordinates (#{specified_coordinates}) are invalid - cannot be negative!"
86
86
  end
87
87
  x1, y1, x2, y2 = *coords
88
88
  if x1 >= x2 || y1 >= y2
89
- raise "specified coordinates (#{specified_coordinates}) are invalid! cannot have x1 > x2 or y1 > y2"
89
+ raise "specified coordinates (#{specified_coordinates}) are invalid - cannot have x1 > x2 or y1 > y2!"
90
90
  end
91
91
 
92
92
  x1_always_zero, y1_always_zero, max_x2, max_y2 = BitmapMaker.dimensions_for(hwnd)
93
93
  if x2 > max_x2 || y2 > max_y2
94
- raise "specified coordinates (#{specified_coordinates}) are invalid! max is #{max_x2},#{max_y2}"
94
+ raise "specified coordinates (#{specified_coordinates}) are invalid - maximum are x2=#{max_x2} and y2=#{max_y2}!"
95
95
  end
96
96
  end
97
97
  end
@@ -4,12 +4,12 @@ describe "win32-screenshot" do
4
4
  include SpecHelper
5
5
 
6
6
  before :all do
7
- cleanup
8
7
  PROGRAM_FILES = "c:/program files/"
9
8
  @notepad = IO.popen("notepad").pid
10
9
  @iexplore = IO.popen(File.join(PROGRAM_FILES, "Internet Explorer", "iexplore about:blank")).pid
11
10
  @calc = IO.popen("calc").pid
12
11
  wait_for_programs_to_open
12
+ cleanup
13
13
  end
14
14
 
15
15
  it "captures foreground" do
@@ -32,7 +32,7 @@ describe "win32-screenshot" do
32
32
 
33
33
  it "doesn't allow to capture area of the foreground with invalid coordinates" do
34
34
  lambda {Win32::Screenshot.foreground_area(0, 0, -1, 100) {|width, height, bmp| check_image('foreground2')}}.
35
- should raise_exception("specified coordinates (0, 0, -1, 100) are invalid! cannot have any less than zero")
35
+ should raise_exception("specified coordinates (0, 0, -1, 100) are invalid - cannot be negative!")
36
36
  end
37
37
 
38
38
  it "captures desktop" do
@@ -55,7 +55,7 @@ describe "win32-screenshot" do
55
55
 
56
56
  it "doesn't allow to capture area of the desktop with invalid coordinates" do
57
57
  lambda {Win32::Screenshot.desktop_area(0, 0, -1, 100) {|width, height, bmp| check_image('desktop2')}}.
58
- should raise_exception("specified coordinates (0, 0, -1, 100) are invalid! cannot have any less than zero")
58
+ should raise_exception("specified coordinates (0, 0, -1, 100) are invalid - cannot be negative!")
59
59
  end
60
60
 
61
61
  it "captures maximized window by window title" do
@@ -120,25 +120,27 @@ describe "win32-screenshot" do
120
120
  it "doesn't allow to capture area of the window with negative coordinates" do
121
121
  title = /calculator/i
122
122
  lambda {Win32::Screenshot.window_area(title, 0, 0, -1, 100) {|width, height, bmp| check_image('calc2')}}.
123
- should raise_exception("specified coordinates (0, 0, -1, 100) are invalid! cannot have any less than zero")
123
+ should raise_exception("specified coordinates (0, 0, -1, 100) are invalid - cannot be negative!")
124
124
  end
125
125
 
126
126
  it "doesn't allow to capture area of the window if coordinates are the same" do
127
127
  title = /calculator/i
128
128
  lambda {Win32::Screenshot.window_area(title, 10, 0, 10, 20) {|width, height, bmp| check_image('calc4')}}.
129
- should raise_exception("specified coordinates (10, 0, 10, 20) are invalid! cannot have x1 > x2 or y1 > y2")
129
+ should raise_exception("specified coordinates (10, 0, 10, 20) are invalid - cannot have x1 > x2 or y1 > y2!")
130
130
  end
131
131
 
132
132
  it "doesn't allow to capture area of the window if second coordinate is smaller than first one" do
133
133
  title = /calculator/i
134
134
  lambda {Win32::Screenshot.window_area(title, 0, 10, 10, 9) {|width, height, bmp| check_image('calc5')}}.
135
- should raise_exception("specified coordinates (0, 10, 10, 9) are invalid! cannot have x1 > x2 or y1 > y2")
135
+ should raise_exception("specified coordinates (0, 10, 10, 9) are invalid - cannot have x1 > x2 or y1 > y2!")
136
136
  end
137
137
 
138
138
  it "doesn't allow to capture area of the window with too big coordinates" do
139
139
  title = /calculator/i
140
- lambda {Win32::Screenshot.window_area(title, 0, 0, 10, 10000) {|width, height, bmp| check_image('calc3')}}.
141
- should raise_exception("specified coordinates (0, 0, 10, 10000) are invalid! max is 212,264")
140
+ hwnd = Win32::Screenshot::BitmapMaker.hwnd(title)
141
+ dimensions = Win32::Screenshot::BitmapMaker.dimensions_for(hwnd)
142
+ lambda {Win32::Screenshot.window_area(title, 0, 0, 10, 1000) {|width, height, bmp| check_image('calc3')}}.
143
+ should raise_exception("specified coordinates (0, 0, 10, 1000) are invalid - maximum are x2=#{dimensions[2]} and y2=#{dimensions[3]}!")
142
144
  end
143
145
 
144
146
  it "captures by window with handle" do
@@ -164,17 +166,23 @@ describe "win32-screenshot" do
164
166
  it "doesn't allow to capture area of the window with handle with invalid coordinates" do
165
167
  hwnd = Win32::Screenshot::BitmapMaker.hwnd(/calculator/i)
166
168
  lambda {Win32::Screenshot.hwnd_area(hwnd, 0, 0, -1, 100) {|width, height, bmp| check_image('desktop2')}}.
167
- should raise_exception("specified coordinates (0, 0, -1, 100) are invalid! cannot have any less than zero")
169
+ should raise_exception("specified coordinates (0, 0, -1, 100) are invalid - cannot be negative!")
168
170
  end
169
171
 
170
172
  it "captures based on coordinates" do
171
173
  hwnd = Win32::Screenshot::BitmapMaker.hwnd(/calculator/i)
172
174
  bmp1 = bmp2 = nil
173
- Win32::Screenshot.hwnd_area(hwnd, 100, 100, 170, 220) do |width, height, bmp|; bmp1 = bmp; end
174
- Win32::Screenshot.hwnd_area(hwnd, 0, 0, 70, 120) do |width, height, bmp|; bmp2 = bmp; end
175
+ Win32::Screenshot.hwnd_area(hwnd, 100, 100, 170, 180) do |width, height, bmp|; bmp1 = bmp; end
176
+ Win32::Screenshot.hwnd_area(hwnd, 0, 0, 70, 80) do |width, height, bmp|; bmp2 = bmp; end
175
177
  bmp1.length.should == bmp2.length
176
178
  bmp1.should_not == bmp2
177
179
  end
180
+
181
+ it "enumerates the available windows" do
182
+ got = Win32::Screenshot::BitmapMaker.list_window_titles
183
+ got.length.should be > 1
184
+ got[0].should be_a String
185
+ end
178
186
 
179
187
  after :all do
180
188
  Process.kill 9, @notepad
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdp-win32screenshot
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 85
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
9
  - 6
10
- version: 0.0.6
10
+ - 1
11
+ version: 0.0.6.1
11
12
  platform: ruby
12
13
  authors:
13
14
  - Jarmo Pertman