screen_capture keybd_event

require 'Win32API'

module Watir
  module ScreenCapture

    KEYEVENTF_KEYUP = 0x2
    SW_HIDE         = 0
    SW_SHOW         = 5
    SW_SHOWNORMAL   = 1
    VK_CONTROL      = 0x11
    VK_F4           = 0x73
    VK_MENU         = 0x12
    VK_RETURN       = 0x0D
    VK_SHIFT        = 0x10
    VK_SNAPSHOT     = 0x2C
    VK_TAB      = 0x09
    GMEM_MOVEABLE = 0x0002
    CF_TEXT = 1

    # this method saves the current window or whole screen as either a bitmap or a jpeg
    # It uses paint to save the file, so will barf if a duplicate filename is selected, or  the path doesnt exist etc
    #    * filename        - string  -  the name of the file to save. If its not fully qualified the current directory is used
    #    * active_window   - boolean - if true, the whole screen is captured, if false,  just the active window is captured
    #    * save_as_bmp     - boolean - if true saves the file as a bitmap, saves it as a jpeg otherwise
    def screen_capture(filename , active_window_only=false, save_as_bmp=false)


      keybd_event = Win32API.new("user32", "keybd_event", ['I','I','L','L'], 'V')
      vkKeyScan = Win32API.new("user32", "VkKeyScan", ['I'], 'I')
      winExec = Win32API.new("kernel32", "WinExec", ['P','L'], 'L')
      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')


      filename = Dir.getwd.tr('/','//') + '//' + filename unless filename.index('//')

      if active_window_only ==false
          keybd_event.Call(VK_SNAPSHOT,0,0,0)   # Print Screen
      else
          keybd_event.Call(VK_SNAPSHOT,1,0,0)   # Alt+Print Screen
      end

      winExec.Call('mspaint.exe', SW_SHOW)
      sleep(1)

      # Ctrl + V  : Paste
      keybd_event.Call(VK_CONTROL, 1, 0, 0)
      keybd_event.Call(vkKeyScan.Call(?V), 1, 0, 0)
      keybd_event.Call(vkKeyScan.Call(?V), 1, KEYEVENTF_KEYUP, 0)
      keybd_event.Call(VK_CONTROL, 1, KEYEVENTF_KEYUP, 0)


      # Alt F + A : Save As
      keybd_event.Call(VK_MENU, 1, 0, 0)
      keybd_event.Call(vkKeyScan.Call(?F), 1, 0, 0)
      keybd_event.Call(vkKeyScan.Call(?F), 1, KEYEVENTF_KEYUP, 0)
      keybd_event.Call(VK_MENU, 1, KEYEVENTF_KEYUP, 0)
      keybd_event.Call(vkKeyScan.Call(?A), 1, 0, 0)
      keybd_event.Call(vkKeyScan.Call(?A), 1, KEYEVENTF_KEYUP, 0)
      sleep(1)

      # copy filename to clipboard
      hmem = globalAlloc.Call(GMEM_MOVEABLE, filename.length+1)
      mem = globalLock.Call(hmem)
      memcpy.Call(mem, filename, filename.length+1)
      globalUnlock.Call(hmem)
      openClipboard.Call(0)
      setClipboardData.Call(CF_TEXT, hmem)
      closeClipboard.Call
      sleep(1)

      # Ctrl + V  : Paste
      keybd_event.Call(VK_CONTROL, 1, 0, 0)
      keybd_event.Call(vkKeyScan.Call(?V), 1, 0, 0)
      keybd_event.Call(vkKeyScan.Call(?V), 1, KEYEVENTF_KEYUP, 0)
      keybd_event.Call(VK_CONTROL, 1, KEYEVENTF_KEYUP, 0)

      if save_as_bmp == false
        # goto the combo box
        keybd_event.Call(VK_TAB, 1, 0, 0)
        keybd_event.Call(VK_TAB, 1, KEYEVENTF_KEYUP, 0)
        sleep(0.5)

        # select the first entry with J
        keybd_event.Call(vkKeyScan.Call(?J), 1, 0, 0)
        keybd_event.Call(vkKeyScan.Call(?J), 1, KEYEVENTF_KEYUP, 0)
        sleep(0.5)
      end

      # Enter key
      keybd_event.Call(VK_RETURN, 1, 0, 0)
      keybd_event.Call(VK_RETURN, 1, KEYEVENTF_KEYUP, 0)
      sleep(1)

      # Alt + F4 : Exit
      keybd_event.Call(VK_MENU, 1, 0, 0)
      keybd_event.Call(VK_F4, 1, 0, 0)
      keybd_event.Call(VK_F4, 1, KEYEVENTF_KEYUP, 0)
      keybd_event.Call(VK_MENU, 1, KEYEVENTF_KEYUP, 0)
      sleep(1)

    end
  end

end


#screenCapture( "f.bmp", false , true)

 

 

 

 

From:

 

http://www.google.cn/codesearch?hl=zh-CN&q=keybd_event+show:UlBGXJgeX7k:jN2QNNhYA9Q:UlBGXJgeX7k&sa=N&cd=4&ct=rc&cs_p=git://github.com/Pistos/watir-mirror.git&cs_f=watir/lib/watir/screen_capture.rb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值