python学习——实现当前窗口抖动

QQ聊天窗口有个很有意思的窗口抖动功能,其实实现起来非常容易。网上之前也有很多前辈做过此类的恶作剧软件,点击后使“受害者”的当前窗口抖个不停,当然,非常有娱乐效果。其实本文说是拿python实现是不确切的,更合理的说法应该是拿python调用win32 gui的api函数来实现窗口抖动。其实思路很简单,如下:

1. 获取到当前窗口的句柄。可以使用GetForegroundWindow()函数来实现。

2. 获取到当前窗口的坐标位置。可以使用GetWindowRect()函数来实现。此处不仅需要当前窗口的句柄,也需要我们定义一个结构体来实现坐标值得存储。

3. 改变当前窗口的位置。可以使用SetWindowPos()函数来实现。函数原型为BOOL SetWindowPos(HWN hWnd,HWND hWndlnsertAfter,int X,int Y,int cx,int cy,UNIT.Flags),其中hWnd为窗口的句柄,hWndInsertAfter指在z序中的位于被置位的窗口前的窗口句柄,X指以客户坐标指定窗口新位置的左边界,Y指以客户坐标指定窗口新位置的顶边界,cx指以像素指定窗口的新的宽度,cy指以像素指定窗口的新的高度,uFlags:窗口尺寸和定位的标志。具体参数如何设置可以网上搜索查找资料。

源码如下:

import random
import win32gui
import win32api,win32con

#定义结构体,存储当前窗口坐标
class RECT(ctypes.Structure):
    _fields_ = [('left', ctypes.c_int),
                ('top', ctypes.c_int),
                ('right', ctypes.c_int),
                ('bottom', ctypes.c_int)]
rect = RECT()
HWND = win32gui.GetForegroundWindow()#获取当前窗口句柄
ctypes.windll.user32.GetWindowRect(HWND, ctypes.byref(rect))#获取当前窗口坐标
for i in range(2,200):
    win32gui.SetWindowPos(HWND, None, rect.left+5*random.randint(1,i), rect.top-5*random.randint(1,i), rect.right-rect.left, rect.bottom-rect.top, win32con.SWP_NOSENDCHANGING|win32con.SWP_SHOWWINDOW)#实现更改当前窗口位置
win32gui.SetWindowPos(HWND, None, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, win32con.SWP_NOSENDCHANGING|win32con.SWP_SHOWWINDOW)#将窗口恢复至初始位置
同时为了使每次抖动位置不一样,还使用了random模块中的randint()函数来实现每次抖动随机的位置。


  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值