zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

GetStdHandle获取标准设备句柄

设备标准 获取 句柄
2023-09-27 14:28:41 时间

 

#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)  //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;
}