pywin32 : 设置窗口位置,剪贴板操作。

寻找窗口并放到指定位置

添加链接描述

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 就可。。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值