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

标签 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")

它不起作用并返回错误“异常:意外的数据类型”。看起来复制粘贴部分不起作用。

你能帮我吗?谢谢。

错误:

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'>

最佳答案

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

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

啊 - 你在这里想做的是评估函数,但你省略了括号 ( & )。所以发生的事情是 aaa 已被分配了函数本身。要调用该函数,请查看此答案以了解详细信息Troubles with clipboard in Python

您还从上面一行的函数中删除了括号。

win32clipboard.EmptyClipboard

请尝试以下操作:

win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText("test data")
...
aaa = win32clipboard.GetClipboardText()
<小时/>

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

关于Python使用win32api,模拟鼠标移动并复制/粘贴到磁盘文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23902839/

相关文章:

python - 直接调用 fixture "setUp"。 Fixtures 不应该被直接调用

python - 如何从python中的文件中读取字典数据?

python - 在selenium中运行Xpath的text()

python - 即使我可以使用凭据进行 SSH,Fabric 也会要求输入密码

c - 使用 Win32 API 将文本插入特定偏移量的文件

c++ - 如何将 Visual Studio 2010 WinForm 对象添加到 C++ 控制台应用程序项目

c++ - 没有子类化的 CAsyncSocket?

python - 填补多个用户缺失的时间段

c++ - union 对象就像一个结构

c++ - 用于确定 C++ 代码使用的 Win32 API 版本的工具?