先贴个图:
看了javaeye上某一高人关于如何用win32api点击ie提示条的文章,学习了这种方法,不过原文没有进一步说明,当点击提示条出现下拉选项时,应该如何点击相应的选项的方法,我自己用autoit解决了这个问题,代码如下:
先看原文中的windowsAPI module代码如下:
###################################################
#WindowsAPI Module
#############################################
module WindowsInput
# Windows API functions
SetCursorPos = Win32API.new('user32','SetCursorPos', 'II', 'I')
SendInput = Win32API.new('user32','SendInput', 'IPI', 'I')
# Windows API constants
INPUT_MOUSE = 0
MOUSEEVENTF_LEFTDOWN = 0x0002
MOUSEEVENTF_LEFTUP = 0x0004
MOUSEEVENTF_RIGHTDOWN = 0x0008
MOUSEEVENTF_RIGHTUP = 0x0010
module_function
def send_input(inputs)
n = inputs.size
ptr = inputs.collect {|i| i.to_s}.join # flatten arrays into single string
SendInput.call(n, ptr, inputs[0].size)
end
def create_mouse_input(mouse_flag)
mi = Array.new(7, 0)
mi[0] = INPUT_MOUSE
mi[4] = mouse_flag
mi.pack('LLLLLLL') # Pack array into a binary sequence usable to SendInput
end
def move_mouse(x, y)
SetCursorPos.call(x, y)
end
def right_click
rightdown = create_mouse_input(MOUSEEVENTF_RIGHTDOWN)
rightup = create_mouse_input(MOUSEEVENTF_RIGHTUP)
send_input( [rightdown, rightup] )
end
def left_click
leftdown = create_mouse_input(MOUSEEVENTF_LEFTDOWN)
leftup = create_mouse_input(MOUSEEVENTF_LEFTUP)
send_input( [leftdown, leftup] )
end
end
原文中主程序引用部分代码如下:
x = $ie.document.parentWindow.screenLeft.to_i + 10
y = $ie.document.parentWindow.screenTop.to_i - 10
WindowsInput.move_mouse(x, y)
WindowsInput.left_click
我自己做了改进的代码如下:
$ie2.bring_to_front #需要将待操作的windows窗口置于前端,针对多窗口的情况
$ie2.maximize() #特别注意窗口需要最大化,否则计算x,y坐标会出错
x = $ie2.document.parentWindow.screenLeft.to_i + 10
y = $ie2.document.parentWindow.screenTop.to_i - 10
WindowsInput.move_mouse(x, y)
WindowsInput.left_click
$autoit.Send('{DOWN}')#此处是用autoit来操作提示栏的下拉选项
$autoit.Send('{ENTER}')