初探pywin32

来源:互联网 发布:java目标字符串替换 编辑:程序博客网 时间:2024/05/22 08:06

手头有一批eps文件。但是这批文件和别的同样叫eps的文件编码又有些不一样。用Ghostscript什么的都打不开也处理不了,但是又需要把它变成jpg图片。目前只能用文泰刻绘软件一个一个的打开,查看,关闭,很麻烦。

正好一直在学python,就百度了一下,发现有第三方库pywin32可以做这件事情。基本上涉及的几个点就是:1.捕获窗口;2.模拟鼠标键盘动作;3.自动获取某路径下文件列表;4.PIL截屏功能;
       由于之前没有接触过win32编程,对于windows的API可以说是一头雾水。虽然现在看来只是完成很简单的功能,但却是省了不少力气。美中不足的是,截屏得到的图片并非是最终的结果,而是需要再从中提取出矩形框内的图形。这一功能没有用python来做,而是交给了matlab来做,后来了解到可能numpy能做这件事,不过还没有往里面加。   另外,还有一点,没有在循环中加中断。想实现按下任意键程序就可以退出的效果,但查了一下,好像需要再装一个hook库,就没有做。现在的功能勉强可以满足需求。大笑

        代码如下。

    

view source
print?
01#-*-coding:utf-8-*-
02import os
03import time
04import win32gui
05import win32api
06import win32con
07from PIL import ImageGrab
08
09#os.startfile("D:\\artcut6\\Prog\\Artcut6.exe")
10#time.sleep(1)
11
12wdname1=u"文泰刻绘2009[] - [无标题-1]"
13w1hd=win32gui.FindWindow(0,wdname1)
14print w1hd
15w2hd=win32gui.FindWindowEx(w1hd,None,None,None)
16print w2hd
17
18def aotohelper_wt(i):
19    #获取窗口焦点
20    win32gui.SetForegroundWindow(w2hd)
21    #快捷键Alt+F
22    win32api.keybd_event(18,0,0,0)      # Alt
23    win32api.keybd_event(70,0,0,0)      # F
24    win32api.keybd_event(70,0,win32con.KEYEVENTF_KEYUP,0)  #释放按键
25    win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0)
26
27    #快捷键I
28    win32api.keybd_event(73,0,0,0)      # I
29    win32api.keybd_event(73,0,win32con.KEYEVENTF_KEYUP,0)
30
31    time.sleep(0.2)
32    wdname3=u"打开"
33    w3hd=win32gui.FindWindow(None,wdname3)  #”打开“ 窗口句柄   
34    #print w3hd
35    time.sleep(0.2)
36
37    #win32gui.MoveWindow(w3hd, 50, 50, 300, 200, True)
38    msg=i
39    edithd=win32gui.FindWindowEx(w3hd,None,"Edit",None)
40    win32api.SendMessage(edithd,win32con.WM_SETTEXT,None,msg)
41    time.sleep(0.3)
42    #btnhd=win32gui.FindWindowEx(w3hd,None,"BUTTON",None)
43    #print btnhd
44    #模拟快捷键Alt+O
45    win32api.keybd_event(18,0,0,0)      # Alt
46    win32api.keybd_event(79,0,0,0)      # O
47    win32api.keybd_event(79,0,win32con.KEYEVENTF_KEYUP,0)  #释放按键
48    win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0)
49    time.sleep(0.1)
50    #模拟鼠标操作
51    win32api.SetCursorPos([30,150])    #为鼠标焦点设定一个位置
52    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0,0
53    win32api.SetCursorPos([500,700])
54    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0,0)
55    time.sleep(0.2)
56    #模拟快捷键F7(极限观察)
57    win32api.keybd_event(118,0,0,0)     # F7
58    win32api.keybd_event(118,0,win32con.KEYEVENTF_KEYUP,0)  #释放按键
59    time.sleep(0.3)
60    #利用PIL截屏
61    path="C:\\Users\\LY\\Desktop\\pic\\"
62    a,b=os.path.splitext(i)          #分解文件名和属性
63    filename=a+'.jpg'     
64    im=ImageGrab.grab()
65    im.save(path+filename)
66
67    #模拟快捷键F8(回到原页面大小)
68    win32api.keybd_event(119,0,0,0)     # F8
69    win32api.keybd_event(119,0,win32con.KEYEVENTF_KEYUP,0)  #释放按键
70
71    #模拟键盘事件delete
72    win32api.keybd_event(46,0,0,0)      # Delete
73    win32api.keybd_event(46,0,win32con.KEYEVENTF_KEYUP,0)  #释放按键
74    time.sleep(0.5)
75
76time.sleep(1)
77filelist=os.listdir('C:\\Users\\LY\\Desktop\\eps\\')
78for in filelist:
79    aotohelper_wt(i)
80    print i
81print "work done!"
0 0
原创粉丝点击