整个窗口应用的源码
2023-09-14 09:10:33 时间
为了方便查看,所有源码放在一起,如下:
#windows应用程序
from ctypes import *
from ctypes.wintypes import *
WNDPROCTYPE = WINFUNCTYPE(c_int, HWND, c_uint, WPARAM, LPARAM)
WS_EX_APPWINDOW = 0x40000
WS_OVERLAPPEDWINDOW = 0xcf0000
WS_CAPTION = 0xc00000
SW_SHOWNORMAL = 1
SW_SHOW = 5
CS_HREDRAW = 2
CS_VREDRAW = 1
CW_USEDEFAULT = 0x80000000
WM_DESTROY = 2
WHITE_BRUSH = 0
#窗口类的名称
wclassName = u'ShenzhenCai'
wname = u'Hello World'
#定义窗口类结构
class WNDCLASSEX(Structure):
_fields_ = [("cbSize", c_uint),
("style", c_uint),
("lpfnWndProc", WNDPROCTYPE),
("cbClsExtra", c_int),
("cbWndExtra", c_int),
("hInstance", HANDLE),
("hIcon", HANDLE),
("hCursor", HANDLE),
("hBrush", HANDLE),
("lpszMenuName", LPCWSTR),
("lpszClassName", LPCWSTR),
("hIconSm", HANDLE)]
#窗口消息处理回调函数
def PyWndProc(hWnd, Msg, wParam, lParam):
if Msg == WM_DESTROY:
windll.user32.PostQuitMessage(0)
else:
return windll.user32.DefWindowProcW(hWnd, Msg, wParam, lParam)
return 0
#初始化主窗口
def initwinclass(hInst, WndProc):
wndClass = WNDCLASSEX()
wndClass.cbSize = sizeof(WNDCLASSEX)
wndClass.style = CS_HREDRAW | CS_VREDRAW
wndClass.lpfnWndProc = WndProc
wndClass.cbClsExtra = 0
wndClass.cbWndExtra = 0
wndClass.hInstance = hInst
wndClass.hIcon = 0
wndClass.hCursor = 0
wndClass.hBrush = windll.gdi32.GetStockObject(WHITE_BRUSH)
wndClass.lpszMenuName = 0
wndClass.lpszClassName = wclassName
wndClass.hIconSm = 0
return windll.user32.RegisterClassExW(byref(wndClass))
#主函数入口
def main():
hInst = windll.kernel32.GetModuleHandleW(None)
WndProc = WNDPROCTYPE(PyWndProc)
if initwinclass(hInst, WndProc) <= 0:
return False
hWnd = windll.user32.CreateWindowExW(
0, wclassName, wname,
WS_OVERLAPPEDWINDOW | WS_CAPTION,
CW_USEDEFAULT, CW_USEDEFAULT,
800, 600, 0, 0, hInst, 0)
if not hWnd:
print('Failed to create window')
exit(0)
windll.user32.ShowWindow(hWnd, SW_SHOW)
windll.user32.UpdateWindow(hWnd)
msg = MSG()
lpmsg = pointer(msg)
print('Entering message loop')
while windll.user32.GetMessageW(lpmsg, 0, 0, 0) != 0:
windll.user32.TranslateMessage(lpmsg)
windll.user32.DispatchMessageW(lpmsg)
print('done.')
if __name__ == "__main__":
print( "Win32 Application in python" )
main()
相关文章
- Docker实战部署应用——Redis
- 【华为云分享】应用系统迁移华为云评估
- 如何查看搜狗浏览器应用的源码
- Qt编写地图综合应用59-经纬度坐标纠偏
- Qt编写地图综合应用19-地图服务
- 【BSP视频教程】STM32H7视频教程第9期:STM32H7的GPIO专题,通过驱动源码,参考手册,数据手册应用笔记系统学习GPIO知识点(2022-03-06)
- 【安富莱原创开源应用第1期】花式玩转网络摄像头之TCP上位机软件实现,高端大气上档次,速度2MB/S,华丽丽的界面效果
- 如何在ASP.NET Core应用中实现与第三方IoC/DI框架的整合?
- UI5应用如果出现白屏但是没有任何错误消息打印出来,应该如何处理
- PHP CLI模式下的多进程应用
- CAP 实际应用案
- 设计模式的C语言应用-表驱动模式
- Spring Boot Java应用代码混淆介绍
- POSIX 系统应用程序接口 errno IEEE dev_t gid_t pid_t uid_t 标准 进程创建fork execl执行 wait 等待进程终止 _exit 终止一个进程
- 【Android 安装包优化】WebP 应用 ( libwebp 源码下载 | Android.mk 和 Application.mk 构建脚本修改 | libwebp 函数库编译 )
- 【Android 进程保活】应用进程拉活 ( JobScheduler 拉活 | JobScheduler 使用流程 | JobService 服务 | 不同版本兼容 | 源码资源 )
- 【Android 进程保活】应用进程拉活 ( 账户同步拉活 | 账户同步 | 源码资源 )
- 【Android 进程保活】应用进程拉活 ( 账户同步拉活 | 账号添加 | 源码资源 )
- 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | LoadedApk 源码分析 )
- 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | ActivityThread 源码分析 )
- 【Quartz】Quartz的搭建、应用(单独使用Quartz)
- 004-restful应用构建、分布式会话、测试工具简介
- Python 运维CMD交互控制台 [应用]