c/c++ windows api基础知识等

常用数据类型

WORD:

16 位无符号整形数据

DWORD:

32 位无符号整型数据(DWORD32)

DWORD64:

64 位无符号整型数据

INT:

32 位有符号整型数据类型

INT_PTR:

指向 INT 数据类型的指针类型

INT32:

32 位符号整型

INT64:

64 位符号整型

UINT:

无符号 INT

LONG:

32 位符号整型(LONG32)

ULONG:

无符号 LONG

LONGLONG:

64 位符号整型(LONG64)

SHORT:

无符号短整型(16 位)

LPARAM:

消息的 L 参数

WPARAM:

消息的 W 参数

HANDLE:

对象的句柄,最基本的句柄类型

HICON:

图标的句柄

HINSTANCE:

程序实例的句柄

HKEY:

注册表键的句柄

HMODULE:

模块的句柄

HWND:

窗口的句柄

LPSTR:

字符指针,也就是字符串变量

LPCSTR:

字符串常量

LPCTSTR:

根据环境配置,如果定义了 UNICODE 宏,则是 LPCWSTR 类型,否则则为 LPCSTR 类型

LPCWSTR:

UNICODE 字符串常量

LPDWORD:

指向 DWORD 类型数据的指针

CHAR:

8 比特字节

TCHAR:

如果定义了 UNICODE,则为 WCHAR,否则为 CHAR

UCHAR:

无符号 CHAR

WCHAR:

16 位 Unicode 字符

BOOL:

布尔型变量

BYTE:

字节类型(8 位)

CONST:

常量

FLOAT:

浮点数据类型

SIZE_T:

表示内存大小,以字节为单位,其最大值是 CPU 最大寻址范围

VOID:

无类型,相当于标准 C 语言中的 void

一些简单函数和例子

CopyMemory:

内存复制

MessageBoxW(hWnd, msgText, msgTitle, MB_OK);

弹出框(父窗体,内容,标题,按钮)

CreateFile :打开句柄
ReadFile:读取文件

01打开句柄 读取文件
#include <Windows.h>
#include <stdio.h>
#define BUF_SIZE 256 //设置读取长度
int main() {

	HANDLE hFileRead;//打开之后会获得一个句柄

	DWORD nIn;//实际读取大小
	CHAR buffer[BUF_SIZE];


	hFileRead = CreateFile(L"d.TXT",//文件名
		GENERIC_READ,//读操作
		FILE_SHARE_READ,//共享读
		NULL,//安全属性
		OPEN_EXISTING,//打开文件,不是创建
		FILE_ATTRIBUTE_NORMAL,//设置文件属性:普通文件
		NULL//指定模板
	);

	//是否是一个无效的句柄
	if (hFileRead == INVALID_HANDLE_VALUE) {
	
		//获取出错信息
         printf( "%x",GetLastError());
		 return -1;
	}
	else
	{
		while (ReadFile(hFileRead, //文件句柄
			buffer, //读取内容
			BUF_SIZE,//读取大小
			&nIn,//实际读取
			NULL
		)&& nIn>0)//说明读到了
		{

			printf("%s", buffer);//打印出来
		}
	}

	CloseHandle(hFileRead);//关闭句柄
	return 0;
}

GetFileAttributesEx:读取文件信息
FileTimeToLocalFileTime:把文件时间转化成本地时间
FileTimeToSystemTime:把本地时间转换成系统时间
WIN32_FILE_ATTRIBUTE_DATA 文件属性的struct

02读取文件结构

#include <Windows.h>
#include <stdio.h>


void ShowFileTime(PFILETIME lptime) {

	FILETIME ftLocal;//转换后的时间本地时间
	SYSTEMTIME st;//系统时间


	//把文件时间转化成本地时间 
	FileTimeToLocalFileTime(lptime, //文件时间
		&ftLocal //本地时间
	);

	//把本地时间转换成系统时间
	FileTimeToSystemTime(&ftLocal,//本地时间
		&st//系统时间
	);

	printf("%d-%d-%d %d:%d:%d", st.wYear, st.wYear, st.wDay, st.wHour, st.wMinute, st.wMonth);
}

int main(){

	WIN32_FILE_ATTRIBUTE_DATA wfad;//接收文件属性

	//获取
	if (!GetFileAttributesEx(
		L"main.c",//文件路径
		GetFileExInfoStandard,//普通的文件
		&wfad//接收文件属性
	)) {
		printf("获取文件失败!%d", GetLastError());
	}

	printf("创建时间:\t");
	ShowFileTime(&wfad.ftCreationTime);
	printf("访问时间:\t");
	ShowFileTime(&wfad.ftLastAccessTime);
	printf("修改时间:\t");
	ShowFileTime(&wfad.ftLastWriteTime);


	system("pause");
	return 0;
}

GetSystemDirectory:获取系统目录
CreateFile:获取句柄
WriteFile:写文件
CloseHandle:关闭句柄

获取系统目录并且往本地写文件


#include <Windows.h>
#include <stdio.h>

int main() {

	TCHAR sxSystemDir[MAX_PATH];//定义一个windows数组 长度260

	GetSystemDirectory(sxSystemDir, //接收windows系统目录
		MAX_PATH//长度
	);

	DWORD dwWritten;//真正的写了多少

	HANDLE hFile;

	hFile = CreateFile(
		L"测试.txt",
		GENERIC_WRITE,//往里面写
		0,
		NULL,//默认安全属性
		CREATE_ALWAYS,//如果存在删除
		FILE_ATTRIBUTE_NORMAL,//创建一个默认属性的
		NULL
	);

	//是否创建成功
	if (hFile != INVALID_HANDLE_VALUE) {
	
		if (!WriteFile(hFile,//要操作的文件句柄
			sxSystemDir,//地址和内容
			lstrlen(sxSystemDir),//
			&dwWritten,//写了多少
			NULL
		)) {

			
		}
			
	}
	CloseHandle(hFile);//关闭句柄

	system("pause");
	return 0;
}

RegisterClassEx:窗口类
CreateWindow:创建一个窗口
GetMessage:获取windows消息

#include <Windows.h>
创建一个窗口


//电脑操作》windows消息》消息过程》windows消息》消息过程
LRESULT CALLBACK MainWinProo(HWND hwnd, UINT uMsg, WPARAM wPARAN, LPARAM lParam);

HINSTANCE hinst;//实例句柄

int WINAPI main(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdsh) {
	
	
	hinst = hinstance;
	HWND hwnd;//窗口句柄

	MSG msg;//windows消息
	BOOL fGotMessage;//是否成功


	//定义窗口类
	WNDCLASSEX wcx;
	wcx.cbSize = sizeof(wcx);//窗口大小
	wcx.style = CS_HREDRAW | CS_VREDRAW;//窗口改变重绘
	wcx.lpfnWndProc = MainWinProo;//窗口过程
	wcx.cbClsExtra = 0;//
	wcx.cbWndExtra = 0;
	wcx.lpszClassName = L"窗口名称";//窗口名称
	wcx.hInstance = hinstance;//实例句柄
	wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION);//图标
	wcx.hCursor = LoadCursor(NULL, IDC_ARROW);//鼠标指针
	wcx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//白色背景
	wcx.lpszMenuName = NULL;//没有下拉菜单
	//wcx.hIconSm= 小图标

	//可以注册成功吗
	if (!RegisterClassEx(&wcx)) {
	
		//注册窗口类
	}
	//使用窗口类创建窗口
	hwnd = CreateWindow(
		L"窗口名称",
		L"HELLO",
		WS_OVERLAPPEDWINDOW,//窗口样式
		CW_USEDEFAULT,//窗口位置
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		(HWND)NULL,//父窗口
		(HMENU)NULL,//没有菜单
		hinstance,//实例句柄
		(LPVOID)NULL//
	);

	//成功
	if (!hwnd) {

		ShowWindow(hwnd, nCmdsh);
		UpdateWindow(hwnd);

		while ((fGotMessage=GetMessage(&msg,(HWND)NULL,0,0))!=0)
		{

			TranslateMessage(&msg);//翻译
			DispatchMessageW(&msg);//转发
		}
	}

	return 0;
}

//窗口过程函数,处理消息
LRESULT CALLBACK MainWinProo(HWND hwnd, UINT uMsg, WPARAM wPARAN, LPARAM lParam) {

	switch (uMsg)
	{

	case  WM_DESTROY://关闭
		//ExitThread(0);//关闭主线程
		PostQuitMessage(0);//发送一个退出消息
		break;


	default:
		return DefWindowProc(hwnd, uMsg, wPARAN, lParam);//转发给windows处理
		break;
	}

}

MultiByteToWideChar :ASSIC转unicode
WideCharToMultiByte :unicode转ASSIC


字符转换

#include <Windows.h>
#include <stdio.h>
#include<locale.h>


int main() {

	setlocale(LC_ALL, "");//设置地域环境


	//多字节字符串转宽字节串
	char sText[] = "多字节字符串转宽字节串";
	DWORD dwNum;
	dwNum = MultiByteToWideChar(
	CP_ACP,//被转换的是阿si可马
		0,//控制标准
		sText,
		-1,
		NULL,//转换之后的存储位置
		0//转换之后多大
	);//

	wchar_t* pwText;
	pwText = new wchar_t[dwNum];

	MultiByteToWideChar(
		CP_ACP,//被转换的是阿si可马
		0,//控制标准
		sText,
		-1,
		pwText,//转换之后的存储位置
		0//转换之后多大
	);//
	delete[] pwText;



	//宽字符转多字节字符串
	wchar_t wTest[] =L"宽字符转多字节字符串" ;
	dwNum = WideCharToMultiByte(
		CP_ACP,//被转换的是阿si可马
		0,//控制标准
		wTest,
		-1,
		NULL,//转换之后的存储位置
		0,//转换之后多大
		NULL,
		NULL
	);//

	char *psText; //a版本的
	psText = new char[dwNum];

	WideCharToMultiByte(
		CP_OEMCP,//被转换的是unicode
		0,//控制标准
		wTest,
		-1,
		psText,//转换之后的存储位置
		0,//转换之后多大
		NULL,
		NULL
	);//

	system("pause");
	return 0;
}

GetLogicalDriveStringsA:获取盘符名称
FindFirstVolume:获取真正的盘符名称第一个
FindNextVolume:获取真正的盘符名称下一个

#include <Windows.h>
#include <stdio.h>

#define BUFSIZE 1024
int main() {

	CHAR szLogicalDriveStrings[BUFSIZE];
	ZeroMemory(szLogicalDriveStrings, BUFSIZE);//清0可以能有垃圾数据

	GetLogicalDriveStringsA(BUFSIZE-1,//给/0留一个位置
		szLogicalDriveStrings
	);

	PCHAR szDrive;//定义一个字符指针
	szDrive = (PCHAR)szLogicalDriveStrings;//指向第一个
	do
	{

		//printf("%s\n", szDrive);
		szDrive += (lstrlenA(szDrive) + 1);
		
	} while (*szDrive!='\0');//不等于\0的话,说明数据没有了



	TCHAR buf[BUFSIZE];
	HANDLE hVol;
	BOOL bFlag;

	hVol = FindFirstVolume(buf, BUFSIZE);//返回真正的设备名,找第一个

	//是否出错
	if (hVol == INVALID_HANDLE_VALUE) {
	
	}
	printf("%ls\n", buf);
	while (FindNextVolume(hVol, buf, BUFSIZE))//找下一个
	{
		printf("%ls\n", buf);
	}
	bFlag = FindVolumeClose(hVol);
	system("pause");
	return 0;
}```

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值