GetStdHandle获取标准设备句柄

时间:2022-12-31 07:58:42

GetStdHandle获取标准设备句柄

 

#include <stdio.h>  
#include <windows.h>

int main(void) {

TCHAR ch[] = __TEXT("我是中国人");
int len = lstrlen(ch);//返回字符长度
//返回指定字符串的字节长度(ANSI版)或字符长度(双字节标准版);其中不包括终止NULL字符

DWORD dwChars;

HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准设备句柄
//标准设备(标准输入、标准输出或标准错误)
//包含在头文件windows.h中
//参数:STD_INPUT_HANDLE 标准输入句柄
// STD_OUTPUT_HANDLE 标准输出句柄
// STD_ERROR_HANDLE 错误的设备句柄
//返回值:如果该函数成功,则返回值为指定设备的句柄 HANDLE
// 如果函数失败,则返回值为 INVALID_HANDLE_VALUE。 要获得更多的错误信息,请调用 GetLastError
// 如果应用程序没有关联的标准句柄(例如在交互式桌面上运行的服务),并且尚未重定向这些句柄,则返回值为 NULL

if (hStdout == INVALID_HANDLE_VALUE)
{
printf("INVALID_HANDLE_VALUE");
return -1;
}



BOOL b = WriteConsole(hStdout, ch, len, &dwChars, NULL);//从当前光标位置写入一个字符串到屏幕缓冲区
//参数1:控制台屏幕缓冲区的句柄。该句柄必须具有的GENERIC_WRITE的访问权限
//参数2:要写入控制台屏幕缓冲区字符的缓冲区的指针
//参数3:要写入的字符数。如果指定的字符数的总大小超过可用的堆,该函数会ERROR_NOT_ENOUGH_MEMORY失败
//参数4:返回实际输出字符串的长度-->指针 可以NULL
//参数5:备用参数 NULL
//返回值:如果函数成功,则返回值为非零值。
// 如果该函数失败,则返回值为零。要获取错误信息,请调用GetLastError

int n = getchar();
return 0;
}