精华内容
下载资源
问答
  • windows程序开发

    2011-12-14 19:22:17
    WINDOWS程序设计选项 为说明Windows程序设计的多种技术,本书提供了许多范例程序。这些程序使用C语言撰写并原原本本的使用Windows API来开发程序。我将这种方法称作「古典」Windows程序设计。这是我们在1985年为...
  • python开发windows程序

    2009-06-04 20:51:35
    windows XP平台下,首先需要做以下环境的配置: ... 安装py2exe, 这是windows平台下一个非常好的python程序发布工具,可以将python程序编译成exe而脱离python环境执行。做完上面的安装后,我们就可以来测试一下了
  • 使用Python 开发 windows 桌面程序
  • 使用 Python 开发 Windows桌面程序
  • 今天终于可以用wxPython开发GUI程序了,非常高兴。把其中的一些注意点写下来以供参考。在windows XP平台下,首先需要做以下环境的配置:1. 首先是安装python ,安装完之后将python/bin所在目录添加到path中。2. 安装...

    今天终于可以用wxPython开发GUI程序了,非常高兴。把其中的一些注意点写下来以供参考。在windows XP平台下,首先需要做以下环境的配置:

    1. 首先是安装python ,安装完之后将python/bin所在目录添加到path中。

    2. 安装wxPython, 此时要注意wxPython的版本要与前面python的版本一致。

    3. 安装py2exe, 这是windows平台下一个非常好的python程序发布工具,可以将python程序编译成exe而脱离python环境执行。做完上面的安装后,我们就可以来测试一下了

    wxPython demo 代码:

    #wxDemo.py

    import wx

    class App(wx.App):

    def OnInit(self):

    frame = wx.Frame(parent=None, title='Bare')

    frame.Show()

    return True

    app = App()

    app.MainLoop()

    编写py2exe用的编译代码:

    #setup.py

    from distutils.core import setup

    import py2exe

    setup(windows=["wxDemo.py"])

    注意,上面代码中 setup(windows=["wxDemo.py"])要正确引用你的Python程序,[]之中为你要编译的python程序文件,由于是带窗口的,所以用了windows属性.

    下面来编译:

    在命令行执行python setup.py py2exe, 当编译完成后,会有一个dist文件夹,里面有一个wxDemo.exe,这就是编译后的exe,在发布时,需要将这个文件夹下面的library.zip,dll和wxDemo.exe放到同一个目录下,否则程序不能执行。现在,双击wxDemo.exe,你就会看到一个窗口了:)

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

    万次阅读 多人点赞 2018-03-16 17:23:09
    首先,安装一个Pywin32,为python提供访问Windows API的扩展,提供了齐全的windows常量、接口、线程以及COM机制等等。其次,为了方面查找目标窗口的句柄,可以下载一个微软自家的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 桌面程序
  • windows设备程序开发,提供给大家学习
  • Windows程序开发 音乐播放器 源码 本人动手写自己的windows程序音乐播放器“曼妙盒子1.0版本”
  • 和大家一起聊聊如何使用pythonWindows一、环境安装​ 使用python实现来做PC端pip install pywinauto二、使用说明安装好了之后,关于使用说明大家可以参照官方文档上的说明内容翻译如下:就是说在我们安装好...

    和大家一起聊聊如何使用python做Windows

    一、环境安装

    ​ 使用python实现来做PC端

    pip install pywinauto

    二、使用说明

    安装好了之后,关于使用说明大家可以参照官方文档上的说明内容翻译如下:

    就是说在我们安装好Pywinauto之后,首先要确定哪种可访问性技术(pywinauto的backend)可以用于我们的应用程序,在

    Win32 API (backend="win32") 默认backend

    MS UI Automation (backend="uia")

    如果您不能确定程序到底适用于那种backend,可以借助于GUI对象检查工具来做,常用的检查工具有Inspect.ex,Spy++ 等,这个不做过多介绍,大家自行学习和下载,使用很简单,也非常便捷。

    四、快速入门

    在安装好环境之后,并且确定了应用程序适用的backend,那么接下来我们就可以使用Pywinauto这个模块来对应用程序进行自动化操作了

    1、连接到应用程序这边以window自带的计算器程序作为案例,给大家做讲解

    连接应用程序,首先需要用到pywinauto.application.Application()来创建一个应用程序对象,然后再连接到应用程序,有如下两种方法:

    方式一:直接通过start方法打开操作的应用程序,

    from pywinauto import application

    # 方式一:创建应用程序时可以,指定应用程序的合适的backend,start方法中指定启动的应用程序

    app = application.Application(backend="uia").start("notepad.exe")

    方式二:连接已经打开应用程序,可以通过connect连接到指定的应用程序。

    from pywinauto import application

    # 方式二:查看要打开的程序进程号,通过process指定进程号连接

    app = application.Application().connect(process=19035)

    运行以上代码,就会自动打开记事本记事本,如下:

    ::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::0

    2、窗口选择

    打开这个窗口之后,我们要操作该窗口的话,那么就的先选中这个窗口,关于窗口的选择有一下几种方式:

    # 方式一 :不适用于窗口名为中文的

    wind_1 = app.窗口名

    # 方式二 :窗口名可以为中文

    wind_2 = app["窗口名"]

    # 案例使用:选择上面打开的计算器程序窗口

    wind_calc = app["无标题 - 记事本"]

    3、控件操作

    程序窗口中的内容,把它称之为控件,我们要对这个窗口的内容进行操作,就需要选择到对应的控件,

    获取所有控件。我们可以通过print_control_identifiers()这个方法,来获取这个窗口下的直接子控件,如下:

    app["无标题 - 记事本"].print_control_identifiers()

    打印出来的结果如下:

    ::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::1

    上面打印出来的内容分别对应窗口种,选择控件

    关于控件选择的方法有好几种,最简单的方法如下:

    # 选择控件的方法

    wind_calc = app["窗口名"]["控件名"]

    # 案例操作:选择编辑窗口

    edit = app["无标题 - 记事本"]["Edit"]

    内容输入:

    在上面选择到编辑窗口之后,我们就可以进行内容输入了,内容输入的方法:type_key():

    # 在编辑栏种输入内容

    edit.type_keys("柠檬班")

    edit.type_keys("python自动化")

    edit.type_keys("musen")

    运行结果如下:

    ::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::2

    4、键盘操作

    输入完上述内容之后,接下来我们要修改编辑框中的内容,

    通过键盘完成以下操作:全选(ctrl+A) 复制(ctrl+C) 粘贴(ctrl+V),

    pywinauto.keyboard.send_key

    pywinauto模拟操作键盘,需要使用到 pywinauto.keyboard.send_keys这个方法:

    # 导入模块

    from pywinauto.keyboard import send_keys

    # 全选(ctrl+A)

    send_keys("^a")

    # 复制(ctrl+C)

    send_keys("^c")

    # 粘贴(ctrl+V)

    send_keys("^v")

    # 回车键

    send_keys("{VK_RETURN}")

    # 粘贴(ctrl+V)

    send_keys("^v")

    常见的按键操作

    字母按键用按键小写字母表示

    常用的一些按键

    ESC键:VK_ESCAPE

    回车键:VK_RETURN

    TAB键:VK_TAB

    Shift键:VK_SHIFT

    Ctrl键:VK_CONTROL

    Alt键:VK_MENU

    按键修饰符

    # 对于一些常用的按键,可以通过修饰符来表示,使用的时候比较方便

    "+’: {VK_SHIFT}

    "^’: {VK_CONTROL}

    "%’: {VK_MENU} Alt键

    # 上面:全选(ctrl+A) 复制(ctrl+C) 粘贴(ctrl+V)就使用的是修饰符^来代表ctrl

    更多的键盘操作大家可以参考官网文档

    5、鼠标操作

    pywinauto. mouse

    pywinauto操作鼠标,需要导入mouse模块,mouse模块中设置了一系列的鼠标操作事件

    鼠标移动:move方法

    move(coords=(x轴坐标,y轴坐标))。

    缓慢移动鼠标案例。

    for i in range(10):

    x = 10 * i

    y = 10 * i

    time.sleep(0.5)

    # 移动鼠标

    mouse.move(coords=(x, y))

    鼠标点击:click

    # button指定左击还是右击,coords指定鼠标点击的位置

    # 3.1、鼠标单击

    # 指定位置,鼠标左击

    mouse.click(button="left", coords=(40, 40))

    # 指定位置 鼠标右击

    # mouse.click(button="right", coords=(100, 200))

    # 3.2 鼠标双击

    mouse.double_click(button="left", coords=(140, 40))

    # 4 按下鼠标:press

    # 将属性移动到(140,40)坐标处按下

    mouse.press(button="left", coords=(140, 40))

    # 5 释放鼠标:repleace

    # 将鼠标移动到(300,40)坐标处释放,

    mouse.release(button="left", coords=(300, 40))

    # 6、右键单击指定坐标

    mouse.right_click(coords=(400, 400))

    # 7、鼠标中键单击指定坐标(很少用的到)

    mouse.wheel_click(coords=(400, 400))

    # 8 滚动鼠标

    # coords:指定鼠标的坐标位置。

    # wheel_dist指定鼠标滚轮滑动的次数,正数往上,负数往下。

    mouse.scroll(coords=(1200,300),wheel_dist=-3)

    展开全文
  • windows程序开发设计指南 windows visual c++软件开发教程 内容包括: unicode 窗口 消息 图形 文字 键盘 鼠标 timer 子窗口 对话框 剪贴板 打印机 位图 文件 多线程 动态链接库dll 多媒体音视频 Internet
  • 3. 安装py2exe, 这是windows平台下一个非常好的python程序发布工具,可以将python程序编译成exe而脱离python环境执行。做完上面的安装后,我们就可以来测试一下了 wxPython demo 代码: 复制代码 代码如下: #wxDem
  • Windows 应用程序开发入门
  • C++——Windows 程序开发

    千次阅读 2020-04-28 14:51:40
    Windows API的Windows程序,需要编写两个函数。一个是Winmain()函数,程序的执行从这里开始,基本的初始化工作也在这里完成。另一个是WindowProc()函数,该函数由Windows调用,用来给应用程序传递消息。Winmain与...

           开发 Windows API的Windows程序,需要编写两个函数。一个是Winmain()函数,程序的执行从这里开始,基本的初始化工作也在这里完成。另一个是WindowProc()函数,该函数由Windows调用,用来给应用程序传递消息。Winmain与WindowProc函数通过调用系统的API与Windows通信,如图所示:

    1 Winmain函数

    Winmain()函数等价于控制台的程序中的main()函数,Winmain()函数的原型如下:

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow);

       (1) WINAPI是一个Windows定义的宏,将使系统以特定于Windows API函数的特种方式处理函数名和实参。

       (2) hInstance是指向某个实例的的句柄。

       (3) hPrevInstance是16位操作系统继承下来的,现在的操作系统可以将这位始终设为空。

       (4) lpCmdLine是指向某个字符串的指针,该字符串包括启动程序的命令行字符。

       (5) nCmdShow决定着被创建窗口的外观。

    程序中的Winmain()函数需要做以下四件事情:

       (1) 指定程序窗口种类

       (2) 创建窗口

       (3) 初始化窗口

       (4) 处理部分消息

    1.1 指定程序窗口

    Windows使用WNDCLASSEX来包含用来指定窗口的数据,WNDCLASSEX 结构用于注册窗口类,WNDCLASSEX的结构定义如下:

    struct WNDCLASSEX {
    
    UINT cbSize;                           // WNDCLASSEX 的大小
    
    UINT style;                              //窗口类的样式,它的值可以是窗口样式值的任意组合
    
    WNDPROC lpfnWndProc;      //指向窗口处理消息的函数的指针
    
    int cbClsExtra;                        //允许请求Windows在内部为特别用途提供额外空间,常用初始化为0
    
    int cbWndExtra;                     //允许请求Windows在内部为特别用途提供额外空间,常用初始化为0
    
    HINSTANCE hInstance;        //当前应用程序的实例句柄
    
    HICON hIcon;                       //最小化时的应用程序
    
    HCURSOR hCursor;            //窗口使用的光标
    
    HBRUSH hbrBackground;   //窗口客户区的背景色
    
    LPCTSTR lpszMenuName;  //定义窗口菜单的资源名称;如果窗口没有菜单,则定义为NULL
    
    LPCTSTR lpszClassName;  //指向窗口类的指针,LPSTR类型
    
    HICON hIconSm;                 //小图标的句柄,在任务栏显示的图标
    
    };

    1.2 创建程序窗口

    将WNDCLASSEX结构的所有成员都设置为所需的值后,下一步是把相关情况告诉Windows。使用RegisterClassEx()来完成这件事。假定WNDCLASSEX的对象是WindowsClass,则相应的语句如下所示:

    RegisterClassEx(&WindowsClass);//注册窗口类

    接下来是创建窗口,由createWindow()函数完成。

    HWND hWnd;                                       //窗体句柄
    
     hWnd = CreateWindow(
        szAppName,                                                 // the window class name
        _T("A Basic Window the Hard Way"),          //标题栏文本
        WS_OVERLAPPEDWINDOW,                    // 创建后的窗体样式
        CW_USEDEFAULT,                                     // 窗体位置
        CW_USEDEFAULT,                                     // 左上角位置坐标
        CW_USEDEFAULT,                                     // 窗体长度
        CW_USEDEFAULT,                                     // 窗体高度
        nullptr,                                     // 如果不是父窗体设置为空
        nullptr,                                     // 没有菜单设置为空
        hInstance,                                   // Program Instance handle
        nullptr                                      // No window creation data
        );

    在调用CreateWindow()函数后,被创建的窗口现在已经存在,但是还没有显示在屏幕上。需要调用另一个Windows API函数将该窗口显示出来:

     ShowWindow(hWnd, nCmdShow); 

    第一个参数是CreateWindow()函数返回的句柄。第二个参数是给Winmain()传递的nCmdShow值,它指出在屏幕显示窗口的方式。

    1.3 初始化程序窗口

    在调用 ShowWindow()函数后,该窗口将出现在屏幕上,但仍然没有应用程序的内容。绘制工作区的最好方法是把绘制工作区的代码放入WindowProc()函数,并使Windows给程序发送请求重画工作区的消息。调用另一个Windows API函数UpdateWindow(),请求Windows给程序发送一条重画窗口工作区的消息。调用该函数的窗口如下:

    UpdateWindow(hwnd);

    1.4 处理Windows消息

    Windows有两种消息:一种是排队消息,Winmain()从队列中提取这些消息进行处理,称为消息循环;另一种是致使Windows直接调用WindowsProc()函数的非排队消息。我们在Winmain()函数的消息循环中所作的事情是从Windows为应用程序排好的消息队列中提取一条消息,然后请求Windows调用WindowsProc()函数来处理该消息。

    while (GetMessage(&msg, nullptr, 0, 0) == TRUE) // Get any messages
      {
        TranslateMessage(&msg);                      // Translate the message
        DispatchMessage(&msg);                       // Dispatch the message
      }
    • GetMessage()——从队列中检索一条消息
    • TranslateMessage()——对检索的消息执行必要的转换
    • DispatchMessage()——使Windows调用应用程序的WindowProc()函数来处理消息

    2 处理Windows消息

    使Windows以我们希望的方式运行的所有代码都在程序的消息处理部分——WindowProc()函数

    2.1 WindowProc()函数

    WindowProc()函数的原型如下:

    LRESULT CALLBACK WindowProc(HWND hWnd, UINT message,WPARAM wParam, LPARAM lParam);

    可以使用WINAPI替代CALLBACK,但后者更好地表达出这个函数的作用。每个参数的意义如下:
    HWND hWnd : 一个句柄,事件引起消息发生的窗口
    UINT message: 消息的ID,指出消息类型的32为整数值
    WPARAM wParam : 32位值,包含附加信息,决定于消息的种类
    LPARAM lParam: 32位值

    2.2 解码Windows消息

    switch (message)                               // Process selected messages
      {
      case WM_PAINT:    
    
      //绘制窗口工作区的代码
    
       break;
    
    case WM_LBUTTONDOWN:
    
    //处理鼠标左键按下时的事件
    
    break;
    
    case WM_LBUTTONUP:
    
      //处理鼠标释放时的事件
    
     break;
    
    ......
    
    case WM_DESTROY:                               // Window is being destroyed
       //退出窗口
     break;
    
    default:
    
    //其他默认语句
    
    }

    3 完整程序代码

     

    #include <windows.h>
    #include <tchar.h>
    
    LRESULT CALLBACK WindowProc(HWND hWnd, UINT message,
      WPARAM wParam, LPARAM lParam);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
      LPSTR lpCmdLine, int nCmdShow)
    {
      WNDCLASSEX WindowClass;                        // Structure to hold our window's attributes
    
      static LPCTSTR szAppName { _T("OFWin") };      // Define window class name
      HWND hWnd;                                     // Window handle
      MSG msg;                                       // Windows message structure
    
      WindowClass.cbSize = sizeof(WNDCLASSEX);       // Set structure size
    
      // Redraw the window if the size changes
      WindowClass.style = CS_HREDRAW | CS_VREDRAW;
    
      // Define the message handling function
      WindowClass.lpfnWndProc = WindowProc;
    
      WindowClass.cbClsExtra = 0;                    // No extra bytes after the window class
      WindowClass.cbWndExtra = 0;                    // structure or the window instance
    
      WindowClass.hInstance = hInstance;             // Application instance handle
    
      // Set default application icon
      WindowClass.hIcon = LoadIcon(nullptr, IDI_APPLICATION);
    
      // Set window cursor to be the standard arrow
      WindowClass.hCursor = LoadCursor(nullptr, IDC_ARROW);
    
      // Set gray brush for background color
      WindowClass.hbrBackground = static_cast<HBRUSH>(GetStockObject(GRAY_BRUSH));
    
      WindowClass.lpszMenuName = nullptr;            // No menu
      WindowClass.lpszClassName = szAppName;         // Set class name
      WindowClass.hIconSm = nullptr;                 // Default small icon
    
      // Now register our window class
      RegisterClassEx(&WindowClass);
    
      // Now we can create the window
      hWnd = CreateWindow(
        szAppName,                                   // the window class name
        _T("A Basic Window the Hard Way"),           // The window title
        WS_OVERLAPPEDWINDOW,                         // Window style as overlapped
        CW_USEDEFAULT,                               // Default screen position of upper left
        CW_USEDEFAULT,                               // corner of our window as x,y.
        CW_USEDEFAULT,                               // Default window size width ...
        CW_USEDEFAULT,                               // ... and height
        nullptr,                                     // No parent window
        nullptr,                                     // No menu
        hInstance,                                   // Program Instance handle
        nullptr                                      // No window creation data
        );
    
      ShowWindow(hWnd, nCmdShow);                    // Display the window
      UpdateWindow(hWnd);                            // Redraw window client area 
    
      // The message loop
      while (GetMessage(&msg, nullptr, 0, 0) == TRUE) // Get any messages
      {
        TranslateMessage(&msg);                      // Translate the message
        DispatchMessage(&msg);                       // Dispatch the message
      }
    
      return static_cast<int>(msg.wParam);           // End, so return to Windows
    }
    
    
    LRESULT CALLBACK WindowProc(HWND hWnd, UINT message,
      WPARAM wParam, LPARAM lParam)
    {
    
      switch (message)                               // Process selected messages
      {
      case WM_PAINT:                                 // Message is to redraw the window
        HDC hDC;
        PAINTSTRUCT PaintSt;                         // Structure defining area to be drawn
        hDC = BeginPaint(hWnd, &PaintSt) ;           // Prepare to draw the window
    
        // Get upper left and lower right of client area
        RECT aRect;                                  // A working rectangle
        GetClientRect(hWnd, &aRect);
    
        SetBkMode(hDC, TRANSPARENT);                 // Set text background mode
    
        // Now draw the text in the window client area
        DrawText(
          hDC,                                       // Device context handle
          _T("But, soft! What light through yonder window breaks?"),
          -1,                                        // Indicate null terminated string
          &aRect,                                    // Rectangle in which text is to be drawn
          DT_SINGLELINE |                            // Text format - single line
          DT_CENTER |                                //             - centered in the line
          DT_VCENTER);                               //             - line centered in aRect
    
        EndPaint(hWnd, &PaintSt);                    // Terminate window redraw operation
        return 0;
    
      case WM_DESTROY:                               // Window is being destroyed
        PostQuitMessage(0);
        return 0;
      }
      return DefWindowProc(hWnd, message, wParam, lParam);
    }
    

     

    展开全文
  • 使用Python开发windows桌面程序

    万次阅读 2017-10-26 15:10:52
    使用Python开发windows桌面程序 一、开发前期准备  1. boa-constructor-0.6.1.bin.setup.exe   #一个wxWidges的集成开发环境,简单如Delphi,可以直接拖拽控件,并且和其他集成环境不一样, #它不与集成...
  • WindowsCE驱动程序开发

    2010-04-19 17:21:51
    WindowsCE驱动程序开发WindowsCE驱动程序开发WindowsCE驱动程序开发WindowsCE驱动程序开发
  • PDF资源:Windows程序设计、Python3网络爬虫开发实战一、Windows程序设计(第五版)二、Python3网络爬虫开发实战----崔庆才 一、Windows程序设计(第五版) Windows程序设计(完整清晰中英文pdf+源代码) ...
  • Windows程序设计应用开发

    千人学习 2018-03-15 20:24:22
    养具备Win32 API SDK级别对Windows平台程序编码能力,可以参与Windows应用工程类别的GUI程序开发,对算法策略有容错性表现;提升的、软件设计经验,初步具备面向对象软件设计思想,能针对性的应用事件驱动编程开发...
  • 它使用方便的Windows安装程序来安装大约130个非常有用的开源UNIX应用程序,这些应用程序被编译为本机win32二进制文件。 与Cygwin相比,它设计得尽可能小,大约10 MB,而Cygwin可以根据选项运行超过100 MB。 以下是...
  • python开发windows程序,首先必须先安装好pywin32,还要安装pyinstaller pip install pywin32 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install pyinstaller -i ...
  • Windows窗体程序开发

    2013-03-10 10:37:20
    基于C#的windows窗体应用程序开发
  • Windows程序设计

    2014-03-10 22:16:16
    Windows程序设计讲解了如何使用API进行Windows平台下的程序开发
  • 如果你想用Python开发Windows程序,并让其开机启动等,就必须写成windows的服务程序Windows Service,用Python来做这个事情必须要借助第三方模块pywin32,自己去下载然后安装(注意下载符合自己OS的版本)。...
  • CaysnPrinter Windows平台开发包接口说明文档及打印示例程序 PrinterLibs For Windows_20160927
  • 驱动程序的开发\Windows驱动程序开发环境配置.doc
  • 本书介绍了在Microsoft Windows 98、Microsoft Windows NT 4.0和Windows NT 5.0下...如在本章稍后所讨论的,这不是写作Windows程序的唯一方法。然而,无论最终您使用什么方式写作程序,了解Windows API都是非常重要的。
  • 通常在windows平台开发python服务后,需要通过引用虚拟环境后再运行,或者使用IDE软件启动,但如果想做成开机启动的本地服务,每次都这样启动就太麻烦了。  该文档介绍这个方法是把python程序制作成一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 862,734
精华内容 345,093
关键字:

windows程序开发平台