手头有一批eps文件。但是这批文件和别的同样叫eps的文件编码又有些不一样。用Ghostscript什么的都打不开也处理不了,但是又需要把它变成jpg图片。目前只能用文泰刻绘软件一个一个的打开,查看,关闭,很麻烦。
正好一直在学python,就百度了一下,发现有第三方库pywin32可以做这件事情。基本上涉及的几个点就是:1.捕获窗口;2.模拟鼠标键盘动作;3.自动获取某路径下文件列表;4.PIL截屏功能;
由于之前没有接触过win32编程,对于windows的API可以说是一头雾水。虽然现在看来只是完成很简单的功能,但却是省了不少力气。美中不足的是,截屏得到的图片并非是最终的结果,而是需要再从中提取出矩形框内的图形。这一功能没有用python来做,而是交给了matlab来做,后来了解到可能numpy能做这件事,不过还没有往里面加。 另外,还有一点,没有在循环中加中断。想实现按下任意键程序就可以退出的效果,但查了一下,好像需要再装一个hook库,就没有做。现在的功能勉强可以满足需求。
代码如下。
07 | from PIL import ImageGrab |
12 | wdname1 = u "文泰刻绘2009[] - [无标题-1]" |
13 | w1hd = win32gui.FindWindow( 0 ,wdname1) |
15 | w2hd = win32gui.FindWindowEx(w1hd, None , None , None ) |
20 | win32gui.SetForegroundWindow(w2hd) |
22 | win32api.keybd_event( 18 , 0 , 0 , 0 ) |
23 | win32api.keybd_event( 70 , 0 , 0 , 0 ) |
24 | win32api.keybd_event( 70 , 0 ,win32con.KEYEVENTF_KEYUP, 0 ) |
25 | win32api.keybd_event( 18 , 0 ,win32con.KEYEVENTF_KEYUP, 0 ) |
28 | win32api.keybd_event( 73 , 0 , 0 , 0 ) |
29 | win32api.keybd_event( 73 , 0 ,win32con.KEYEVENTF_KEYUP, 0 ) |
33 | w3hd = win32gui.FindWindow( None ,wdname3) |
39 | edithd = win32gui.FindWindowEx(w3hd, None , "Edit" , None ) |
40 | win32api.SendMessage(edithd,win32con.WM_SETTEXT, None ,msg) |
45 | win32api.keybd_event( 18 , 0 , 0 , 0 ) |
46 | win32api.keybd_event( 79 , 0 , 0 , 0 ) |
47 | win32api.keybd_event( 79 , 0 ,win32con.KEYEVENTF_KEYUP, 0 ) |
48 | win32api.keybd_event( 18 , 0 ,win32con.KEYEVENTF_KEYUP, 0 ) |
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 ) |
57 | win32api.keybd_event( 118 , 0 , 0 , 0 ) |
58 | win32api.keybd_event( 118 , 0 ,win32con.KEYEVENTF_KEYUP, 0 ) |
61 | path = "C:\\Users\\LY\\Desktop\\pic\\" |
62 | a,b = os.path.splitext(i) |
65 | im.save(path + filename) |
68 | win32api.keybd_event( 119 , 0 , 0 , 0 ) |
69 | win32api.keybd_event( 119 , 0 ,win32con.KEYEVENTF_KEYUP, 0 ) |
72 | win32api.keybd_event( 46 , 0 , 0 , 0 ) |
73 | win32api.keybd_event( 46 , 0 ,win32con.KEYEVENTF_KEYUP, 0 ) |
77 | filelist = os.listdir( 'C:\\Users\\LY\\Desktop\\eps\\' ) |