寻找窗口并放到指定位置
def reset_window_pos(targetTitle):
hWndList = []
win32gui.EnumWindows(lambda hWnd, param: param.append(hWnd), hWndList)
for hwnd in hWndList:
classname = win32gui.GetClassName(hwnd)
title = win32gui.GetWindowText(hwnd)
if (title==targetTitle): #调整目标窗口到坐标(600,300),大小设置为(600,600)
win32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, 600,300,600,600, win32con.SWP_SHOWWINDOW) # 最后这个是显示窗口
reset_window_pos("PyWin32") # 这个窗口一定要再桌面上,不能是最小化的,有点窗口置顶的赶脚
win32gui.SetWindowPos (hWnd, InsertAfter, X, Y, cx, cy, Flags)
设置窗口的位置和大小
Parameters
hWnd : PyHANDLE
Handle to the window
InsertAfter : PyHANDLE
hWnd的窗口将放置在下面。可以是窗口句柄,也可以是一个HWND_BOTTOM,HWND_NOTOPMOST,HWND_TOP或HWND_TOPMOST
X : int
New X coord
Y : int
New Y coord
cx : int
New width of window
cy : int
New height of window
Flags : int
win32con.SWP_ *标志的组合 更多信息还是去看 MSDN 吧,,
win32gui.EnumWindows
EnumWindows(callback, extra)
通过将句柄传递给每个窗口,依次传递给应用程序定义的回调函数,可以枚举屏幕上所有的顶级窗口。
Parameters
callback : function
用作回调的Python函数。函数可以返回False以停止枚举,或引发异常
extra : object
任何python对象-这将作为第二个参数(第一个是hwnd)传递给回调函数。
剪贴板操作win32clipboard
虽然跟其他模块比不多,但是用法还是不少,,,,当然不止下面这些,详细的去看文档吧,,,
CloseClipboard
关闭剪贴板
EmptyClipboard
清空剪贴板,并释放对剪贴板中数据的句柄
GetClipboardData(foramt) 以format格式输出。。
以指定格式从剪贴板检索数据。请注意,并非所有数据格式都受支持.应用程序可以使用EnumClipboardFormats函数预先枚举可用的格式。
CF_HDROP Unicode文件名的元组。
CF_UNICODETEXT Unicode对象。 # 默认是这个
CF_OEMTEXT 字符串对象。
CF_TEXT 字符串对象。
CF_ENHMETAFILE 具有从GetEnhMetaFileBits获得的二进制数据的字符串
CF_METAFILEPICT 具有从GetMetaFileBitsEx获得的二进制数据的字符串(当前已断开)
CF_BITMAP 位图的整数句柄。
OpenClipboard
打开剪贴板进行检查。
SetClipboardData(foramt,hMem)
以指定的剪贴板格式将数据放置在剪贴板上,format就是 上面那些格式,
hMem,以指定格式,字符串,unicode或任何支持缓冲区接口的对象的整数句柄。
分配了全局内存对象,并将对象的缓冲区复制到新内存。此参数可以为0,指示窗口根据请求以指定的剪贴板格式(提供格式)提供数据。
SetClipboardText(text, format )
在剪贴板上放置文本。您可以将Unicode或字符串/字节对象传递给此函数,但是根据'format'参数的值,可以将其转换为该参数的适当类型。
参考脑补连接
将复制的内容修改一下格式,然后再剪贴板上替换原来的。
wc.OpenClipboard()
txt=wc.GetClipboardData(win32con.CF_UNICODETEXT)
txt=str(txt).strip()
txt=txt.splitlines()
n=len(txt)
txt=' '.join(txt) # 就是连成一行了吧。。。
wc.EmptyClipboard()
wc.SetClipboardData(win32con.CF_TEXT, txt.encode('gbk')) # 系统默认使用gbk 的编码,用别的会乱码的。
wc.CloseClipboard()
print('删除了{}个换行符\n'.format(n))
print(txt+'\n')
稍微增加一点点功能,,,最近老是要翻译,一条条的复制好麻烦欸,,,所以来增加个翻译功能吧,,
其实也没撒,就是把我以前写的通过有道实现翻译的爬虫写进去就行,,脑补链接
import requests
import json
import time,random,hashlib # 解码 md5
import win32clipboard as wc
import win32api,win32gui,win32con
def translate(txt):
timestamp = time.time() * 1000
salt = str(timestamp) + str(random.randint(0, 10))
temp = "fanyideskweb" + txt + salt + "@6f#X3=cCuncYssPsuRUE"
sign = hashlib.md5(temp.encode("utf-8")).hexdigest()
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"
, 'i': txt,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': salt,
'sign': sign,
'ts': timestamp,
'bv': 'cc652a2ad669c22da983a705e3bca726',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&sessionFrom=null'
response = requests.get(url, params=headers)
html = response.content.decode()
target = json.loads(html)
return target['translateResult'][0][0]['tgt']
def clipboard():
wc.OpenClipboard()
txt=wc.GetClipboardData(win32con.CF_UNICODETEXT)
txt=translate(txt)
wc.EmptyClipboard()
wc.SetClipboardData(win32con.CF_TEXT, txt.encode('gbk'))
wc.CloseClipboard()
print(txt+'\n')
只要我们复制一下要翻译的话,执行一下 clipboard() 再ctrl+v 就是翻译好的了,,但是过长的就不行了,看来还要多多改进啊。
如果出现了复制不了的情况,应该就是剪贴板没关上,调用一下closeclipborad 就可。。