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()函数来实现每次抖动随机的位置。
 

相关内容

    暂无相关文章

评论关闭