精华内容
下载资源
问答
  • 2019-08-13 21:25:08

    方法一:
    使用定时器,然后在定时器响应函数中定时调用,SetWindowPos()函数,第一个参数写HWND_TOPMOST

    方法二:
    因为2000/XP改变了SetForegroundWindow的执行方式,不允许随便把窗口提前,打扰用户的工作。可以用附加本线程到最前面窗口的线程,从而欺骗windows。
     

    AttachThreadInput(GetWindowThreadProcessId(::GetForegroundWindow(),NULL), GetCurrentThreadId(),TRUE); 
    SetForegroundWindow(); 
    SetFocus(); 
    AttachThreadInput(GetWindowThreadProcessId(::GetForegroundWindow(),NULL), GetCurrentThreadId(),FALSE);


    方法三:

    如何激活指定的窗口事件      
               我们知道,Windows    9x/2000中SetForegroundWindow函数当用户正在操作其他窗口时是不能强制某个窗口为前景窗口的,而是激活窗口并调用FlashWindowEx函数来通知用户。但是很多实际情况要求将激活窗口的同时将创建这个窗口的线程置为前景状态。碰到这种情况我们可以使用USER32.DLL中的几个未公开API函数。    
     

      void    SwitchToThisWindow    (    
       HWND    hWnd,        //    被激活的窗口句柄    
       BOOL    bRestore    //    如果被极小化,则恢复窗口    
       );    
       //必须动态加载这个函数。    
       typedef    void    (WINAPI    *PROCSWITCHTOTHISWINDOW)    (HWND,    BOOL);    
       PROCSWITCHTOTHISWINDOW    SwitchToThisWindow;    
       HMODULE    hUser32    =    GetModuleHandle("user32");    
       SwitchToThisWindow    =    (    PROCSWITCHTOTHISWINDOW)    
       GetProcAddress(hUser32,    "SwitchToThisWindow");        
       //接下来只要用任何现存窗口的句柄调用这个函数即可,第二个参数指定如果窗口极小化,是否恢复其原状态。    
       SwitchToThisWindow(hWnd,    TRUE);   

     

    更多相关内容
  • 1 运行窗口打开(第一) 右击开始菜单-->运行->输入services.msc-->回车 ...2 计算机管理窗口打开(第二) ...3 任务管理器打开 (第三种) 右击最下方任务栏-->任务管理器-->服务 ...

    1 运行窗口打开(第一种)

    右击开始菜单-->运行->输入services.msc-->回车

     

     

    2 计算机管理窗口打开(第二种)

    右击此电脑-->管理-->计算机管理-->服务和应用程序-->服务

     

    3 任务管理器打开 (第三种)

    右击最下方任务栏-->任务管理器-->服务

     

    展开全文
  • Windows 任意窗口置顶显示

    千次阅读 2021-12-16 12:33:14
    Window TopMost Control是一款非常小巧简单的 Windows 软件,功能也只有一个——就是让任意窗口置顶显示。 官网:Window TopMost Control 网盘:https://pan.baidu.com/s/1asfduTA5tMes5kJFc9aRmQ 提取码:toqx ...

    让任意窗口置顶显示

    Window TopMost Control 是一款非常小巧简单的 Windows 软件,功能也只有一个——就是让任意窗口置顶显示

    使用方法

    软件为绿色版,下载后解压到文件夹中,双击运行 TopMost(_x64).exe,然后就能在任务栏托盘中看到软件图标了。

    右键软件图标 -> Window List -> 勾选需要置顶显示的窗口,完成。

     此时,所选程序已置顶显示在最上面,即使点击其它窗口切换,也不会被覆盖。而且可以随时对置顶窗口进行操作和编辑。

    除了右键菜单,还有三种方式可以进行置顶设置:

    1. 选中窗口 -> 按快捷键「Ctrl + Alt + Space」;

    2. 选中窗口 -> 双击托盘里的软件图标;

    3. 使用 CMD 命令行。

    设置(Options)中可以选择开机启动、保存窗口置顶配置、修改快捷键等。

     

     

     

    展开全文
  • Python对Windows程序窗口的操作

    千次阅读 多人点赞 2021-10-25 15:36:23
    hwnd = win32gui.FindWindow(lpClassName=None, lpWindowName=None) # 查找窗口,不找子窗口,返回值为0表示未找到窗口 hwnd = win32gui.FindWindowEx(hwndParent=0, hwndChildAfter=0, lpszClass=None, lpszWindow=...

    Pywin32是一个Python库,为python提供访问Windows API的扩展,提供了齐全的windows常量、接口、线程以及COM机制等等。

    一,Python对Windows程序窗口操作,最大化,最小化,关闭

    import win32con
    import win32gui
    import time
    
    '''
    hwnd = win32gui.FindWindow(lpClassName=None, lpWindowName=None)  # 查找窗口,不找子窗口,返回值为0表示未找到窗口
    hwnd = win32gui.FindWindowEx(hwndParent=0, hwndChildAfter=0, lpszClass=None, lpszWindow=None)  # 查找子窗口,返回值为0表示未找到子窗口
    
    win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL)
    SW_HIDE:隐藏窗口并激活其他窗口。nCmdShow=0。
    SW_SHOWNORMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志。nCmdShow=1。
    SW_SHOWMINIMIZED:激活窗口并将其最小化。nCmdShow=2。
    SW_SHOWMAXIMIZED:激活窗口并将其最大化。nCmdShow=3。
    SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。nCmdShow=4。
    SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。nCmdShow=5。
    SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。nCmdShow=6。
    SW_SHOWMINNOACTIVE:窗口最小化,激活窗口仍然维持激活状态。nCmdShow=7。
    SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。nCmdShow=8。
    SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。nCmdShow=9。
    '''
    
    # 先等待3秒
    time.sleep(3)
    
    # 查找窗口句柄
    hwnd = win32gui.FindWindow("YodaoMainWndClass", u"网易有道词典")
    print(hwnd)
    
    if hwnd != 0:
        # 若最小化,则将其显示,反之则最小化
        if win32gui.IsIconic(hwnd):
            win32gui.ShowWindow(hwnd, win32con.SW_SHOWMAXIMIZED)
        else:
            win32gui.ShowWindow(hwnd, win32con.SW_SHOWMINIMIZED)
    
        win32gui.SetForegroundWindow(hwnd)  # 设置前置窗口
        # win32gui.SetFocus(hwnd)  # 设置聚焦窗口
    
        # 关闭窗口
        win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0)
    

    二,Python窗体操作函数

    实现了一个window下对窗体操作的类,实现的功能如:移动窗体、获取窗体位置和大小、截取窗体图片、坐标转换等。

    # coding=utf-8
    import win32con
    import win32api
    import win32gui
    import win32ui
    from ctypes import *
    from ctypes import wintypes
    
    GetForegroundWindow = windll.user32.GetForegroundWindow
    GetWindowRect = windll.user32.GetWindowRect
    SetForegroundWindow = windll.user32.SetForegroundWindow
    GetWindowText = windll.user32.GetWindowTextA
    MoveWindow = windll.user32.MoveWindow
    EnumWindows = windll.user32.EnumWindows
    
    class RECT(Structure):
        _fields_ = [
            ('left', c_long),
            ('top', c_long),
            ('right', c_long),
            ('bottom', c_long)
        ]
    
    
    class POINT(Structure):
        _fields_ = [
            ('x', c_long),
            ('y', c_long),
        ]
    
    
    class FormControl(object):
        def __init__(self):
            self.win_hd = None
            self.win_title = ''
    
        def bindActiveWindow(self):
            """
            函数功能:获取当前焦点所在窗口
            """
            self.win_hd = GetForegroundWindow()
    
        def bindWindowByName(self, win_name):
            """
            函数功能:根据窗体名获取窗体句柄
            """
            self.win_title = win_name
            pro_fun_type = CFUNCTYPE(c_bool, c_int, c_long)
            pro_fun_p = pro_fun_type(self.EnumWindowsProc)
            EnumWindows(pro_fun_p, None)
    
        def getWinRect(self):
            """
            函数功能:获取窗体的位置和大小
            """
            if self.win_hd is None:
                return None
            rect=RECT()
            GetWindowRect(self.win_hd,byref(rect))
            return rect
    
        def toScreenPos(self, x,y):
            """
            函数功能:将窗体内部坐标转换为相对于显示屏的绝对坐标
            """
            #未指定窗口,则结束函数
            if self.win_hd is None:
                return None
            rect=self.getWinRect()
            #指定的坐标不在窗体内,则结束函数
            if x < 0 or y < 0 or x > rect.right or y > rect.bottom:
                return None
            pos = POINT()
            pos.x = x + rect.left
            pos.y = y + rect.top
            return pos
    
        def toWindowPos(self,x,y):
            """
            函数功能:将绝对坐标转换成相对于窗体内部坐标
            """
            if self.win_hd is None:
                return None
            rect = self.getWinRect()
            pos = POINT()
            pos.x = x - rect.left
            pos.y = y - rect.top
            # 指定的坐标不在窗体内,则结束函数
            if pos.x < 0 or pos.y < 0 or pos.x > rect.right or pos.y > rect.bottom:
                return None
            return pos
    
        def WindowActive(self):
            """
            函数功能:将窗体置前
            """
            if self.win_hd is None:
                return None
            SetForegroundWindow(self.win_hd)
    
        def getHWND(self):
            return self.win_hd
    
        def getWinTitle(self):
            """
            函数功能:获取窗体的标题
            """
            if self.win_hd is None:
                return None
            buffer = create_string_buffer(255,'\0')
            GetWindowText(self.win_hd,buffer,255)
            value=buffer.value.decode('gbk')
            return value
    
        def MoveTo(self,x,y):
            """
            函数功能:移动窗体到指定坐标位置
            """
            if self.win_hd is None:
                return None
            rect = self.getWinRect()
            MoveWindow(self.win_hd,x,y,rect.right-rect.left,rect.bottom-rect.top,True)
    
        def WinCapture(self,path,x,y,w,h):
            """
            函数功能:抓取窗体截图,并保存到文件
            参    数:path 保存路径
                     x 截取起始x坐标(窗体内相对坐标)
                     y 截取起始y坐标(窗体内相对坐标)
                     w 截取宽度,为0则取窗体宽度
                     h 截取长度,为0则取窗体高度
            """
            if self.win_hd is None:
                return None
            rect = self.getWinRect()
            if w == 0:
                w = rect.right - rect.left
            if h == 0:
                h = rect.bottom - rect.top
            if x < 0 or y < 0 or (x+w) > rect.right or (y+h) > rect.bottom:
                return None
            self.Capture(self.win_hd,path,x,y,w,h,0)
    
        def WinCapture_Mem(self,x,y,w,h):
            """
            函数功能:抓取窗体截图,并返回图像内存数据
            参    数:
                     x 截取起始x坐标(窗体内相对坐标)
                     y 截取起始y坐标(窗体内相对坐标)
                     w 截取宽度,为0则取窗体宽度
                     h 截取长度,为0则取窗体高度
            """
            if self.win_hd is None:
                return None
            rect = self.getWinRect()
            if w == 0:
                w = rect.right - rect.left
            if h == 0:
                h = rect.bottom - rect.top
            if x < 0 or y < 0 or (x+w) > rect.right or (y+h) > rect.bottom:
                return None
            return self.Capture(self.win_hd,'',x,y,w,h,1)
    
        def Capture(self, hd, path, x, y, w, h, mode):
            """
            函数功能:截图
            参    数:hd 截取的窗口句柄
                    path 保存路径
                     x 截取起始x坐标(窗体内相对坐标)
                     y 截取起始y坐标(窗体内相对坐标)
                     w 截取宽度,为0则取窗体宽度
                     h 截取长度,为0则取窗体高度
                     mode 保存模式 0:保存为图片,1:返回图像字节数据
            """
            # 根据窗口句柄获取窗口的设备上下文
            hwndDC = win32gui.GetWindowDC(self.win_hd)
            # 根据窗口的DC获取memDC
            srcdc = win32ui.CreateDCFromHandle(hwndDC)
            # memDC创建可兼容的DC
            saveDC = srcdc.CreateCompatibleDC()
            # 创建bigmap准备保存图片
            saveBitMap = win32ui.CreateBitmap()
            # 为bitmap开辟空间
            saveBitMap.CreateCompatibleBitmap(srcdc, w, h)
            # 高度saveDC,将截图保存到saveBitmap中
            saveDC.SelectObject(saveBitMap)
            # 截取从左上角(0,0)长宽为(w,h)的图片
            saveDC.BitBlt((0, 0), (w, h), srcdc, (x, y), win32con.SRCCOPY)
            if mode == 0:
                saveBitMap.SaveBitmapFile(saveDC, path)
            else:
                signedIntsArray = saveBitMap.GetBitmapBits(True)
                return signedIntsArray
            # 释放内存
            srcdc.DeleteDC()
            saveDC.DeleteDC()
            win32gui.ReleaseDC(self.win_hd,hwndDC)
            win32gui.DeleteObject(saveBitMap.GetHandle())
    
    
        def EnumWindowsProc(self,hwnd, lParam):
            buffer = create_string_buffer(255,'\0')
            GetWindowText(hwnd,buffer,255)
            value=buffer.value.decode('gbk')
            if value == self.win_title:
                self.win_hd = hwnd
                print(self.win_hd)
                return  False
            return True
    

    三,Python pywin32 获取 windows 的窗体内文本框的内容

    用函数 win32gui.SendMessage 获取不了文本框的文本内容,用 str 类型的参数接收获取的内容的话没有获取到东西,而用 PyBuffer 类型去获取则得到类似于 16 进制的东西。

    from win32gui import *
    from win32api import *
    from win32process import *
    import win32con
    
    import time
    
    time.sleep(3)
    
    # 获取窗体句柄
    hWnd = GetForegroundWindow()
    print('hownd: ', hWnd)
    
    FormThreadID = GetCurrentThreadId()
    print('FormThreadID: ', FormThreadID)
    
    CWndThreadID = GetWindowThreadProcessId(hWnd)
    print('CWndThreadID: ', CWndThreadID)
    
    AttachThreadInput(CWndThreadID[0], FormThreadID, True)
    
    # 获取光标所在文本框句柄
    hWnd = GetFocus()
    print('hWnd: ', hWnd)
    
    AttachThreadInput(CWndThreadID[0], FormThreadID, False)
    
    # SendMessage(hWnd, win32con.WM_SETTEXT, 0, "mextb1860 第一个文本框")
    
    # 文本框内容长度
    length = SendMessage(hWnd, win32con.WM_GETTEXTLENGTH)+1
    print('Length: ', length)
    
    buf = '0'*length
    # 生成buffer对象
    # buf = PyMakeBuffer(length)
    
    # 获取文本框内容
    print('get: ', SendMessage(hWnd, win32con.WM_GETTEXT, length, buf))
    
    print('text: ', buf)
    

    四,Pywin32是一个Python库,为python提供访问Windows API的扩展,提供了齐全的windows常量、接口、线程以及COM机制等等。

    1. 通过类名和标题查找窗口句柄,并获得窗口位置和大小
    import <span class="wp_keywordlink_affiliate"><a href="http://www.lanqibing.com/tag/win32gui/" title="View all posts in win32gui" target="_blank">win32gui</a></span>
    import <span class="wp_keywordlink_affiliate"><a href="http://www.lanqibing.com/tag/win32api/" title="View all posts in win32api" target="_blank">win32api</a></span>
    classname = "MozillaWindowClass"
    titlename = "百度一下,你就知道 - Mozilla Firefox"
    #获取句柄
    hwnd = <span class="wp_keywordlink_affiliate"><a href="http://www.lanqibing.com/tag/win32gui/" title="View all posts in win32gui" target="_blank">win32gui</a></span>.FindWindow(classname, titlename)
    #获取窗口左上角和右下角坐标
    left, top, right, bottom = win32gui.GetWindowRect(hwnd)
    
    1. 通过父句柄获取子句柄
    def get_child_windows(parent):        
        '''     
        获得parent的所有子窗口句柄
         返回子窗口句柄列表
         '''     
        if not parent:         
            return      
        hwndChildList = []     
        win32gui.EnumChildWindows(parent, lambda hwnd, param: param.append(hwnd),  hwndChildList)          
        return hwndChildList 
    #获取某个句柄的类名和标题
    title = win32gui.GetWindowText(hwnd)     
    clsname = win32gui.GetClassName(hwnd)     
    #获取父句柄hwnd类名为clsname的子句柄
    hwnd1= win32gui.FindWindowEx(hwnd, None, clsname, None)
    
    1. 鼠标定位与点击
    #鼠标定位到(30,50)
    <span class="wp_keywordlink_affiliate"><a href="http://www.lanqibing.com/tag/win32api/" title="View all posts in win32api" target="_blank">win32api</a></span>.SetCursorPos([30,150])
    #执行左单键击,若需要双击则延时几毫秒再点击一次即可
    win32api.mouse_event(<span class="wp_keywordlink_affiliate"><a href="http://www.lanqibing.com/tag/win32con/" title="View all posts in win32con" target="_blank">win32con</a></span>.MOUSEEVENTF_LEFTUP | <span class="wp_keywordlink_affiliate"><a href="http://www.lanqibing.com/tag/win32con/" title="View all posts in win32con" target="_blank">win32con</a></span>.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    #右键单击
    win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP | win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
    
    1. 发送回车键
    win32api.keybd_event(13,0,0,0)
    win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
    
    1. 关闭窗口
    win32gui.PostMessage(win32lib.findWindow(classname, titlename), win32con.WM_CLOSE, 0, 0)
    
    一, 首先import win32gui, win32con
    二, 使用win32gui.FindWindow找到目标程序:
    win = win32gui.FindWindow(None, ‘User Login’)
    三, 使用win32gui.FindWindowEx找到目标文本框:
    tid = win32gui.FindWindowEx(win, None, ‘Edit’, None)
    四, 使用win32gui.SendMessage发送文本到目标文本框:
    win32gui.SendMessage(tid, win32con.WM_SETTEXT, None, ‘hello’)
    
    当然了,可以继续找到下一个文本框:
    username = win32gui.FindWindowEx(win, tid, ‘Edit’, None)
    
    更新:已经找到发送回车的方法:
    win32gui.SendMessage(tid, win32con.WM_SETTEXT, None, ‘hello’)
    win32gui.PostMessage(tid, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
    win32gui.PostMessage(tid, win32con.WM_KEYUP, win32con.VK_RETURN, 0)
    

    实例:

    import win32gui
    import win32con
    import win32api
    
    # 从顶层窗口向下搜索主窗口,无法搜索子窗口
    # FindWindow(lpClassName=None, lpWindowName=None)  窗口类名 窗口标题名
    handle = win32gui.FindWindow("Notepad", None) 
    
    
    # 获取窗口位置
    left, top, right, bottom = win32gui.GetWindowRect(handle)
    #获取某个句柄的类名和标题
    title = win32gui.GetWindowText(handle)     
    clsname = win32gui.GetClassName(handle)
    
    # 打印句柄
    # 十进制
    print(handle)
    # 十六进制
    print("%x" %(handle) )
    
    
    # 搜索子窗口
    # 枚举子窗口
    hwndChildList = []     
    win32gui.EnumChildWindows(handle, lambda hwnd, param: param.append(hwnd),  hwndChildList)
    
    # FindWindowEx(hwndParent=0, hwndChildAfter=0, lpszClass=None, lpszWindow=None) 父窗口句柄 若不为0,则按照z-index的顺序从hwndChildAfter向后开始搜索子窗体,否则从第一个子窗体开始搜索。 子窗口类名 子窗口标题
    subHandle = win32gui.FindWindowEx(handle, 0, "EDIT", None)
    
    # 获得窗口的菜单句柄
    menuHandle = win32gui.GetMenu(subHandle)
    # 获得子菜单或下拉菜单句柄   
    # 参数:菜单句柄 子菜单索引号
    subMenuHandle = win32gui.GetSubMenu(menuHandle, 0)
    # 获得菜单项中的的标志符,注意,分隔符是被编入索引的  
    # 参数:子菜单句柄 项目索引号 
    menuItemHandle = win32gui.GetMenuItemID(subMenuHandle, 0)
    # 发送消息,加入消息队列,无返回 
    # 参数:句柄 消息类型 WParam IParam
    win32gui.postMessage(subHandle, win32con.WM_COMMAND, menuItemHandle, 0)
    
    
    # wParam的定义是32位整型,high word就是他的31至16位,low word是它的15至0位。
    # 当参数超过两个,wParam和lParam不够用时,可以将wParam就给拆成两个int16来使用。
    # 这种时候在python里记得用把HIWORD的常数向左移16位,再加LOWORD,即wParam = HIWORD<<16+LOWORD。
    
    # 下选框内容更改
    # 参数:下选框句柄; 消息内容; 参数下选框的哪一个item,以0起始的待选选项的索引;如果该值为-1,将从组合框列表中删除当前选项,并使当前选项为空; 参数
    # CB_Handle为下选框句柄,PCB_handle下选框父窗口句柄
    if win32api.SendMessage(CB_handle, win32con.CB_SETCURSEL, 1, 0) == 1:
    # 下选框的父窗口命令
    # 参数:父窗口句柄; 命令; 参数:WParam:高位表示类型,低位表示内容;参数IParam,下选框句柄
    # CBN_SELENDOK当用户选择了有效的列表项时发送,提示父窗体处理用户的选择。 LOWORD为组合框的ID. HIWORD为CBN_SELENDOK的值。
                win32api.SendMessage(PCB_handle, win32con.WM_COMMAND, 0x90000, CB_handle) 
    # CBN_SELCHANGE当用户更改了列表项的选择时发送,不论用户是通过鼠标选择或是通过方向键选择都会发送此通知。LOWORD为组合框的ID. HIWORD为CBN_SELCHANGE的值。
                win32api.SendMessage(PCB_handle, win32con.WM_COMMAND, 0x10000, CB_handle) 
    
    
    # 设置文本框内容,等窗口处理完毕后返回true。中文需编码成gbk 
    # 参数:句柄;消息类型;参数WParam,无需使用; 参数IParam,要设置的内容,字符串
    win32api.SendMessage(handle, win32con.WM_SETTEXT, 0, os.path.abspath(fgFilePath).encode('gbk'))
    
    
    # 控件点击确定,处理消息后返回0
    # 参数:窗口句柄; 消息类型; 参数WParam HIWORD为0(未使用),LOWORD为控件的ID; 参数IParam  0(未使用),确定控件的句柄
    win32api.SendMessage(Mhandle, win32con.WM_COMMAND, 1, confirmBTN_handle)
    
    
    # 获取窗口文本不含截尾空字符的长度
    # 参数:窗口句柄; 消息类型; 参数WParam; 参数IParam
    bufSize = win32api.SendMessage(subHandle, win32con.WM_GETTEXTLENGTH, 0, 0) +1
    # 利用api生成Buffer
    strBuf = win32gui.PyMakeBuffer(bufSize)
    print(strBuf)
    # 发送消息获取文本内容
    # 参数:窗口句柄; 消息类型;文本大小; 存储位置
    length = win32gui.SendMessage(subHandle, win32con.WM_GETTEXT, bufSize, strBuf)
    # 反向内容,转为字符串
    # text = str(strBuf[:-1])
    
    address, length = win32gui.PyGetBufferAddressAndLen(strBuf) 
    text = win32gui.PyGetString(address, length) 
    # print('text: ', text)
    
    # 鼠标单击事件
    #鼠标定位到(30,50)
    win32api.SetCursorPos([30,150])
    #执行左单键击,若需要双击则延时几毫秒再点击一次即可
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    #右键单击
    win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP | win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
    
    def click1(x,y):                #第一种
        win32api.SetCursorPos((x,y))
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
    
    def click2(x,y):               #第二种
        ctypes.windll.user32.SetCursorPos(x,y)
        ctypes.windll.user32.mouse_event(2,0,0,0,0)
        ctypes.windll.user32.mouse_event(4,0,0,0,0)
    
    def click_it(pos):          #第三种
        handle= win32gui.WindowFromPoint(pos)
        client_pos =win32gui.ScreenToClient(handle,pos)
        tmp=win32api.MAKELONG(client_pos[0],client_pos[1])
        win32gui.SendMessage(handle, win32con.WM_ACTIVATE,win32con.WA_ACTIVE,0)
        win32gui.SendMessage(handle, win32con.WM_LBUTTONDOWN,win32con.MK_LBUTTON,tmp)
        win32gui.SendMessage(handle, win32con.WM_LBUTTONUP,win32con.MK_LBUTTON,tmp)
    
    # 发送回车
    win32api.keybd_event(13,0,0,0)
    win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
    
    
    # 关闭窗口
    win32gui.PostMessage(win32lib.findWindow(classname, titlename), win32con.WM_CLOSE, 0, 0)
    
    
    # 检查窗口是否最小化,如果是最大化
    if(win32gui.IsIconic(hwnd)):
    #     win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL)
        win32gui.ShowWindow(hwnd, 8)
        sleep(0.5)
    
    # SW_HIDE:隐藏窗口并激活其他窗口。nCmdShow=0。
    # SW_MAXIMIZE:最大化指定的窗口。nCmdShow=3。
    # SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。nCmdShow=6。
    # SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。nCmdShow=9。
    # SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。nCmdShow=5。
    # SW_SHOWDEFAULT:依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的。nCmdShow=10。
    # SW_SHOWMAXIMIZED:激活窗口并将其最大化。nCmdShow=3。
    # SW_SHOWMINIMIZED:激活窗口并将其最小化。nCmdShow=2。
    # SW_SHOWMINNOACTIVE:窗口最小化,激活窗口仍然维持激活状态。nCmdShow=7。
    # SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。nCmdShow=8。
    # SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。nCmdShow=4。
    # SW_SHOWNORMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志。nCmdShow=1。
    
    
    # win32虽然也可控制键盘,但不如使用PyUserInput的方便。需要注意在windows和mac下接口参数可能有所不同。
    from pymouse import PyMouse
    from pykeyboard import PyKeyboard
    m = PyMouse()
    k = PyKeyboard()
    
    x_dim, y_dim = m.screen_size()
    # 鼠标点击
    m.click(x_dim/2, y_dim/2, 1)
    # 键盘输入
    k.type_string('Hello, World!')
    
    # 按住一个键
    k.press_key('H')
    # 松开一个键
    k.release_key('H')
    # 按住并松开,tap一个键
    k.tap_key('e')
    # tap支持重复的间歇点击键
    k.tap_key('l',n=2,interval=5) 
    # 发送判断文字
    k.type_string('123456')
    
    #创建组合键
    k.press_key(k.alt_key)
    k.tap_key(k.tab_key)
    k.release_key(k.alt_key)
    # 特殊功能键
    k.tap_key(k.function_keys[5]) # Tap F5
    k.tap_key(k.numpad_keys['Home']) # Tap 'Home' on the numpad
    k.tap_key(k.numpad_keys[5], n=3) # Tap 5 on the numpad, thrice
    
    # Mac系统
    k.press_keys(['Command','shift','3'])
    # Windows系统
    k.press_keys([k.windows_l_key,'d'])
    
    其中的PyMouseEvent和PyKeyboardEvent还可用于监听鼠标和键盘事件的输入
    
    展开全文
  • Windows中关闭窗口的几快捷方法 方法一:ALT+F4。此方法是指先按住键盘上的ALT功能键不放,再按一下键盘上的F4键,则会关闭当前窗口。 如 果打开了多个窗口,则每按一次Alt+F4键就会关闭一个窗口。 方法二...
  • windows api实现窗口透明整理

    千次阅读 2018-06-28 16:05:33
    1. 实现窗口彻底透明 2.实现背景透明控件不透明一 3.实现背景透明控件不透明正式方案 4.动图显示异常分析 1. 实现窗口彻底透明 实现这种效果的方案网上介绍很多,基本原理都一样,在这里还是重复记录一次。 ...
  • 在DOS窗口执行了一些列命令完成某项工作后,如果要查看都执行了那些命令,该如何办呢?(前提:DOS窗口未关闭的情况下) 一、方法一:使用↑↓箭头上下翻看执行过的命令,此方式适宜执行命令较少的情况; 二、方法...
  • 资源管理器作为电脑的一部分,它是用来存放电脑的一些资源和文件,如果要找某个资料可直接打开资源管理器查找,...本文小编分享windows10系统打开资源管理器的三种方法。具体方法如下:方法1:1、在Windows10桌面...
  • 一、窗口 视图相关的快捷键 最小化当前窗口:Alt+空格键+N 显示桌面:Win键+D (再次按Win+D,则恢复显示原来的所有窗口) 锁屏:Win键+L 最大化当前窗口、将窗口大小还原等:Win键+四个方向键 Win键+上箭头 :...
  • 有时候我们在使用电脑的过程中需要同时开启多个任务窗口,而Win11系统是可以直接去...4、在窗口右上角选择一你想要的并列窗口布局模式,点击其中一个窗口作为该窗口的位置。 5、接着右边会弹出所有可选窗口,选择
  • win11发布后,不少bug随之而来,不少有着强迫证的小伙伴对部分窗口拖动迟缓有着非常大的不爽!!! 所以我也是摸索了好久,才解决了这个问题。 解决步骤如下: 第一步:按下win键+R ,然后输入regedit 进入...
  • 文章目录一、前言二、使用Spy++工具分析窗口三、C#通过Windows API捕获窗口,获取窗口文本四、附录:Windows窗口消息 一、前言 项目是Unity开发的,上架了QQ游戏大厅,需要兼容XP系统。 QQ游戏大厅启动游戏的流程是...
  • Windows窗口绘制、窗口类型小结

    千次阅读 2013-12-22 16:22:05
     1)更新区域是窗口中过期或无效,需要重绘的区域。系统依靠更新区域向应用程序发送WM_PAINT消息。  WM_PAINT产生的条件:有需要更新的区域,并且消息队列中没有其它消息时。  2)相关API:  InvalidateRect/...
  • Airtest+Python自动化处理windows窗口

    千次阅读 2020-10-20 10:43:31
    打开airtest官网发现有三种方式可以连接windows应用窗口分别对应个按钮 1-选择游戏画面:通过选择对应的应用窗口将程序嵌入airtestIDE进行操作 选取后会嵌入到IDE中 2-搜索窗口 点击对应应用窗口的名称进行连接
  • 现在,很多的操作系统都是视窗操作系统,比如:Windows、linux、iOS等。这些系统都是由一个个窗口组成的?那么,什么是窗口呢?举个简单的例子,比如双击我的电脑之后,就打开了一个窗口,如下图所示。下面,就让...
  • (1)Blender源码分析之Windows窗口建立流程 在多年以前,普经学习过使用Blender来创建动画,虽然是很简单的动画,但是感觉它还好伟大的,使用很简单,只要拖拉几下,就可以搞定一个动画了。这个软件是一个神奇的...
  • flink的三种windows join

    千次阅读 2020-06-09 20:11:06
    我们一般可以用一个窗口分配器定义这些窗口(join情况下一般包含了Tumbling Windows (滚动)、Sliding Windows(滑动)和Session Windows (会话窗口)) Windows Join的代码一般形式如下: 注:创建两个流元素的...
  • #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) //这种方法无法灵活的显示或者隐藏窗口 方法二:适用于对本身隐藏窗口 #include<Windows.h> HWND hwnd=GetForegroundWindow...
  • 一个简单的windows窗口程序

    千次阅读 2020-09-23 21:51:59
    一个简单的windows窗口程序创建一个windows窗口程序的步骤具体实现代码实现效果 创建一个windows窗口程序的步骤 定义窗口类 注册窗口类 创建窗口 更新显示窗口 建立消息循环 处理消息 具体实现代码 #include ...
  • Windows如何平铺两个窗口

    千次阅读 2018-11-23 17:52:44
    1、首先要打开多个窗口,一定不能全屏 2、选中其中一个窗口按“win+向左或是向右键”(按秒不动,直到出现透明界面),其中这个界面靠向你想要的方向;鼠标选中另一个透明界面,按enter键,则两个窗口平铺 ...
  • Windows编程捕获特定窗口及键盘鼠标消息模拟一、简介二、使用到的API简介、获取Windows记事本的编辑区窗口的句柄并模拟输入操作1、分析2、代码一3、代码二四、后记 一、简介 窗口Windows的核心组件,Windoows下...
  • Windows窗口程序设计中,按钮、文本编辑框等控件都作为一个子窗口在WM_CREATE事件中创建的。其中按钮类button有多种类型和风格,常见的单选钮、复选钮、分组框也在此类中,见下表: 子窗口控件:按钮类button ...
  • windows窗口分析,父窗口,子窗口,所有者窗口

    万次阅读 多人点赞 2016-12-14 11:50:57
    (本文尝试通过一些简单的实验,来分析Windows窗口机制,并对微软的设计理由进行一定的猜测,需要读者具备C++、Windows编程及MFC经验,还得有一定动手能力。文中可能出现一些术语不统一的现象,比如“子窗口”,有...
  • 在Dev-C++ 5.11上创建并正常运行,操作系统32位、64位Win7均可。首先在文件菜单里新建项目,选择Windows Application,命名完成后得到程序框架。最后在代码中添加上控件和对应的事件即可。
  • 文章目录 一、Time的简介 二、Window的概念 、Window的类型 1、分类关系 2、滚动窗口(Tumbling Windows) 3、滑动窗口(Sliding Windows) 4、会话窗口(Session Windows) 四、windows 的使用 1、Time Window 2...
  • 1.MFC编程和一般的windows编程是不同的,但是又是相同的,MFC是微软封装好的一个基础类库,一套API,生成代码时我们找不到它的WinMain函数,是因为被封装了,建立一个单文档,MFC标准的程序时,系统会自动的生成代码...
  • 最初了解Windows api编程呢,就是先创建出一个最简洁的窗口,就如我们学习C/C++时的"Helloword"一样,这是进入windows编程大门的重要一个步,下面就开始吧...  大家都知道C/C++中,程序的执行是从main()...
  • 近期,有网友反馈说win10专业版系统鼠标拖动窗口有延迟卡顿,还...根据不同的情况,小编带来了三种解决方法:第一方法(有线无线通用):1.在win10系统桌面,按下【WIN】+【R】快捷键,打开【运行】窗口,输入main...
  • 这里我举一个例子,D:\Tools\RabbitMQ\RabbitMQServer\rabbitmq_server-3.9.8\sbin是目标文件夹,接下来有三种方式操作,推荐使用第三种 第一方式 1、win+r,输入cmd打开dos命令窗口 2、切换硬盘后,通过cd命令...
  • 在DOS窗口执行了一些列命令完成某项工作后,如果要查看都执行了那些命令,该如何办呢?(前提:DOS窗口未关闭的情况下) 一、方法一: 使用↑↓箭头上下翻看执行过的命令,此方式适宜执行命令较少的情况。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 395,869
精华内容 158,347
关键字:

windows的三种窗口