win32api打开外部程序并做一些事情

时间:2014-02-19 23:06:47

标签: python

我正在Windows上运行python 2.7,我想打开一个外部程序(比如说notepad.exe)并输入内容并保存该文件。我想我必须使用win32api,但我不知道如何告诉python他在notepad.exe中必须做什么

win32api.WinExec('notepad.exe')

此命令打开记事本,但我不知道如何将文字粘贴到它并转到“文件” - > “另存为...”并保存文件。这甚至可能吗?

实际上我想用一个类似于Paint的程序(它不能用作命令行工具)来打开数据文件并将它们保存为.jpg文件。所以我唯一要做的就是告诉python“File”按钮(s ...)是什么并执行它们......这可能与python一起使用吗?我唯一(丑陋)的解决方案是使用坐标和模拟鼠标点击/按键,但这真的很难看。

2 个答案:

答案 0 :(得分:0)

记事本没有(据我所知)提供COM接口。这将破坏您的自动化尝试。如果您尝试执行notepad.exe自动化,则需要查看某种Windows自动化系统。我喜欢AutoIT - http://www.autoitscript.com/site/autoit/

答案 1 :(得分:0)

在非COM / DCOM应用程序中模拟某些活动的最简单方法之一是通过键盘刺激。 一个简单的例子从python命令切换到最后一个运行的应用程序(例如notepad.exe)并执行打开文件菜单的ALT + F:win32api也可以模拟鼠标移动拖动和放大。等等。

import win32api,win32con,time
win32api.keybd_event(win32con.VK_MENU, 0, 0, 0)
win32api.keybd_event(win32con.VK_TAB, 0, 0, 0)
time.sleep(0.1)
win32api.keybd_event(win32con.VK_TAB, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(win32con.VK_MENU, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(0.1)
win32api.keybd_event(win32con.VK_MENU, 0, 0, 0)
win32api.keybd_event(ord('F'), 0, 0, 0)
win21api.keybd_event(ord('F'), 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(win32con.VK_MENU, 0, win32con.KEYEVENTF_KEYUP, 0)

正如你所看到的那样..让事件能够改变窗口焦点需要一点延迟。