i would like do screen capture and then to display it in that app’s
window, or be able to save the file in hard disk as a GIF or PNG. I
wonder if TCL Ruby or RMagick can already do that? Thanks.
On Sep 28, 11:29 am, liketofindoutwhy [email protected]
wrote:
i would like do screen capture and then to display it in that app’s
window, or be able to save the file in hard disk as a GIF or PNG. I
wonder if TCL Ruby or RMagick can already do that? Thanks.
oh i actually mean Ruby/Tk
liketofindoutwhy wrote:
On Sep 28, 11:29 am, liketofindoutwhy [email protected]
wrote:i would like do screen capture and then to display it in that app’s
window, or be able to save the file in hard disk as a GIF or PNG. I
wonder if TCL Ruby or RMagick can already do that? Thanks.oh i actually mean Ruby/Tk
RMagick can do it on systems that have X Window. In other words, not MS
Windows. http://studio.imagemagick.org/RMagick/doc/image1.html#capture.
On Sep 28, 1:46 pm, Tim H. [email protected] wrote:
Windows.http://studio.imagemagick.org/RMagick/doc/image1.html#capture.
hm… so can you install x-window capabilities on XP or Vista… will
that work? I think the Cygwin install x-window capabilities on
Windows.
2008/9/30 liketofindoutwhy [email protected]:
RMagick can do it on systems that have X Window. In other words, not MS
Windows.http://studio.imagemagick.org/RMagick/doc/image1.html#capture.hm… so can you install x-window capabilities on XP or Vista… will
that work? I think the Cygwin install x-window capabilities on
Windows.
There is screen_capture method in watir. But it is unstable.
Here is the revised screen_capture method for Windows:
require ‘win32ole’
require ‘Win32API’
def screen_capture(filename, active_window_only=false)
keybd_event = Win32API.new(“user32”, “keybd_event”, [‘I’,‘I’,‘L’,‘L’],
‘V’)
openClipboard = Win32API.new(‘user32’, ‘OpenClipboard’, [‘L’], ‘I’)
setClipboardData = Win32API.new(‘user32’, ‘SetClipboardData’, [‘I’,
‘I’], ‘I’)
closeClipboard = Win32API.new(‘user32’, ‘CloseClipboard’, [], ‘I’)
globalAlloc = Win32API.new(‘kernel32’, ‘GlobalAlloc’, [‘I’, ‘I’], ‘I’)
globalLock = Win32API.new(‘kernel32’, ‘GlobalLock’, [‘I’], ‘I’)
globalUnlock = Win32API.new(‘kernel32’, ‘GlobalUnlock’, [‘I’], ‘I’)
memcpy = Win32API.new(‘msvcrt’, ‘memcpy’, [‘I’, ‘P’, ‘I’], ‘I’)
wsh = WIN32OLE.new(‘Wscript.Shell’)
if not active_window_only
keybd_event.Call(0x2C,0,0,0) # Print Screen
else
keybd_event.Call(0x2C,1,0,0) # Alt+Print Screen
end
exec = wsh.Exec(‘mspaint.exe’)
wsh.AppActivate(exec.ProcessID)
sleep(1)
Ctrl + V : Paste
wsh.SendKeys(“^v”)
sleep(1)
Alt F + A : Save As
wsh.SendKeys(“%fa”)
copy filename to clipboard
hmem = globalAlloc.Call(0x0002, filename.length+1)
mem = globalLock.Call(hmem)
memcpy.Call(mem, filename, filename.length+1)
globalUnlock.Call(hmem)
openClipboard.Call(0)
setClipboardData.Call(1, hmem)
closeClipboard.Call
sleep(1)
Ctrl + V : Paste
wsh.SendKeys(“^v”)
if filename[/.gif/i]
wsh.SendKeys(“{TAB}g”)
elsif filename[/.jpg/i]
wsh.SendKeys(“{TAB}j”)
end
wsh.SendKeys(“~”) # enter
sleep(1)
wsh.SendKeys(“yy”)
sleep(4)
exec.Terminate
end
screen_capture(“c:\test.gif”)
Regards,
Park H.