博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实例句柄
阅读量:4946 次
发布时间:2019-06-11

本文共 1492 字,大约阅读时间需要 4 分钟。

Windows应用程序中,总须要载入应用程序文件到系统内存里,为了标识每个文件在内存的差别,Windows使用了句柄来标识这些文件。比方在一个应用程序里,有一个可运行文件(EXE)和多个动态连接库文件(DLL),这时能够标识可运行文件为0x1D000000,动态连接库文件为0x1D001000。这里的值仅仅是举例,当系统运行应用程序时,就会分配实际的值给应用程序。载入到进程地址空间的每个可运行文件或是DLL文件都被赋予了一个独一无二的实例句柄。可运行文件的实例句柄就是(w)WinMain函数的第一个參数hInstance。传递这个參数给Windows应用程序,这样在C语言编写的应用程序里,就能够从这个參数拿到Windows应用程序实例句柄了。在非常多函数中都用到这个參数,比如:为了从可运行文件载入一个图标资源:

HICON   LoadIconHINSTANCE   hInstance ,   PCTSTR   pszIcdon

这里的第一个參数hInstance就是Windows应用程序实例句柄,假设想从EXE文件中载入图标,就把EXE文件的句柄传入;假设想从DLL文件中载入图标,就把DLL文件的句柄传入。hInstance參数实际上就是一个内存基地址,系统将可运行文件的映像载入到进程地址空间的这个位置。可是在Python的应用程序里,它的入口函数并不能直接拿到这个实例句柄參数,仅仅能另想它法。山重水复疑无路,柳暗花明又一村。在浏览Win32API里,能够找到两个相关的API函数:GetModuleHandleGetModuleHandleEx。这两个函数都能够获取文件的实例句柄,它们的差别是GetModuleHandle适用单线程获取句柄,不添加模块的引用计数;GetModuleHandleEx可用于多线程句柄,能够添加模块的引用计数,因此每调用一次这个函数,就要释放一次库的引用计数。在Python的应用程序里,就能够使用这两个函数来获取实例句柄,如以下的样例:

#windows应用程序

#开发者:蔡军生(QQ9073204) 深圳  2014-8-12

from ctypes import *

from ctypes.wintypes import *

 

hInst = windll.kernel32.GetModuleHandleW(None)

print('hInst: 0x%X' % hInst)

在这个样例里,聪明的你或许发现多导入了一个模块ctypes.wintypeswintypes是干什么用的呢?从前面学习ctypes已经知道能够使用ctypes里的类型,可是在转换为WIN32API时,就要记住比較多类型了。幸运的是wintypes已经帮我们做好基本经常使用的类型,比方:BYTEWORDDWORDUINTBOOLLPCWSTRCOLORREFHANDLEHWNDRECT等类型,假设须要很多其它关于这些类型,请查看python\Lib\ctypes\wintypes.py。有了这些类型,你就能够在Python里跟WIN32API的数据类型使用同样的形式了,而不必自己再去做脑力上的转换,这样能够省下不少时间,会大大提高开发效率。在这里通过windll.kernel32.GetModuleHandleW语句就能够获取当前进程的实例句柄,有了实例句柄,就能够向这个程序创建窗体、创建字体等事情了。

转载于:https://www.cnblogs.com/mengfanrong/p/4172425.html

你可能感兴趣的文章
android EditText不弹出软键盘
查看>>
php将数组写入配置文件
查看>>
ALV 报表
查看>>
Spring+Quartz实现定时任务的配置方法
查看>>
同时启动多个tomcat服务器
查看>>
怎么将iphone上的照片导出到本地文件
查看>>
Repeater+DataPagerSource分页
查看>>
模块化导出
查看>>
pagebean pagetag java 后台代码实现分页 demo 前台标签分页 后台java分页
查看>>
H5小知识
查看>>
面包屑之javascript声明期与执行期的故事
查看>>
作为程序员的你,必须掌握的21个Java核心技术!
查看>>
Sphinx 2.0.8 发布,全文搜索引擎 Installing Sphinx on Windows
查看>>
自定义orgmode中加粗字体的颜色
查看>>
基于keepalived搭建MySQL热机集群
查看>>
AX lookup方法重载实例
查看>>
《Gradle权威指南》--Android Gradle测试
查看>>
字符串删除指定字符
查看>>
和腾讯云奋战的三百回合
查看>>
[洛谷P2107]小Z的AK计划
查看>>