Win32 API 常量定义
关于VC预定义常量_WIN32,WIN32,_WIN64
VC2012 下写 Windows 时,有时需要判断编译环境。
在之前的文章《判断程序是否运行在 Windows x64 系统下。
》里说过如何在运行期间判断系统环境,但在编译时如何判断?MSDN 里说,VC 有 3 个预处理常量,分别是 _WIN32,_WIN64,WIN32。
这三个常量如何使用呢?看起来简单,其实是很困惑的。
在 Win32 配置下,WIN32 在“项目属性-C/C++-预处理器-预处理器定义”里声明了,而在 x64 配置下,这个常量并不在项目预定义列表中。
这是否说明可以根据 WIN32 来判断是否在 x64 平台呢?不。
在 Windows SDK 的minwindef.h 下第 37 行有如下定义:#ifndef WIN32#define WIN32#endif即是说,只要包含了 Windows.h,那么 WIN32 常量是肯定定义了的,所以不能用于判断平台环境。
但是如果在预处理定义里删掉 WIN32,又不包含Windows.h,那么 WIN32 未定义。
下面看 _WIN32 和 _WIN64,这两个比较特别,没有任何显式定义。
在Windows.h 里没有,在“项目属性-C/C++-预处理器-预处理器定义”下也没有。
根据 MSDN,这是由编译器(ml.exe/ml64.exe)内部定义的。
具体描述是_WIN32:Defined for applications for Win32 and Win64. Always defined._WIN64:Defined for applications for Win64.下面看一段程序:(分别在 Win32 和 x64 配置下运行一次)#include <iostream>using namespace std;int main() {#ifdef _WIN64cout << "_WIN64 is defined as " << _WIN64 << endl;#endif#ifdef _WIN32cout << "_WIN32 is defined as " << _WIN32 << endl;#endifcin.get();return 0;}在 Win32 配置下,_WIN32 有定义,_WIN64 没有定义。
Win32程序数据类型
Win32程序数据类型下面这些是和Win32程序共同使用的数据类型BOOL:布尔值,取值为TRUE or FALSEBSTR:32-bit 字符指针BYTE:8-bit整数,未带正负号COLORREF:32-bit数值,代表一个颜色值DWORD:32-bit整数,未带正负号LONG:32-bit整数,带正负号LPARAM:32-bit整数,作为窗口函数或callback函数的一个参数LPCSTR:32-bit指针,指向一个常数字符串LPSTR:32-bit指针,指向一个字符串LPCTSTR:32-bit指针,指向一个常数字符串,此字符串可以移植到Unicode和DBCSLPTSTR:32-bit指针,指向一个字符串,此字符串可以移植到Unicode和DBCSLPVOID:32-bit指针,指向一个未指定类型的数据LPRESULT:32-bit数值,作为窗口函数或callback函数的返回值UINT:在Win16中是一个16-bit 未带正负号整数,在Win32中是一个32-bit 未带正负号整数,WNDPROC:32-bit指针,指向一个窗口函数WORD:16-bit 整数,未带正负号WPARAM:窗口函数或callback函数的一个参数,在Win16中是16-bit,在Win32中是32-bit下面这些是MFC独特的数据类型POSITION:一个数值,代表collection对象(例如数组或链表)中的元素位置,常用于MFC collection classes(即数据处理类,如CArray)LPCRECT:32-bit指针,指向一个不变的RECT结构L表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中,long指针和near指针及far修饰符都是为了兼容的作用。
没有实际意义。
P表示这是一个指针C表示是一个常量T在Win32环境中,有一个_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。
api函数结构常量定义
constant LONG FS_CASE_IS_PRESERVED = FILE_CASE_PRESERVED_NAMESFILE_CASE_PRESERVED_NAMES //FILE_CASE_PRESERVED_NAMES
constant LONG THREAD_PRIORITY_ABOVE_NORMAL = THREAD_PRIORITY_HIGHEST - 1THREAD_PRIORITY_HIGHEST - 1 //THREAD_PRIORITY_HIGHEST - 1
constant LONG THREAD_PRIORITY_ERROR_RETURN = MAXLONGMAXLONG //MAXLONG
constant LONG THREAD_PRIORITY_BELOW_NORMAL = THREAD_PRIORITY_LOWEST + 1THREAD_PRIORITY_LOWEST + 1 //THREAD_PRIORITY_LOWEST + 1
constant LONG THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAXTHREAD_BASE_PRIORITY_MAX //THREAD_BASE_PRIORITY_MAX
constant LONG FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE Or FILE_WRITE_DATA Or FILE_WRITE_ATTRIBUTES Or FILE_WRITE_EA Or FILE_APPEND_DATA Or SYNCHRONIZESTANDARD_RIGHTS_WRITE Or FILE_WRITE_DATA Or FILE_WRITE_ATTRIBUTES Or FILE_WRITE_EA Or FILE_APPEND_DATA Or SYNCHRONIZE //STANDARD_RIGHTS_WRITE Or FILE_WRITE_DATA Or FILE_WRITE_ATTRIBUTES Or FILE_WRITE_EA Or FILE_APPEND_DATA Or SYNCHRONIZE
常量的名词解释(二)
常量的名词解释(二)常量的名词解释常量是在程序中固定不变的值,在整个程序的执行过程中其值是不可修改的。
常量通常用来表示固定的数值、字符、字符串或者其他类型的数据。
本文将介绍一些与常量相关的名词,并举例解释说明其含义。
常量 (Constant)常量指的是在程序中被定义后其值不可更改的变量。
常量的值在定义时就确定,并且在程序的执行过程中不能被修改。
常量的定义通常使用关键字或者特定的语法。
示例:在Python中,使用关键字const来定义常量。
例如:const PI =常量标识符 (Constant Identifier)常量标识符是用来表示常量的名称或符号。
常量标识符通常使用大写字母和下划线来命名,以区分于变量和函数。
示例:在C语言中,可以使用常量标识符MAX_VALUE来表示一个最大值常量。
例如:const int MAX_VALUE = 100;字面常量 (Literal Constant)字面常量是程序中直接出现的固定值,它们不需要计算或者求解。
字面常量可以是一个数字、一个字符或者一个字符串。
示例:在Java中,整数字面常量10表示一个固定的整数值。
例如:int x = 10;符号常量 (Symbolic Constant)符号常量是用一个符号来表示具有固定值的常量。
它们通常在程序中用作宏定义或预处理指令中使用。
示例:在C语言中,使用预处理指令#define定义一个符号常量。
例如:#define MAX_SIZE 100常量表达式 (Constant Expression)常量表达式是由常量、运算符和括号组成的表达式,其值在编译时就可以确定。
常量表达式通常用于初始化常量或在其他表达式中使用。
示例:在C++中,可以使用常量表达式来初始化一个常量。
例如:const int MAX_VALUE = 2 * 10;常量折叠 (Constant Folding)常量折叠是指编译器在编译时对常量表达式进行计算,并将表达式的结果直接替代代码中的常量。
常量的定义以及常用的数据类型
常量的定义以及常⽤的数据类型
常量:
常量的定义是⼀个存储空间的表⽰,其值是不可以发⽣变化的。
适⽤场景:
在声明的时候即赋值,后⾯就不再改变其值。
如:PI
案例:
doubel r = 2.0;
final double MY_PI=3.14;
double area=MY_PI * r * r;
System.out.println(area);
注意事项:
使⽤ final 修饰常量;
常量名都需要⼤写,如果有多个单词组成,则使⽤下划线分割。
数据类型
常见的基本数据类型
数值型浮点型字符型布尔型引⽤数据类型
数值型:存放具体的数值
1:byte 2字节 2:short 4字节 3: int 8字节 4: long 16字节
浮点型:存放带有⼩数点的数
1:float 8字节 2:double 16字节
字符型:存放⼀个字符的值,如 ’a‘ ’b‘ ’c‘ ’王‘ ⼀般使⽤单引号括起来
char
布尔型:其结果只有两种,true false
boolean
引⽤数据类型:所有的内容都需要在双引号中
1:String 2:枚举 3:数组。
第02课 - Win32编程基础知识
C语言入口函数
Windows程序设计-基础教程
例如 dir /w /p c:\windows argc = 4 argv[0] = dir argv[1] = /w argv[2] = /p argv[3] = c:\windows
17
代码规范-函数头的注释模板
Windows程序设计-基础教程
每行字符不要超出80个字符(“/”加上“-” 的总长度是80个字符; “FUNC”为函数的名称; “IN”为输入的参数; “OUT”为在函数内部的输出信息内容,即函数 参数作为返回值的说明; “RETURN”函数的返回值(如:函数成功返 回TRUE,否则返回FALSE。); “AUTHOR”为作者信息,需要时间的写法; “NOTE”为函数功能的描述,其中包括:功 能描述、全局变量描述以及调用模块。
Windows 数据类型
C 数据类型
char * const char *
Windows 类型
LPSTR, PSTR LPCSTR, PCSTR
void
void *
VOID
LPVOID
22
Windows 新增数据类型:句柄类型 * *
Windows程序设计-基础教程
HINSTANCE HWND HANDLE HPEN HBRUSH HBITMAP HFONT HDC HRESOURCE HCURSOR ……
8
代码规范-函数命名
Windows程序设计-基础教程
第一个字母必须使用大写字母,要求用大小写字 母组合规范函数命名,必要时可用下划线间隔, 示例如下: int GetValue(); void* Word_GetApp();
Win32API数据基本类型
Win32API数据基本类型Win32API 类型⼀、基础类型typedef unsigned long DWORD;typedef int BOOL;//TRUE FALSEtypedef unsigned char BYTE;typedef unsigned short WORD;typedef float FLOAT;typedef FLOAT* PFLOAT;typedef BOOL* PBOOL;typedef BOOL* LPBOOL;typedef BYTE* PBYTE;typedef BYTE* LPBYTE;typedef int* PINT;typedef int* LPINT;typedef WORD* PWORD;typedef WORD* LPWORD;typedef long* LPLONG;typedef DWORD* PDWORD;typedef DWORD* LPDWORD;typedef void* LPVOID;typedef CONST void* LPCVOID;typedef int INT;typedef unsigned int UINT;typedef unsigned int* PUINT;#define VOID voidtypedef char CHAR;typedef short SHORT;typedef long LONG;typedef CHAR* PCHAR, LPSTR; //可写的指针变量typedef CONST CHAR *LPCSTR, *PCSTR;//只读的指针变量....⼆、结构体类型POINT,SIZE,RECTtypedef struct tagPOINT{LONG x;LONG y;} POINT, *PPOINT, *LPPOINT;typedef struct tagSIZE{LONG cx;LONG cy;} SIZE, *PSIZE, *LPSIZE;typedef struct tagRECT{LONG left;LONG top;LONG right;LONG bottom;} RECT, *PRECT, *LPRECT;三、句柄类型可以操作某⼀类事物的指针变量(依托)故意隐含了具体内容的⼀个结构体指针变量;HWND:操作窗⼝的句柄HICON:图标的句柄HCURSOR:光标的句柄HMENU:菜单的句柄HDC:绘图句柄四、TCHAR⾃适应类型相关的表达⽅法a) 常见的TCHAR字符串类型:typedef TCHAR* PTCHAR, LPTSTR; //⾃适应的可写的指针变量typedef CONST TCHAR *LPCTSTR, *PCTSTR; //⾃适应的只读的指针变量b)例如:TCHAR s[20]; LPTSTR p = s;c) TCHAR类型的常量表达法:_TEXT(x)/*TCHAR的系统定义:#ifdef _UNICODEtypedef wchar_t TCHAR;#elsetypedef char TCHAR;#endif*/_TEXT的系统定义:#define _T(x) __T(x)#define _TEXT(x) __T(x)#ifdef _UNICODE#define _TEXT(x) L##x#else#define _TEXT(x) x#endif。
在VBA中使用WindowsAPI
在VBA中使⽤WindowsAPIVBA是⼀种强⼤的编程语⾔,可⽤于⾃定义Microsoft Office解决⽅案。
通过使⽤VBA处理⼀个或多个Office应⽤程序对象模型,可以容易地修改Office应⽤程序的功能或者能够使两个或多个Office应⽤程序协同⼯作以完成单个应⽤程序⽆法完成的任务。
然⽽,使⽤VBA仅能控制操作系统的⼀⼩部分。
Windows API提供了控制操作系统绝⼤多数⽅⾯的功能。
下⾯,介绍在VBA中使⽤Windows API的⼀些知识。
理解APIsAPI只是⼀组函数,可⽤于处理组件、应⽤程序或操作系统。
通常,API由⼀个或多个提供某种特定功能的DLLs组成。
DLLs是包含函数的⽂件,能够从任何运⾏的Windows应⽤程序中调⽤DLLs。
在运⾏时,DLL中的函数被动态链接到调⽤它的应⽤程序⾥。
⽆论多少应⽤程序调⽤DLL中的函数,该函数仅存在于磁盘的单个⽂件中,并且DLL在内存中仅被创建⼀次。
您可能最经常听说的API是Windows API,它包括组成Windows操作系统的DLLs。
每个Windows应⽤程序都直接或间接地与Windows API相交互,Windows API确保运⾏在Windows下的所有应⽤程序都按⼀致的⽅式⼯作。
除了Windows API外,还有其它发布的APIs可⽤。
例如,邮件应⽤程序编程接⼝(MAPI)是⼀组⽤于编写电⼦邮件应⽤程序的DLLs。
APIs通常是由创建Windows应⽤程序的C和C++程序员编写,但能够使⽤VBA调⽤DLL中的函数。
因为⼤多数DLLs最初都是由C/C++程序员编写和⽂档规范,所以调⽤DLL函数与调⽤VBA函数不同。
为了使⽤API,必需理解如何传递参数到DLL函数。
为了调⽤Windows API中的函数,需要描述这些可⽤的函数的⽂档规范,如何在VBA中声明这些函数,以及如何调⽤它们。
下⾯是两个有⽤的资源:1、Win32API.txt⽂件,包含Windows API中⼤多数函数的VBA Declare(声明)语句。
常量的名词解释
常量的名词解释在计算机科学中,常量是指在程序中固定不变的数值或符号,其值在整个程序的执行过程中保持不变。
常量一般用于存储那些在程序运行时不会改变的值,例如数学常数、物理常数或者一些预定义的常量值。
常量的使用可以提高程序的可读性和可维护性,同时也有助于避免错误和减少代码的重复。
1. 数字常量数字常量是最常见的一种常量类型,它表示一个具体的值。
数字常量可以是整数、浮点数或者科学计数法表示的数。
例如,在程序中定义一个常量π,它的数值是3.14159,这个数值就是一个数字常量。
在编程语言中,数字常量还可以包括二进制、八进制或十六进制的数,用于表示不同进制的整数。
2. 字符常量字符常量是表示一个字符的常量值,用引号括起来。
例如,在程序中定义一个字符常量'a',它表示字母a。
字符常量也可以表示特殊字符,例如换行符或制表符,在程序中表示为'\n'或'\t'。
字符常量还可以通过其对应的ASCII码值来表示,例如字符常量'A'对应的ASCII码值是65。
3. 字符串常量字符串常量由多个字符组成,用引号括起来。
在程序中定义一个字符串常量可以是一个单词、一句话或者一段文本。
字符串常量在程序中广泛用于存储文本信息,例如在输出语句中打印文本消息或者定义文件路径。
字符串常量通常使用双引号括起来,例如"Hello, World!"。
4. 布尔常量布尔常量表示真或假的值,它只有两种取值:true或false。
在程序中使用布尔常量可以进行逻辑判断和控制流程。
例如,在条件语句中判断一个条件是否为真,可以使用布尔常量来表示判断结果。
5. 符号常量符号常量也称为宏常量,是一类用标识符表示的常量。
在程序中使用符号常量可以方便地代替一些固定的值,提高代码的可读性和可维护性。
符号常量通常定义在程序的开头,使用关键字#define,格式为#define 常量名常量值。
win32 API 简明教程
在 Win32 程序中总是为 NULL. LPSTR lpCmdLine
命令行参数组成的一个单字符串.不包括程序名字. int nCmdShow
一个将要传递给 ShowWindow()的整数,我们在后面进行讨论.
调用规则
WINAPI 指定调用规则并被定义为_stdcall.要是你不知道它是干什么用的,先不管它, 在我们的这个教程中它对我们沒有影响.记住在这个位置我们需要它就是了.
Win32 数据类型
你会发现很多普通的关键字或类型在 windows 中有特定的定义.UINT 是 unsigned int,LPSTR 是 char*等等...你怎么用完全取決于你自己.你要是喜欢 char*超过了 LPSTR,那就用就是了.当然在你替換一个数据类型前你要确定你知道它是什么.
本教程不会教你 C 语言,也不会教你怎么使用你喜欢的编译器(Borland C++,Visual C ++,LCC-Win32,等等).但是我将在附表中就我对编译器的所知提供一些说明.
如果你不知道 macro 或 typedef 是什么,或 switch()语句如何工作,那你要先回去找 一本好的 C 语言的教程学习一下.
重要说明
在此文档的某些部分我将指出某些地方很重要.因为很多人在不閱读它们情況下造成理 解困难,你如果不閱读,你很可能也陷入困难. 第一个就是:
以 zip 打包的源代码范例不是可选可不选的!我沒有把所有的代码放在教程中,只放了 那些与我正在讨论问题相关的.要想知道这里的代码怎么与其它部分配合,就必须去看 zip 文件中的源代码.
欢迎阅读 theForger's Win32 API 教程第二版(简体中文)
常量与变量的定义和使用方法
常量与变量的定义和使用方法常量与变量是编程中不可或缺的一部分,是程序设计语言最基本的元素之一。
在计算机程序中,变量和常量通常承担着存储数据的重要任务。
在本文中,我将讨论常量与变量的定义和使用方法。
常量与变量的定义常量是程序中的固定数值或参数,不可变更,其值在程序执行期间不能改变。
例如,π等数值无法改变的参数,一般会被定义为常量。
变量是程序中一个可变的参数,在程序执行期间可以被重新赋值。
例如,x和y等可以在程序中被改变的参数,一般会被定义为变量。
在编程中,常量和变量都需要进行定义,以便在程序中进行调用。
常量与变量的使用方法常量和变量在程序中具有重要的作用。
让我们来看看如何在程序中使用它们。
常量的使用方法常量一般应该在程序的开始部分进行定义,这样可以方便程序调用。
定义常量通常采用以下格式:const 标识符常量名 = 常量值;其中,const是常量关键字,常量名是常量的名称,常量值是常量的具体数值,例如:const float PI = 3.1415926;在程序执行过程中,常量值无法更改,但它可以用在程序的任何部分,比如计算圆的面积:float r = 5.0f; float area = PI * r * r;变量的使用方法变量一般应该在使用前进行定义,变量定义通常包括以下格式:数据类型变量名;然后,在程序中可以改变变量值或变量类型。
例如,在程序中定义一个整数变量并赋值:int number = 5;在程序执行的过程中,可以改变number的值或变量类型,例如:number = 7; float decimalNumber = number /2.0f;在此示例中,我们将变量值改变了一次,还将一个整数转换为一个浮点数,并将其赋给另一个变量。
常量与变量的区别常量和变量之间的主要区别在于其可变性。
常量的值在程序运行过程中是不变的,而变量的值可以波动。
常量的定义通常在程序开始时进行,并且不会在程序运行时更改。
什么是常量
什么是常量?常量(Constants)是编程中的一个概念,用于表示在程序执行期间值不会改变的数据。
与变量不同,常量的值是固定的,无法在代码中修改。
以下是关于常量的一些重要方面:1. 定义常量:常量在代码中被定义,并被赋予一个固定的值。
常量的定义通常与变量的定义相似,但在一些编程语言中可能会有特定的语法规则。
常量的定义一般需要指定常量的名称和值。
2. 常量的命名:常量的名称通常使用大写字母和下划线,以便与变量区分开。
命名常量时,通常使用全大写字母的“蛇形命名法”(SNAKE_CASE),例如`MAX_VALUE` 或`PI`。
这有助于在代码中清晰地识别常量,并将其与变量区分开来。
3. 常量的值:常量的值在定义后是固定的,无法更改。
例如,定义一个常量`PI` 并将其值设置为3.14159,那么在程序的执行过程中,无论如何,`PI` 的值将始终是3.14159。
4. 常量的数据类型:常量可以有不同的数据类型,例如整数、浮点数、布尔值、字符串等。
常量的数据类型决定了它可以存储的值的类型和范围。
5. 常量的作用:常量的主要作用是在程序中定义和使用固定的值。
通过使用常量,我们可以避免在代码中多次使用相同的值,并提高代码的可读性和可维护性。
常量还可以用于存储和表示程序中的重要数值,例如数学常数、配置参数、界限值等。
6. 常量与变量的区别:常量的值在定义后无法更改,而变量的值可以在程序执行过程中修改。
常量的值是固定的,而变量的值是可变的。
常量的命名通常使用大写字母,而变量的命名通常使用小写字母。
变量通常用于存储需要在程序执行期间进行计算或修改的数据,而常量用于存储不需要修改的数据。
7. 常量的全局性:常量可以具有全局作用域,这意味着它们可以在程序的任何地方访问和使用。
全局常量在整个程序中都是可见的,可以在多个函数、类或模块中使用。
8. 常量的常见用途:常量在编程中有广泛的应用。
例如,数学库常常定义数学常量(如π),以便在程序中进行数学计算。
Windows平台Python编程必会模块之pywin32
Windows平台Python编程必会模块之pywin32在Windows平台上,从原来使⽤C/C++编写原⽣EXE程序,到使⽤Python编写⼀些常⽤脚本程序,成熟的模块的使⽤使得编程效率⼤⼤提⾼了。
不过,python模块虽多,也不可能满⾜开发者的所有需求。
⽽且,模块为了便于使⽤,通常都封装过度,有些功能⽆法灵活使⽤,必须直接调⽤Windows API来实现。
要完成这⼀⽬标,有两种办法,⼀种是使⽤C编写Python扩展模块,或者就是编写普通的DLL通过python的ctypes来调⽤,但是这样就部分牺牲掉了Python的快速开发、免编译特性。
还好,有⼀个模块pywin32可以解决这个问题,它直接包装了⼏乎所有的Windows API,可以⽅便地从Python直接调⽤,该模块另⼀⼤主要功能是通过Python进⾏COM编程。
安装时可以直接使⽤pip执⾏“pip install pywin32”来安装它。
安装完毕后,在Python安装路径下的Lib\site-packages\win32可以看到所有的API⽀撑模块,Lib\site-packages\win32com下则是COM的⽀撑模块。
在Lib\site-packages下有⼀个PyWin32.CHM帮助⽂件,相信对Windows编程有⼀定基础的,看了这个帮助⽂件就能很快上⼿。
简单说,pywin32把Windows API按照功能分了⼀些⼤类,每⼀个⼤类作为⼀个模块。
以下是所有的模块:mmapfile odbc perfmon servicemanager timer win2kras win32api win32clipboard win32consolewin32cred win32crypt win32event win32evtlog win32file win32gui win32help win32inet win32jobwin32lz win32net win32pdh win32pipe win32print win32process win32profile win32ras win32securitywin32service win32trace win32transaction win32ts win32wnet winxpgui⽐如⽂件类API就在模块win32file中,进程类API在模块win32process中。
Win32程序开发入门:一个最简单的Win32程序
Win32程序开发⼊门:⼀个最简单的Win32程序⼀、什么是 Win32Win32 是指 Microsoft Windows 操作系统的 32 位环境,与 Win64 都为 Windows 常见环境。
这⾥再介绍下 Win32 Application 和 Win32 Console Application 之间的区别:1、程序不同Win32 Application 是标准 windows 程序,完全拥有 windows 的特性,可以通过⿏标点击窗⼝来完成控制。
Win32 Console Application 是控制台应⽤程序,类似于 MS-DOS 窗⼝,只能运⾏命令⾏程序,不具备消息响应机制。
2、⼊⼝函数不同Win32 Application ⼊⼝函数是 WinMain(),它具有消息响应机制,可以运⾏图形化的 C++ 程序。
Win32 Console Application ⼊⼝函数是 main(),可以访问部分 windows API 函数,如果你编写传统的 C 程序,必须建⽴ Win32 Console 程序。
⼆、最简单的程序创建⼀个 win32 应⽤程序⼯程,功能是显⽰⼀个消息框,随便提⽰⼀些⽂字就可以了。
具体的创建⼯程的步骤可以参考:。
代码如下:#include <Windows.h>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){MessageBox(NULL,TEXT("随便提⽰⼀些内容就可以了!哈哈哈!"), // 内容TEXT("这⾥是标题!"), // 标题名称0);return 0;}我们再看⼀下效果:接下来我们从头开始剖析这个简单的⼩程序。
三、分析⼀下3.1 头⽂件#include <Windows.h>windows.h 是⼀个最重要的包含⽂件,它囊括了若⼲其他 Windows 头⽂件,其中的某些头⽂件⼜包含另外的⼀些头⽂件。
python win32api 操作句柄
python win32api 操作句柄Win32 API是一种用于在Windows操作系统上进行编程的应用程序接口。
它提供了一组函数和常量,开发人员可以使用这些函数和常量来访问操作系统的功能。
其中,win32api模块是Python中用于操作句柄的一个重要模块。
句柄是一种数据结构,用于标识操作系统中的各种资源,例如窗口、文件、进程等。
通过win32api模块,开发人员可以获取、创建、操作和关闭句柄,实现对各种资源的控制和管理。
下面将列举10个使用win32api操作句柄的例子。
1. 获取窗口句柄:可以使用win32api的FindWindow函数获取指定窗口标题的句柄。
例如,可以通过以下代码获取记事本窗口的句柄:```pythonimport win32guihwnd = win32gui.FindWindow(None, "记事本")```2. 关闭窗口:可以使用win32api的PostMessage函数向指定窗口发送关闭消息,实现关闭窗口的功能。
例如,可以通过以下代码关闭记事本窗口:```pythonimport win32api, win32conwin32api.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0)```3. 获取进程句柄:可以使用win32api的OpenProcess函数获取指定进程的句柄。
例如,可以通过以下代码获取记事本进程的句柄:```pythonimport win32api, win32con, win32processpid = win32process.GetWindowThreadProcessId(hwnd)[1] hProcess = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, False, pid)```4. 读取进程内存:可以使用win32api的ReadProcessMemory函数读取指定进程的内存数据。
罗云彬的Win32汇编教程
罗云彬的Win32汇编教程之一Win32汇编的环境和基础1.32位环境简介在Dos下编汇编程序,我们可以管理系统的所有资源,我们可以改动系统中所有的内存,如自己改动内存控制块来分配内存,自己修改中断向量表来截获中断等,对其他操作也是如此,如我们对键盘端口直接操作就可以把键盘屏蔽掉,可以这样来描述Dos系统:系统只有一个特权级别,在编程上讲,任何程序和操作系统都是同级的,所以在Dos下,一个编得不好的程序会影响其他所有的程序,如一个程序把键盘口中断关掉了,所有程序就都不能从键盘获得键入的数据,直到任何一个程序重新打开键盘为止,一个程序陷入死循环,也没有其他程序可以把它终止掉。
Dos下的编程思路是“单任务”的,你只要认为你的程序会按照你的流程一步步的执行下去,不必考虑先后问题(当然程序可能会被中断打断,但你可以认为它们会把环境恢复,如果中断程序没有把环境恢复,那是他们的错)。
在内存管理方式上,Dos汇编和Win32汇编也有很多的不同:Dos工作在实模式下,我们可以寻址1M 的内存,寻址时通过段寄存器来制定段的初始地址,每个段的大小为64K,超过1M的部分,就只能把他作为XMS使用,也就是说,只能用作数据存放使用而无法在其中执行程序。
而Windows在保护模式下执行,这里所有的资源对应用程序来说都是被“保护”的:程序在执行中有级别之分,只有操作系统工作在最高级--0级中,所有应用程序都工作在3级中(Ring3),在Ring3中,你无法直接访问IO端口,无法访问其他程序运行的内存,连向程序自己的代码段写入数据都是非法的,会在Windows的屏幕上冒出一个熟悉的蓝屏幕来。
只有对Ring0的程序来说,系统才是全开放的。
在内存方面,Windows使用了处理器的分页机制,使得对应用程序来说,所有的内存都是“平坦”的,你不必用一个段寄存器去指定段的地址,因为在保护模式下,段寄存器的含义是不同的(可以参见80386手册方面的书籍),你可以直接指定一个32位的地址来寻址4GB的内存。
Win32数据类型
ACMFILTERCHOOSEHOOKPROC 指向一个程序定义函数-钩住 acmFilterChoosec 对话框 ACMFILTERENUMCB ACMFILTERTAGENUMCB ACMFORMATENUMCB ACMFORMATTAGENUMCB APPLET_PROC ATOM BOOL BOOLEAN BSTR BYTE CALINFO_ENUMPROC CALLBACK CHAR COLORREF CONST CRITICAL_SECTION CTRYID DATEFMT_ENUMPROC DESKTOPENUMPROC DLGPROC DRAWSTATEPROC DWORD
1ቤተ መጻሕፍቲ ባይዱ
EDITWORDBREAKPROC ENHMFENUMPROC ENUMRESLANGPROC ENUMRESNAMEPROC ENUMRESTYPEPROC FARPROC FLOAT FILE_SEGMENT_ELEMENT FONTENUMPROC GOBJENUMPROC GRAYSTRINGPROC HACCEL HANDLE HBITMAP HBRUSH HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HIMAGELIST HIMC HINSTANCE HKEY HKL HLOCAL HMENU
计算机中的常量
计算机中的常量在计算机科学中,常量是指在程序执行过程中其值不会发生变化的量。
常量在编程中起到了非常重要的作用,它们用于表示固定的数值、字符串或者其他数据类型。
常量的使用使得程序更加可读、可维护,并且能够提高程序的性能。
下面,我们将介绍一些常见的计算机中的常量。
1. 整数常量:整数常量是指不带小数部分的数字。
在计算机中,我们经常使用整数常量来表示年龄、数量、分数等。
例如,常量20表示一个人的年龄为20岁,常量100表示一个班级的学生数量为100人。
2. 浮点数常量:浮点数常量是指带有小数部分的数字。
在计算机中,我们使用浮点数常量来表示实数,如长度、重量、温度等。
例如,常量3.14表示圆周率π的近似值,常量2.718表示自然对数的底数e的近似值。
3. 字符常量:字符常量是指由一个字符组成的常量。
在计算机中,我们使用字符常量来表示字母、数字、符号等。
例如,常量'A'表示大写字母A,常量'5'表示数字5,常量'!'表示感叹号。
4. 字符串常量:字符串常量是指由多个字符组成的常量。
在计算机中,我们使用字符串常量来表示文本、句子、文档等。
例如,常量"Hello, world!"表示一个简单的问候语,常量"Welcome to the worldof programming!"表示欢迎来到编程的世界!5. 布尔常量:布尔常量是指只有两个取值的常量,即真(true)和假(false)。
在计算机中,我们使用布尔常量来表示逻辑判断的结果。
例如,常量true表示一个条件成立,常量false表示一个条件不成立。
6. 空常量:空常量是指没有值的常量。
在计算机中,我们使用空常量来表示空对象、空数组等。
例如,常量null表示一个空对象,常量[]表示一个空数组。
7. 符号常量:符号常量是指在程序中定义的具有固定值的常量。
在计算机中,我们使用符号常量来表示一些固定的数值或字符串,以提高程序的可读性和可维护性。
Windows数据类型及其常量
BOOL布尔类型BSTR32位字符指针BYTE8位无符号整数COLORREF32位颜色DWORD32位无符号整数或地址段和它的偏移量LONG32位有符号整数LPARAM32位传给窗口过程或回调函数的参数LPCSTR指向常量字符串的32位指针LPSTR指向字符串的32位指针LPCTSTR指向常量字符串的32位指针,适合于Unicode 和DBCSLPTSTR指向字符串的32位指针,适合于Unicode和DBCSLPVOID指向空类型的32位指针LRESULT窗口过程或回调函数的32位返回值UINT(windows版本3.0和3.1)16位无符号整数,win32系统下是32位无符号整数WNDPROC指向窗口过程的32位指针WORD16位无符号整数WPARAM作为传给窗口过程或回调函数的参数,(windows版本3.0和3.1)16位,win32系统下是32位MFC类库还包括的数据类型:POSITION该值用来表示集合中一个元素的位置,被MFC 集合类使用LPCRECT指向常型RECT结构的32位指针为便于开发Windows应用程序,Windows的开发者新定义了一些数据类型。
这些数据类型或是与C/C++中已有的数据类型同义,或是一些新的结构数据类型。
引入这些类型的主要目的是为便于程序员开发Windows应用程序,同时也是为了增强程序的可读性;另一个目的是为了便于程序将来能被移植到其它种类的计算机平台上或适应Windows将来的新版本的变化。
例如,本教程目前使用16位API (Application Program Interface),现在Windows的版本使用32位API,只要将HANDLE等句柄类型定义为32位长,然后重新编译程序,就可以很方便地将一个使用16位API的Windows应用程序改为使用32位API的程序,使其能运行在32位API Windows 上。
大部分的数据类型在Windows.h中定义,下面是在这个文件中定义的部分类型:#define PASCAL pascal#define NEAR near#define FAR fartypedef unsigned char BYTEtypedef unsigned short WORDtypedef unsigned long DWORDtypedef long LONGtypedef char*PSTRtypedef char NEAR*NPSTRtypedef char FAR*LPSTRtypedef void VOIDtypedef int*LPINTtypedef LONG(PASCAL FAR* FARPROC)();在Windows.h中,使用typedef还定义了一些新的结构类型。
Win32 Api编程指南
MessageBox( NULL, "Goodbye, cruel world!", "Note", _OK ); return 0; }
实际上是发送给窗口的窗口过程函数处理这个窗口也许是我们的主窗口也许是别的窗口或者仅仅是一个操作很多情况下窗口的创建是不显示在屏幕上的可能由系统隐式的创建或者由另一个程序创建而这些都不需要我们操心因为我们通信的途径就是通过发送和接受消息其余的事情操作系统会为我们打理
Win32 API 编程指南( 1 )
其实只要记住几个要点也就很容易理解了。LP 前缀代表指向长整形的指针( long pointer )。在 Win32 中,long 是一种古老的类型了,这里不用细说。如果您不知道指针是什么,您有两种选择:1 )去找本 C 的书
读一读。 2 )继续读下去,可能会弄得一团糟。我强烈建议您选择第一种,但还是有很多人坚持选择第二种( 我 已经给了您建议哦: ) 别怪我没提醒您! )
CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL, hInstance, NULL ); if ( hwnd == NULL ) { MessageBox( NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK ); return 0; }
最简单的 Win32 程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Public Const PIPE_ACCESS_OUTBOUND = &H2
Public Const PIPE_ACCESS_DUPLEX = &H3
Public Const PIPE_CLIENT_END = &H0
Public Const FILE_FLAG_OVERLAPPED = &H40000000
Public Const FILE_FLAG_NO_BUFFERING = &H20000000
Public Const FILE_FLAG_RANDOM_ACCESS = &H10000000
Public Const FILE_FLAG_SEQUENTIAL_SCAN = &H8000000
Public Const SID_RECOMMENDED_SUB_AUTHORITIES = (1)
Public Const SidTypeUser = 1
Public Const SidTypeGroup = 2
Public Const SidTypeDomain = 3
Public Const SidTypeAlias = 4
Public Const DOMAIN_GROUP_RID_ADMINS = &H200
Public Const DOMAIN_GROUP_RID_USERS = &H201
Public Const DOMAIN_GROUP_RID_GUESTS = &H202
Public Const DOMAIN_ALIAS_RID_ADMINS = &H220
Public Const PIPE_TYPE_BYTE = &H0
Public Const PIPE_TYPE_MESSAGE = &H4
Public Const PIPE_UNLIMITED_INSTANCES = 255
Public Const SECURITY_CONTEXT_TRACKING = &H40000
■■■■常量声明■■■■
"""""""""""""""""""""""""""""""""""""""""""""""""""""""
Public Const ANYSIZE_ARRAY = 1
Public Const DELETE = &H10000
Public Const READ_CONTROL = &H20000
Public Const PST_TCPIP_TELNET = &H102&
Public Const PST_X25 = &H103&
Public Const PCF_DTRDSR = &H1&
Public Const PCF_RTSCTS = &H2&
Public Const PCF_RLSD = &H4&
Public Const SECURITY_SERVICE_RID = &H6
Public Const SECURITY_ANONYMOUS_LOGON_RID = &H7
Public Const SECURITY_LOGON_IDS_RID = &H5
Public Const SECURITY_LOCAL_SYSTEM_RID = &H12
Public Const STANDARD_RIGHTS_ALL = &H1F0000
Public Const SPECIFIC_RIGHTS_ALL = &HFFFF
Public Const SID_REVISION = (1)
Public Const SID_MAX_SUB_AUTHORITIES = (15)
Public Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Public Const STANDARD_RIGHTS_EXECUTE = (READ_CONTROL)
Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Public Const SECURITY_NT_NON_UNIQUE = &H15
Public Const SECURITY_BUILTIN_DOMAIN_RID = &H20
Public Const DOMAIN_USER_RID_ADMIN = &H1F4
Public Const DOMAIN_USER_RID_GUEST = &H1F5
Public Const PCF_SPECIALCHARS = &H100&
Public Const PCF_16BITMODE = &H200&
Public Const SP_PARITY = &H1&
Public Const SP_BAUD = &H2&
Public Const SP_DATABITS = &H4&
Public Const FILE_FLAG_DELETE_ON_CLOSE = &H4000000
Public Const FILE_FLAG_BACKUP_SEMANTICS = &H2000000
Public Const FILE_FLAG_POSIX_SEMANTICS = &H1000000
Public Const SP_STOPBITS = &H8&
Public Const SP_HANDSHAKING = &H10&
Public Const SP_PARITY_CHECK = &H20&
Public Const SP_RLSD = &H40&
Public Const BAUD_075 = &H1&
Public Const SidTypeWellKnownGroup = 5
Public Const SidTypeDeletedAccount = 6
Public Const SidTypeInvalid = 7
Public Const SidTypeUnknown = 8
Public Const SECURITY_NULL_RID = &H0
Public Const BAUD_110 = &H2&
Public Const BAUD_134_5 = &H4&
Public Const BAUD_150 = &H8&
Public Const BAUD_300 = &H10&
Public Const BAUD_600 = &H20&
Public Const BAUD_1200 = &H40&
Public Const SECURITY_DIALUP_RID = &H1
Public Const SECURITY_NETWORK_RID = &H2
Public Const SECURITY_BATCH_RID = &H3
Public Const SECURITY_INTERACTIVE_RID = &H4
Public Const PST_UNSPECIFIED = &H0&
Public Const PST_RS232 = &H1&
Public Const PST_PARALLELPORT = &H2&
Public Const PST_RS422 = &H3&
Public Const PST_RS423 = &H4&
Public Const SE_GROUP_LOGON_ID = &HC0000000
Public Const FILE_BEGIN = 0
Public Const FILE_CURRENT = 1
Public Const FILE_END = 2
Public Const FILE_FLAG_WRITE_THROUGH = &H80000000
Public Const PST_RS449 = &H5&
Public Const PST_FAX = &H21&
Public Const PST_SCANNER = &H22&
Public Const PST_NETWORK_BRIDGE = &H100&
Public Const PST_LAT = &H101&
Public Const SE_GROUP_MANDATORY = &H1