Python使用win32api,模拟鼠标移动并复制/粘贴到磁盘文件中

时间:2014-05-28 04:27:56

标签: python winapi

大家好......我正在使用win32api。用途是在计算机屏幕上移动鼠标,突出显示区域,复制内容,然后将内容发送到MS Excel电子表格。

以下是代码:

import xlwt
import win32api
import win32con 
import win32clipboard
import time

x,y = win32api.GetCursorPos()
win32api.SetCursorPos((36, 311))

# choose the contents, highlight area from 36,311 to 66,400
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0) 
time.sleep(0.05)
win32api.SetCursorPos((66, 400))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

# copy the contents
time.sleep(0.05)
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard
aaa = win32clipboard.SetClipboardData
win32clipboard.CloseClipboard()

# write the contents into speadsheet
book = xlwt.Workbook(encoding='utf-8', style_compression = 0)
sheet = book.add_sheet('SheetOK', cell_overwrite_ok = True)
sheet.write (1, 1, aaa)
book.save("C:\\paste_write.xls")

它无法正常工作并返回错误“Exception:Unexpected data type”。看起来复制和粘贴部分无效。

你能帮帮我吗?感谢。

错误:

Traceback (most recent call last):
  File "C:\Python27\simulate mouse click.py", line 27, in <module>
    sheet.write (0, 0, aaa)
  File "C:\Python27\lib\xlwt\Worksheet.py", line 1030, in write
    self.row(r).write(c, label, style)
  File "C:\Python27\lib\xlwt\Row.py", line 259, in write
    raise Exception("Unexpected data type %r" % type(label))
Exception: Unexpected data type <type 'builtin_function_or_method'>

1 个答案:

答案 0 :(得分:1)

错误消息显示失败的代码行:

Traceback (most recent call last):
  File "C:\Python27\simulate mouse click.py", line 27, in <module>
    sheet.write (0, 0, aaa)
  ^^^ THIS YOUR FUNCTION CALL THAT FAILED

  File "C:\Python27\lib\xlwt\Worksheet.py", line 1030, in write
    self.row(r).write(c, label, style)
  File "C:\Python27\lib\xlwt\Row.py", line 259, in write
    raise Exception("Unexpected data type %r" % type(label))
  ^^^ THIS IS WHERE IT ACTUALLY FAILED IN THE LIBRARY

Exception: Unexpected data type <type 'builtin_function_or_method'>

错误消息告诉您某些内容收到“意外数据类型”,其类型为“builtin_function_or_method”。因此,对sheet.write的调用发生了,但它反对您传入的数据。

如果你回顾一下aaa的价值:

aaa = win32clipboard.SetClipboardData

啊 - 你在这里要做的就是评估这个功能,但你已经不再使用括号(&amp; )。所以发生的事情是aaa已经分配了函数本身。要调用此函数,请查看此答案以获取详细信息Troubles with clipboard in Python

你也离开了上面一行上的函数的括号。

win32clipboard.EmptyClipboard

请尝试以下方法:

win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText("test data")
...
aaa = win32clipboard.GetClipboardText()

这里似乎存在第二个问题,您必须将数据传递给SetClipbardData - 它不会在当前所选文本上触发复制操作。您可能需要使用不同的API。