精华内容
下载资源
问答
  • 你的第一个Windows程序——关闭窗口

    千次阅读 2013-09-07 00:07:20
    当用户关闭一个窗口,该动作触发一个窗口消息序列。 用户可以点击“关闭”按钮或通过使用键盘快捷键(如 ALT+F4),这些动作引起窗口收到WM_CLOSE消息,WM_OLOSE消息让你有机会在关闭窗口前提示用户。如果你真...

    MSDN原文(英语)

    关闭窗口

    当用户关闭一个窗口,该动作触发一个窗口消息序列。

    用户可以点击“关闭”按钮或通过使用键盘快捷键(如 ALT+F4),这些动作引起窗口收到WM_CLOSE消息,WM_OLOSE消息让你有机会在关闭窗口前提示用户。如果你真的想关闭窗口,调用DestroyWindow函数;否则WM_CLOSE消息简单的返回零,并且操作系统将忽略该消息并不销毁窗口。

    下面的例子程序是如何处理WM_CLOSE消息:
    case WM_CLOSE:
        {
            if(MessageBox(hwnd,L"确实要退出?",L"我的应用程序"),MB_OKCANCEL == IDOK)
            {
                DestoryWindow(hwnd);
            }
            //其它:用户取消了,什么也不做
            
            return 0;    
        }
    在这个例子里,MessageBox函数显示一个包含“确定”和“取消”按钮的模式对话框。如果用户点击“确定”按钮,程序调用DestroyWindow函数。而用户点击了“取消”按钮,将DestroyWindow函数的调用取消,窗口仍旧保持。无论哪种情况,都要返回零表明你已经处理消息。

    如果你想在不提示用户情况下关闭窗口,你可以简单的调用DestroyWindow而不用调用MessageBox。然而,在这种情况下有一个更快的方式,回想一下,DefWindowProc函数执行任何窗口消息的默认操作。在WM_CLOSE情况下,DefWindowProc自动调用DestroyWindow。这意味着,如果你在switch语句中忽略了WM_CLOSE消息,默认情况下窗口被销毁。

    当一个窗口即将被销毁,它接收到一个WM_DESTROY消息,这个消息发送在窗口从屏幕上删除后但在窗口被销毁之前(特别是任何窗口被销毁之前)。

    在你的应用程序主窗口,你通常会调用PostQuitMessage来响应WM_DESTROY。
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    我们看到在窗口消息部分,PostQuitMessage在消息队列中放一个WM_QUIT,使消息循环结束。
    下面是一个流程图,显示了典型的方法来处理WM_CLOSE和WM_DESTROY消息:

    流程图展示了如何处理WM_CLOSE和WM_DESTROY消息



    展开全文
  • python操作Windows窗口程序

    万次阅读 多人点赞 2018-03-16 17:23:09
    场景 定时获取数据接口数据写入Excel表格,Excel需要被其他程序使用,需要...其次,为了方面查找目标窗口的句柄,可以下载一个微软自家的Spy++,这玩意儿满大街都是。有了它,还能很方便的查看窗体的消息。 句柄是...

    想要看更加舒服的排版、更加准时的推送
    关注公众号“不太灵光的程序员”
    每日八点有干货推送

    场景

    定时获取数据接口数据写入Excel表格,Excel需要被其他程序使用,需要处于开启状态。

    Pywin32

    首先,安装一个Pywin32,为python提供访问Windows API的扩展,提供了齐全的windows常量、接口、线程以及COM机制等等。其次,为了方面查找目标窗口的句柄,可以下载一个微软自家的Spy++,这玩意儿满大街都是。有了它,还能很方便的查看窗体的消息。
    句柄是一个32位整数,在windows中标记对象用,类似一个dict中的key。
    消息是windows应用的重要部分,用来告诉窗体“发生了什么”,比如给一个按钮发送BN_CLICKED这么个消息,按钮就知道“哦,我被点了”,才能执行相应的下一步操作。本文将大量使用消息机制。详情参看这篇文章。

    查找窗体句柄

    貌似在win32编程的世界里,包括窗口到文本框的所有控件就是窗体,所有的窗体都有独立的句柄。要操作任意一个窗体,你都需要找到这个窗体的句柄,这里,我们就可以用到FindWindow函数和FindWindowEx函数。在pywin32中,他们都属于win32gui的模块。
    python获取窗口句柄

    FindWindow(lpClassName=None, lpWindowName=None):

    描述:自顶层窗口(也就是桌面)开始搜索条件匹配的窗体,并返回这个窗体的句柄。不搜索子窗口、不区分大小写。找不到就返回0
    参数:
    lpClassName:字符型,是窗体的类名,这个可以在Spy++里找到。
    lpWindowName:字符型,是窗口名,也就是标题栏上你能看见的那个标题。
    说明:这个函数我们仅能用来找主窗口。
    ####FindWindowEx(hwndParent=0, hwndChildAfter=0, lpszClass=None, lpszWindow=None);
    描述:搜索类名和窗体名匹配的窗体,并返回这个窗体的句柄。不区分大小写,找不到就返回0。
    参数:
    hwndParent:若不为0,则搜索句柄为hwndParent窗体的子窗体。
    hwndChildAfter:若不为0,则按照z-index的顺序从hwndChildAfter向后开始搜索子窗体,否则从第一个子窗体开始搜索。
    lpClassName:字符型,是窗体的类名,这个可以在Spy++里找到。
    lpWindowName:字符型,是窗口名,也就是标题栏上你能看见的那个标题。
    说明:找到了主窗口以后就靠它来定位子窗体啦。

    菜单操作

    有了句柄,我们就可以操作FaceGen了!嗯,要先打开文件,File→Open,然后再File→Save Image(很悲剧,Save Image没有快捷键,所以不得不进行菜单操作)。现在我们有了FindWindow和FindWindowEx,要怎么操作菜单呢?

    哦,抱歉,靠他俩还做不到。

    窗口的菜单就像窗口的标题栏一样,是窗口自身的一部分,不是其他窗体控件,也就没有办法用FindWindow和FindWindowEx返回句柄。所以要对菜单进行操作的话,我们需要新的函数,也就是GetMenu,GetSubMenu和GetMenuItemID,它们也都属于win32gui模块。结合下图来说:

    PostMessage(hWnd, Msg, wParam, lParam)

    描述:在消息队列中加入为指定的窗体加入一条消息,并马上返回,不等待线程对消息的处理。
    参数:
    hWnd:整型,接收消息的窗体句柄
    Msg:整型,要发送的消息,这些消息都是windows预先定义好的,可以参见系统定义消息(System-Defined Messages)
    wParam:整型,消息的wParam参数
    lParam:整型,消息的lParam参数
    说明:简单说,就是给指定程序发一个消息,这些消息都用整型编好号,作为windows的常量可以查询的。在这里,我们用的就是win32con这个库里定义的WM_COMMAND这个消息,具体的wParam和lParam是根据消息的不同而不同的。具体请根据MSDN查阅。

    GetMenu(hwnd)

    描述:获取窗口的菜单句柄。
    参数:
    hwnd:整型,需要获取菜单的窗口的句柄。
    说明:获取的是插图中黄色的部分。

    GetSubMenu(hMenu, nPos)

    描述:获取菜单的下拉菜单或者子菜单。
    参数:
    hMenu:整型,菜单的句柄,从GetMenu获得。
    nPos:整型,下拉菜单或子菜单的的索引,从0算起。
    说明:这个可以获取插图中蓝色的部分;如描述所述,这个不仅可以获取本例中的下拉菜单,还可以获取子菜单。

    GetMenuItemID(hMenu, nPos)

    描述:获取菜单中特定项目的标识符。
    参数:
    hMenu:整型,包含所需菜单项的菜单句柄,从GetSubMenu获得。
    nPos:整型,菜单项的索引,从0算起。
    说明:这个获取的就是红色区域中的项目啦,注意,分隔符是被编入索引的,所以Open的索引是2而非1,而Exit的索引是9而非6。

    控件操作

    在这里,我们用了SendMessage而不是PostMessage,其区别就在于我们可以通过SendMessage取得消息的返回信息。因为对于我们要设置文本框信息的WM_SETTEXT信息来说,设置成功将返回True。

    SendMessage(hWnd, Msg, wParam, lParam)

    描述:在消息队列中加入为指定的窗体加入一条消息,直到窗体处理完信息才返回。
    参数:
    hWnd:整型,接收消息的窗体句柄
    Msg:整型,要发送的消息,这些消息都是windows预先定义好的,可以参见系统定义消息(System-Defined Messages)
    wParam:整型,消息的wParam参数
    lParam:整型,消息的lParam参数
    说明:wParam和IParam根据具体的消息不同而有不同的定义,详情参阅Part 2.

    问题

    在开发机器上是可以正常运行的,但是换在其他机器上就会报1400的错误

    盐池数据同步已开启 >> 西部绿谷数据.xls
    盐池数据本次同步已完成 时间 2018-03-16 14:34:01  数据60分钟后更新 >> 西部绿谷数据.xls
    Traceback (most recent call last):
      File "data_acquisition_3600.py", line 414, in <module>
    pywintypes.error: (1400, 'CloseWindow', '\xce\xde\xd0\xa7\xb5\xc4\xb4\xb0\xbf\xda\xbe\xe4\xb1\xfa\xa1\xa3')
    Failed to execute script data_acquisition_3600
    

    pywintypes.error 1400 开始以为是编码问题,发现还是找不到窗口句柄,后来发现获取窗口句柄和进程中的名字有关,不同版本的操作系统、Excel的窗口名称和进程名都不一致,需要特别注意。

    进程名

    这里写图片描述

    窗口名

    这里写图片描述

    代码

    # -*- coding:utf-8 -*-
    """
    Created on 2018/3/12
    
    @author: jj
    """
    import urllib
    import json
    import xlwt
    import copy
    import time
    import os
    import win32gui
    import win32con
    
    def write_ex(data):
        """
        数据 写 文件
        :param data:
        :return:
        """
        file = xlwt.Workbook(encoding='utf-8')
        table = file.add_sheet("sheet1")
        params = ['类型', '项目名称', '设备编号', '阀门开关', '泵1开关', '泵2开关', '水位', '上报时间', '水池大小', '管径']
        params_code = ['leixing', 'name', 'code', 'famen', 'ben1', 'ben2', 'shuiwei', 'date', 'daxiao', 'guanjing']
        for index, item in enumerate(params):
            table.write(0, index, item)
        table.write(0, 10, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
        for l_index, equipment in enumerate(data):
            for j_index, item in enumerate(params_code):
                table.write(l_index+1, j_index, equipment.get(item))
        filename = u"西部绿谷数据.xls"
        file_path = os.path.join(filename)
        file.save(file_path)
    
    if __name__ == '__main__':
        print u'盐池数据同步已开启 >> 西部绿谷数据.xls'
        while True:
            get_api()
            print u'盐池数据本次同步已完成 时间 %s  数据5分钟后更新 >> 西部绿谷数据.xls' % time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
            os.startfile(u"西部绿谷数据.xls")   # 打开文件
            wndtitle = u"西部绿谷数据.xls  [兼容模式] - Excel"   # 进程名
            wndclass = None
            wnd = win32gui.FindWindow(wndclass, wndtitle)    # 获取窗口句柄
            win32gui.CloseWindow(wnd)      # 窗口最小化
            time.sleep(300)
            win32gui.SendMessage(wnd, win32con.WM_CLOSE)   # 关闭窗口
    

    推荐阅读:

    展开全文
  • Python对Windows程序窗口操作 最大化 最小化 关闭

    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)
    

    补充

    获取窗口的ClassName(上面代码里的"YodaoMainWndClass") 推荐一个工具:WinSpy

    注:python 版本号

    C:\>python -V
    Python 3.8.1
    
    展开全文
  • windows如何定时关闭一个程序

    千次阅读 2018-10-22 18:42:00
    方法其实系统本身有这项功能的,打开记事本,将以下内容保存为.bat文件(将下面cmd.exe的名字改成你的音乐播放软件的exe名)@echo offTASKKILL /F /IM cmd.exe /T保存好之后,打开控制面板任务计划,添加新任务,把...

    方法一
    其实系统本身有这项功能的,打开记事本,将以下内容保存为.bat文件
    (将下面cmd.exe的名字改成你的音乐播放软件的exe名)
    @echo off
    TASKKILL /F /IM cmd.exe /T
    保存好之后,打开控制面板任务计划,添加新任务,把这个bat定时就行了,时间到了之后那个播放器就会被结束掉,用这个批处理你可以结束掉大多数的程序。

    方法二
    1、点开始,在运行框里输入cmd,选择cmd,鼠标右键选择以管理员身份运行;

    2、比如:要在11点钟的时候关闭迅雷软件;
    在命令窗口中,输入at 11:00 taskkill /im thunder.exe /f;
    taskkill:是结束指定进程的命令;
    /im imagename:要终止的进程名;
    /f:强制终止进程。

    方法三(例要关闭千千静听)
    运行中输入:
    at 8:50 ntsd -c q -pn TTPlayer.exe
    解释:8:50结束“TTPlayer.exe”进程,即关闭千千静听。
    当然也可以写为批处理:把“at 8:50 ntsd -c q -pn TTPlayer.exe”写入记事本,另存为bat格式即可。

    转载于:https://www.cnblogs.com/asdyzh/p/9831906.html

    展开全文
  • windows程序窗口

    千次阅读 2010-09-29 11:43:00
    Windows系统管理三个独立的Z次序----一个用于顶层窗口一个用于兄弟窗口、还有一个用于最顶层窗口,最顶层窗口覆盖其他非最顶层窗口,而不管它是不是活动窗口或是前台窗口。应用程序通过设置WS_EX_TOPMOST...
  • 这种方式的情况下,会马上启动一个命令行窗口,如果把这个窗口关闭了,程序也会马上关闭。 后台运行Java,与linux类型 @echo off start javaw -jar urp.jar exit 对,你没有看错,与上面的命令相比只是多了一
  • Windows是消息驱动的,理解消息机制及消息循环是特别重要。知道在什么情况下产生什么消息会让我们...下面分析一下一个应用程序从创建到结束产生的消息。 先给出测试用的程序,当然是一个非常经典的结构: #in...
  • 通常,我们会使用Alt+Tab键来切换应用程序窗口,但是在三个程序窗口频繁切换时较为麻烦。其实还有另外种快速的切换方式,就是Win+数字。 例如:如图,我们打开了Chrome浏览器、latex编辑器、PDF预览、MATLAB等...
  • Windows程序设计:第一个窗口

    千次阅读 2009-10-22 21:53:00
    .dml {border:2px solid green;width:200px;background-color:#eeeeee;margin:0 0 0 0}.ddm {background-color:#cccccc;margin-left:0mm} 目录: 1.窗口程序 2.分析 注册窗口类别
  • 这两种都可以在bat文件中完成应用程序的进程关闭功能,第种是根据应用程序的启动title来判断,第二种是根据应用在系统服务中的应用名字来判断。 第种需要我们手动添加tilte,在这以tomcat为例...
  • windows cmd打开新窗口关闭窗口

    千次阅读 2018-06-18 22:30:37
    在cmd里面输入start,打开一个新的窗口 cls 清屏命令 color命令 COLOR [attr] attr 指定控制台输出的颜色属性 颜色属性由两个十六进制数字指定 – 第一个为背景,第二个则为 前景。每个数字可以为以下...
  • 注:以下内容为学习笔记,多数是从书本、资料中得来,只为加深印象,及日后参考。...1.一个完整的Windows程序 /*------------------------------------------------------------------------------
  • 在.net的WinForm程序中,如果是直接起动的Form作为主窗口,那么这个主窗口是不能关闭的,因为它维护了一个Windows消息循环,它一旦关闭了就等于声明整个应用程序结束,所以新打开的窗口也就被自动关闭了。...
  • 一个PC端的应用中,经常会出现关闭主窗体,进而需要把所有打开的窗体都随着关闭,结束程序的情况,那么具体怎么实现呢? 1、在main函数中将QApplication::lastWindowClosed()信号和QApplication::quit()槽函数相...
  • 本文要实现的功能就是在windows下,实现用一个程序来打开,关闭和监视其它的exe程序,我这里的的exe程序是我自己实现的。 1.监视exe是否崩溃 首先如果一个进程不在了,它的进程ID就是0, 那么通过检测进程ID是否为0...
  • Windows应用程序是基于消息驱动的,任何线程只要注册窗口类都会有一个消息队列用于接收用户输入的消息和系统消息。 一、 窗口的创建流程 创建一个完整的窗口需要经过下面四个操作步骤: 设计一个窗口类(填写...
  • 今天和大家说下如何创建一个带有窗口程序,注意窗口程序是以后写Windows程序的基础,今天的程序很重要,一定要看懂再去看以后的Windows程序 #include /*1.窗口消息处理程序WndProc2.在32位的Windows中,WPARAM被...
  • //没有标题栏、关闭按钮、最大化、最小化按钮的全屏窗口 private void Form1_Load(object sender, EventArgs e) { this.FormBorderStyle = FormBorderStyle.None; this.WindowState = FormWindo...
  • C# WindowsForm程序同时启动多个窗口

    千次阅读 2017-01-22 16:09:07
    C# WindowsForm程序同时启动多个窗口
  • 在说今天的内容之前呢,我先说一下我的笔记风格,我的笔记分为两部分,第一部分进行理论知识讲解,第二部分进行代码的实例演示,我会详细注释windows程序开发中新出现的每一个函数,每一个参数,但是如果笔记中以前...
  • 在某些情况下可以防止用户单击关闭按钮以关闭 MFC 应用程序中的框架窗口窗口的标题栏中。 关闭按钮可以删除删除在 WS_SYSMENU 样式从帧窗口。 但是,此的 Minimize 最大化,和还原按钮也删除,并且无法添加。 这是...
  • Windows Forms程序设计中,经常遇到窗口关闭的情形,本篇介绍如下几种实用窗口关闭方式以及退出方式。 1.使用Close()函数this.Close(); 关闭当前窗口,如果当前窗口不是主窗口(Application.Run(new Form1());...
  • 1、根据程序名称找到进程 #include "stdafx.h" #include<iostream> #include<Windows.h> #include<TlHelp32.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { TCHAR c[]=...
  • 项目中当关闭窗口时,需要将同时打开的其他窗口关闭,并退出应用程序,实现方法如下: 在main函数中将QApplication::lastWindowClosed()信号和QApplication::quit()槽函数相关联,将主窗口的属性设置为QWidget::...
  • 0x00前言 文章中的文字可能存在语法错误以及标点错误,请谅解; 如果在文章中发现代码错误或其它问题请告知,感谢! 0x01 概述 最近在学习windows程序设计的创建窗口这方面的...0x02 创建一个完整的窗口程序的步骤 ...
  • 所谓「Windows程序发送消息」,是指Windows呼叫程序中的一个函数,该函数的参数描述了这个特定消息。这种位于Windows程序中的函数称为「窗口消息处理程序」。程序建立的每一个窗口都有相关的窗口消息处理程序。这...
  • Windows:直接使用命令运行一个程序

    千次阅读 2019-04-09 10:53:56
    打开Windows运行命令 win+R,就是运行命令快捷键 ...3、conf:启动系统配置实用程序 4、charmap:启动字符映射表 5、calc:启动计算器 6、chkdsk.exe:Chkdsk磁盘检查 7、cmd.exe:CMD命令提示符 ...
  • windows 强制关闭程序并强制删除文件

    千次阅读 2019-08-17 12:08:22
    :如何强制关闭进程: 1.按win键,在下面的窗口输入cmd,右键选中后以管理员身份运行cmd 2.输入tasklist查看你想要关闭的进程 3.win + r组合键输入taskmgr,查看你想要关闭的进程名字 4.ntsd -c q -p ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 207,910
精华内容 83,164
关键字:

windows关闭一个程序窗口