常用数据类型
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;
}```