WindowsAPI GetLastError函数信息只报ID号,将错误信息写一个头文件(“GetLastError.h”)来实现,用一个函数(RetGetLastError(INT))解决问题

对于经常要查GetLastError报错信息的朋友来说比较麻烦,我花了一点时间写了一个头文件,将错误代码用一个结构体和一个函数来实现,方法比较简单。

现将实现方法列如下:


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

LPTSTR RetGetLastError(int GetLastErrorNo);
//1.第一步构建结构体保存报警错误信息
typedef struct _tag_GetlastError
{
   
	DWORD ID; //错误代码ID
	TCHAR szInfo[400]; //错误代码信息
}MyGetLastError;

/*typedef struct _tag_GetLastError
{
	DWORD ID;
	TCHAR szInfo[256];
}GetLastError *PGetLastError;
*/
//错误报警信息,ID和错误信息
MyGetLastError g_GetLastError[] = {
   
{
   0   ,TEXT("操作成功完成.")},
{
   1   ,TEXT("功能错误.")},
{
   2   ,TEXT("系统找不到指定的文件.")},
{
   3   ,TEXT("系统找不到指定的路径.")},
{
   4   ,TEXT("系统无法打开文件.")},
//....这里省下空间说问题
//附件有后面有完整代码实现
{
   11030,TEXT("在 QOS 提供程序特定缓冲区中发现一个无效的成形速率对象.")},
{
   11031,TEXT(" 在 QOS 提供程序特定缓冲区中发现一个保留的策略因素  ")}
};
//2.用一个RetGetLastError函数来实现
LPTSTR RetGetLastError(INT GetLastErrorNo)
{
   
	static LPTSTR szTemInfo[512] = {
   0};
	if(0 == GetLastErrorNo) //操作成功
		{
   
			wsprintf((LPTSTR)szTemInfo,TEXT("GetLastError成功代码:%d,成功信息:%s"),\
			GetLastErrorNo,g_GetLastError[0].szInfo);
			return (LPTSTR)szTemInfo;
		}
	for(int index = 1; index < sizeof(g_GetLastError)/sizeof(g_GetLastError[0]);index++ )
	{
   
		//从1开始全是错误信息
		if(GetLastErrorNo == g_GetLastError[index].ID)
			{
   
				wsprintf((LPTSTR)szTemInfo,TEXT("GetLastError错误代码:%d,错误信息:%s"),\
				GetLastErrorNo,g_GetLastError[index].szInfo);
				break;
			}
	}
	
	return (LPTSTR)szTemInfo;
}

以下是使用方法

#include "GetLastError.h"
int main()
{
   
	//使用方法
	MessageBox(NULL,RetGetLastError(GetLastError()),TEXT("error info",MB_OK);
	return 0;
}

下面是GetLastError.h头文件实现(详细)

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

LPTSTR RetGetLastError(int GetLastErrorNo);

typedef struct _tag_GetlastError
{
   
	DWORD ID; //错误代码ID
	TCHAR szInfo[400]; //错误代码信息
}MyGetLastError;

/*typedef struct _tag_GetLastError
{
	DWORD ID;
	TCHAR szInfo[256];
}GetLastError *PGetLastError;
*/
//错误报警信息,ID和错误信息
MyGetLastError g_GetLastError[] = {
   
{
   0   ,TEXT("操作成功完成.")},
{
   1   ,TEXT("功能错误.")},
{
   2   ,TEXT("系统找不到指定的文件.")},
{
   3   ,TEXT("系统找不到指定的路径.")},
{
   4   ,TEXT("系统无法打开文件.")},
{
   5   ,TEXT("拒绝访问.")},
{
   6   ,TEXT("句柄无效.")},
{
   7   ,TEXT("存储控制块被损坏.")},
{
   8   ,TEXT("存储空间不足,无法处理此命令.")},
{
   9   ,TEXT("存储控制块地址无效.")},
{
   10  ,TEXT("环境错 误.")},
{
   11  ,TEXT("试图加载格式错误的程序.")},
{
   12  ,TEXT("访问码无效.")},
{
   13  ,TEXT("数据无效.")},
{
   14  ,TEXT("存储器不足,无法完成此 操作.")},
{
   15  ,TEXT("系统找不到指定的驱动器.")},
{
   16  ,TEXT("无法删除目录.")},
{
   17  ,TEXT("系统无法将文件移到不同的驱动器.")},
{
   18  ,TEXT("没有更多文件.")},
{
   19  ,TEXT("介质受写入保护.")},
{
   20  ,TEXT("系统找不到指定的设备.")},
{
   21  ,TEXT("设备未就绪.")},
{
   22  ,TEXT("设备不识 别此命令.")},
{
   23  ,TEXT("数据错误(循环冗余检查).")},
{
   24  ,TEXT("程序发出命令,但命令长度不正确.")},
{
   25  ,TEXT("驱动器无法找出磁盘上 特定区域或磁道的位置.")},
{
   26  ,TEXT("无法访问指定的磁盘或软盘.")},
{
   27  ,TEXT("驱动器找不到请求的扇区.")},
{
   28  ,TEXT("打印机缺纸.")},
{
   29  ,TEXT("系统无法写入指定的设备.")},
{
   30  ,TEXT("系统无法从指定的设备上读取.")},
{
   31  ,TEXT("连到系统上的设备没有发挥作用.")},
{
   32  ,TEXT("进程无法 访问文件,因为另一个程序正在使用此文件.")},
{
   33  ,TEXT("进程无法访问文件,因为另一个程序已锁定文件的一部分.")},
{
   36  ,TEXT("用来共享的打开文 件过多.")},
{
   38  ,TEXT("到达文件结尾.")},
{
   39  ,TEXT("磁盘已满.")},
{
   50  ,TEXT("不支持网络请求.")},
{
   51  ,TEXT("远程计算机不可用 .")},
{
   52  ,TEXT(" 在网络上已有重复的名称.")},
{
   53  ,TEXT("找不到网络路径.")},
{
   54  ,TEXT("网络忙.")},
{
   55  ,TEXT("指定的网络资源或设备不再可用.")},
{
   56  ,TEXT("已到达网络 BIOS 命令限制.")},
{
   57  ,TEXT("网络适配器硬件出错.")},
{
   58  ,TEXT("指定的服务器无法运行请求的操作.")},
{
   59  ,TEXT("发生意 外的网络错误.")},
{
   60  ,TEXT("远程适配器不兼容.")},
{
   61  ,TEXT("打印机队列已满.")},
{
   62  ,TEXT("无法在服务器上获得用于保存待打印文件的空 间.")},
{
   63  ,TEXT("删除等候打印的文件.")},
{
   64  ,TEXT("指定的网络名不再可用.")},
{
   65  ,TEXT("拒绝网络访问.")},
{
   66  ,TEXT("网络资源类型 错误.")},
{
   67  ,TEXT("找不到网络名.")},
{
   68  ,TEXT("超过本地计算机网卡的名称限制.")},
{
   69  ,TEXT("超出网络 BIOS 会话限制.")},
{
   70  ,TEXT("远程服务器已暂停,或正在启动过程中.")},
{
   71  ,TEXT("当前已无法再同此远程计算机连接,因为已达到计算机的连接数目极限.")},
{
   72  ,TEXT("已暂停指 定的打印机或磁盘设备.")},
{
   80  ,TEXT("文件存在.")},
{
   82  ,TEXT("无法创建目录或文件.")},
{
   83  ,TEXT("INT 24 失败.")},
{
   84  ,TEXT("无法取得处理此请求的存储空间.")},
{
   85  ,TEXT("本地设备名已在使用中.")},
{
   86  ,TEXT("指定的网络密码错误.")},
{
   87  ,TEXT("参数错误.")},
{
   88  ,TEXT("网络上发生写入错误.")},
{
   89  ,TEXT("系统无法在此时启动另一个进程.")},
{
   100 ,TEXT("无法创建另一个系统信号灯.")},
{
   101 ,TEXT("另一个进程 拥有独占的信号灯.")},
{
   102 ,TEXT("已设置信号灯且无法关闭.")},
{
   103 ,TEXT("无法再设置信号灯.")},
{
   104 ,TEXT("无法在中断时请求独占的信 号灯.")},
{
   105 ,TEXT("此信号灯的前一个所有权已结束.")},
{
   107 ,TEXT("程序停止,因为替代的软盘未插入.")},
{
   108 ,TEXT("磁盘在使用中,或 被另一个进程锁定.")},
{
   109 ,TEXT("管道已结束.")},
{
   110 ,TEXT("系统无法打开指定的设备或文件.")},
{
   111 ,TEXT("文件名太长.")},
{
   112 ,TEXT(" 磁盘空间不足.")},
{
   113 ,TEXT("无法再获得内部文件的标识.")},
{
   114 ,TEXT("目标内部文件的标识不正确.")}, 
{
   117 ,TEXT("应用程序制作的 IOCTL 调用错误.")},
{
   118 ,TEXT("验证写入的切换参数值错误.")},
{
   119 ,TEXT("系统不支持请求的命令.")},
{
   120 ,TEXT("此功能只被此系 统支持.")},
{
   121 ,TEXT("信号灯超时时间已到.")},
{
   122 ,TEXT("传递到系统调用的数据区太小.")},
{
   123 ,TEXT("文件名、目录名或卷标语法不正 确.")},
{
   124 ,TEXT("系统调用级别错误.")},
{
   125 ,TEXT("磁盘没有卷标.")},
{
   126 ,TEXT("找不到指定的模块.")},
{
   127 ,TEXT("找不到指定 的程序.")},
{
   128 ,TEXT("没有等候的子进程.")},
{
   130 ,TEXT("试图使用操作{而非原始磁盘 I/O)的已打开磁盘分区的文件句柄.")},
{
   131 ,TEXT(" 试图移动文件指针到文件开头之前.")},
{
   132 ,TEXT("无法在指定的设备或文件上设置文件指针.")},
{
   133 ,TEXT("包含先前加入驱动器的驱动器无法使用 JOIN 或 SUBST 命令.")},
{
   134 ,TEXT("试图在已被合并的驱动器上使用 JOIN 或 SUBST 命令.")},
{
   135 ,TEXT("试图在已 被合并的驱动器上使用 JOIN 或 SUBST 命令.")},
{
   136 ,TEXT("系统试图解除未合并驱动器的 JOIN.")},
{
   137 ,TEXT("系统试图解除 未替代驱动器的 SUBST.")},
{
   138 ,TEXT("系统试图将驱动器合并到合并驱动器上的目录.")},
{
   139 ,TEXT("系统试图将驱动器替代为替代驱动器上 的目录.")},
{
   140 ,TEXT("系统试图将驱动器合并到替代驱动器上的目录.")},
{
   141 ,TEXT("系统试图替代驱动器为合并驱动器上的目录.")},
{
   142 ,TEXT(" 系统无法在此时运行 JOIN 或 SUBST.")},
{
   143 ,TEXT("系统无法将驱动器合并到或替代为相同驱动器上的目录.")},
{
   144 ,TEXT("目录并非 根目录下的子目录.")},
{
   145 ,TEXT("目录非空.")},
{
   146 ,TEXT("指定的路径已在替代中使用.")},
{
   147 ,TEXT("资源不足,无法处理此命令.")},
{
   148 ,TEXT(" 指定的路径无法在此时使用.")},
{
   149 ,TEXT("企图将驱动器合并或替代为驱动器上目录是上一个替代的目标的驱动器.")},
{
   150 ,TEXT("系统跟踪信息未 在 CONFIG.SYS 文件中指定,或不允许跟踪.")},
{
   151 ,TEXT("为 DosMuxSemWait 指定的信号灯事件个数错误.")},
{
   152 ,TEXT("DosMuxSemWait 不可运行,已设置过多的信号灯.")},
{
   153 ,TEXT("DosMuxSemWait 清单错误.")},
{
   154 ,TEXT("输入的卷标超过目标文件系统的长度限制 .")},
{
   155 ,TEXT("无法创建另一个线程.")},
{
   156 ,TEXT("接收进程已拒绝此信号.")},
{
   157 ,TEXT("段已被放弃且无法锁定.")},
{
   158 ,TEXT("段已解除锁定.")},
{
   159 ,TEXT("线程标识的地址错误.")},
{
   160 ,TEXT("传递到 DosExecPgm 的参数字符串错误.")},
{
   161 ,TEXT("指 定的路径无效.")},
{
   162 ,TEXT("信号已暂停.")},
{
   164 ,TEXT("无法在系统中创建更多的线程.")},
{
   167 ,TEXT("无法锁定文件区域.")},
{
   170 ,TEXT("请求的资源在使用中.")},
{
   173 ,TEXT("对于提供取消区域进行锁定的请求不明显.")},
{
   174 ,TEXT("文件系统不支持锁定类型的最小单元更改.")},
{
   180 ,TEXT("系统检测出错误的段号.")},
{
   183 ,TEXT("当文件已存在时,无法创建该文件.")},
{
   186 ,TEXT("传递的标志错误.")},
{
   187 ,TEXT("找不到指定的系 统信号灯名称.")},
{
   196 ,TEXT("操作系统无法运行此应用程序.")},
{
   197 ,TEXT("操作系统当前的配置不能运行此应用程序.")},
{
   199 ,TEXT("操作 系统无法运行此应用程序.")},
{
   200 ,TEXT("代码段不可大于或等于 64K.")},
{
   203 ,TEXT("操作系统找不到已输入的环境选项.")},
{
   205 ,TEXT("命令子树中的进程没有信号处理程序.")},
{
   206 ,TEXT("文件名或扩展名太长.")},
{
   207 ,TEXT("第 2 环堆栈已被占用.")},
{
   208 ,TEXT("没有正 确输入文件名通配符 * 或 ?,或指定过多的文件名通配符.")},
{
   209 ,TEXT("正在发送的信号错误.")},
{
   210 ,TEXT("无法设置信号处理程序.")},
{
   212 ,TEXT(" 段已锁定且无法重新分配.")},
{
   214 ,TEXT("连到该程序或动态链接模块的动态链接模块太多.")},
{
   215 ,TEXT("无法嵌套调用 LoadModule.")},
{
   230 ,TEXT(" 管道状态无效.")},
{
   231 ,TEXT("所有的管道实例都在使用中.")},
{
   232 ,TEXT("管道正在关闭中.")},
{
   233 ,TEXT("管道的另一端上无任何进程.")},
{
   234 ,TEXT("更多数据可用.")},
{
   240 ,TEXT("取消会话.")},
{
   254 ,TEXT("指定的扩展属性名无效.")},
{
   255 ,TEXT("扩展属性不一致.")},
{
   258 ,TEXT("等 待的操作过时.")},
{
   259 ,TEXT("没有可用的数据了.")},
{
   266 ,TEXT("无法使用复制功能.")},
{
   267 ,TEXT("目录名无效.")},
{
   275 ,TEXT("扩 展属性在缓冲区中不适用.")},
{
   276 ,TEXT("装在文件系统上的扩展属性文件已损坏.")},
{
   277 ,TEXT("扩展属性表格文件已满.")},
{
   278 ,TEXT("指 定的扩展属性句柄无效.")},
{
   282 ,TEXT("装入的文件系统不支持扩展属性.")},
{
   288 ,TEXT("企图释放并非呼叫方所拥有的多用户终端运行程序.")},
{
   298 ,TEXT("发向信号灯的请求过多.")},
{
   299 ,TEXT("仅完成部分的 ReadProcessMemoty 或 WriteProcessMemory 请求.")},
{
   300 ,TEXT("操作锁定请求被拒绝.")},
{
   301 ,TEXT("系统接收了一个无效的操作锁定确认.")},
{
   487 ,TEXT("试图访问无效的地址.")},
{
   534 ,TEXT("算术结果超 过 32 位.")},
{
   535 ,TEXT("管道的另一端有一进程.")},
{
   536 ,TEXT("等候打开管道另一端的进程.")},
{
   994 ,TEXT("拒绝访问扩展属性.")},
{
   995 ,TEXT("由于线程退出或应用程序请求,已放弃 I/O 操作.")},
{
   996 ,TEXT("重叠 I/O 事件不在信号状态中.")},
{
   997 ,TEXT("重叠 I/O 操作在进行中.")},
{
   998 ,TEXT("内存分配访问无效.")},
{
   999 ,TEXT("错误运行页内操作.")},
{
   1001,TEXT("递归太深;栈溢出.")},
{
   1002,TEXT(" 窗口无法在已发送的消息上操作.")},
{
   1003,TEXT("无法完成此功能.")},
{
   1004,TEXT("无效标志.")},
{
   1005,TEXT("此卷不包含可识别的文件 系统.请确定所有请求的文件系统驱动程序已加载,且此卷未损坏.")},
{
   1006,TEXT("文件所在的卷已被外部改变,因此打开的文件不再有效.")},
{
   1007,TEXT("无法在全屏幕模式下运行请求的操作.")},
{
   1008,TEXT("试图引用不存在的令牌.")},
{
   1009,TEXT("配置注册表数据库损坏.")},
{
   1010,TEXT(" 配置注册表项无效.")},
{
   1011,TEXT("无法打开配置注册表项.")},
{
   1012,TEXT("无法读取配置注册表项.")},
{
   1013,TEXT("无法写入配置注册 表项.")},
{
   1014,TEXT("注册表数据库中的某一文件必须使用记录或替代复制来恢复.恢复成功完成.")},
{
   1015,TEXT("注册表损坏.包含注册表数据 的某一文件结构损坏,或系统的文件内存映像损坏,或因为替代副本、日志缺少或损坏而无法恢复文件.")},
{
   1016,TEXT("由注册表启动的 I/O 操作恢复失败.注册表无法读入、写出或清除任意一个包含注册表系统映像的文件.")},
{
   1017,TEXT("系统试图加载或还原文件到注册表,但指定的文件并非 注册表文件格式.")},
{
   1018,TEXT("试图在标记为删除的注册表项上运行不合法的操作.")},
{
   1019,TEXT("系统无法配置注册表日志中所请求的空间.")},
{
   1020,TEXT(" 无法在已有子项或值的注册表项中创建符号链接.")},
{
   1021,TEXT("无法在易变父项下创建稳定子项.")},
{
   1022,TEXT("通知更改请求正在完成中,且 信息并未返回到呼叫方的缓冲区中.当前呼叫方必须枚举文件来查找更改.")},
{
   1051,TEXT("已发送停止控制到服务,该服务被其它正在运行的服务所依赖.")},
{
   1052,TEXT("请求的控件对此服务无效.")},
{
   1053,TEXT("服务并未及时响应启动或控制请求.")},
{
   1054,TEXT("无法创建此服务的线程.")},
{
   1055,TEXT("锁 定服务数据库.")},
{
   1056,TEXT("服务的实例已在运行中.")},
{
   1057,TEXT("帐户名无效或不存在,或者密码对于指定的帐户名无效.")},
{
   1058,TEXT("无法启动服务,原因可能是它被禁用或与它相关联的设备没有启动.")},
{
   1059,TEXT("指定了循环服务依存.")},
{
   1060,TEXT("指定的服务并未以已安 装的服务存在.")},
{
   1061,TEXT("服务无法在此时接受控制信息.")},
{
   1062,TEXT("服务未启动.")},
{
   1063,TEXT("服务进程无法连接到服务控 制器上.")},
{
   1064,TEXT("当处理控制请求时,在服务中发生异常.")},
{
   1065,TEXT("指定的数据库不存在.")},
{
   1066,TEXT("服务已返回特定 的服务错误码.")},
{
   1067,TEXT("进程意外终止.")},
{
   1068,TEXT("依存服务或组无法启动.")},
{
   1069,TEXT("由于登录失败而无法启动服务.")},
{
   1070,TEXT(" 启动后,服务停留在启动暂停状态.")},
{
   1071,TEXT("指定的服务数据库锁定无效.")},
{
   1072,TEXT("指定的服务已标记为删除.")},
{
   1073,TEXT(" 指定的服务已存在.")},
{
   1074,TEXT("系统当前以最新的有效配置运行.")},
{
   1075,TEXT("依存服务不存在,或已被标记为删除.")},
{
   1076,TEXT(" 已接受使用当前引导作为最后的有效控制设置.")},
{
   1077,TEXT("上次启动之后,仍未尝试引导服务.")},
{
   1078,TEXT("名称已用作服务名或服务显示 名.")},
{
   1079,TEXT("此服务的帐户不同于运行于同一进程上的其它服务的帐户.")},
{
   1080,TEXT("只能为 Win32 服务设置失败操作,不能为驱动程序设置.")},
{
   1081,TEXT("这个服务所运行的处理和服务控制管理器相同.所以,如果服务处理程序意外中止的话,服务控 制管理器无法进行任何操作.")},
{
   1082,TEXT("这个服务尚未设置恢复程序.")},
{
   1083,TEXT("配置成在该可执行程序中运行的这个服务不能执行该服 务.")},
{
   1100,TEXT("已达磁带的实际结尾.")},
{
   1101,TEXT("磁带访问已达文件标记.")},
{
   1102,TEXT("已达磁带或磁盘分区的开头.")},
{
   1103,TEXT(" 磁带访问已达一组文件的结尾.")},
{
   1104,TEXT("磁带上不再有任何数据.")},
{
   1105,TEXT("磁带无法分区.")},
{
   1106,TEXT("在访问多卷分区 的新磁带时,当前的块大小不正确.")},
{
   1107,TEXT("当加载磁带时,找不到分区信息.")},
{
   1108,TEXT("无法锁定媒体弹出功能.")},
{
   1109,TEXT(" 无法卸载介质.")},
{
   1110,TEXT("驱动器中的介质可能已更改.")},
{
   1111,TEXT("复位 I/O 总线.")},
{
   1112,TEXT("驱动器中没有媒体.")},
{
   1113,TEXT(" 在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符.")},
{
   1114,TEXT("动态链接库 {DLL) 初始化例程失败.")},
{
   1115,TEXT(" 系统关机正在进行.")},
{
   1116,TEXT("因为没有任何进行中的关机过程,所以无法中断系统关机.")},
{
   1117,TEXT("因为 I/O 设备错误,所以无法运行此项请求.")},
{
   1118,TEXT("没有串行设备被初始化成功.串行驱动程序将卸载.")},
{
   1119,TEXT("无法打开正在与其他设备 共享中断请求{IRQ)的设备.至少有一个使用该 IRQ 的其他设备已打开.")},
{
   1120,TEXT("序列 I/O 操作已由另一个串行口的写入完成.(IOCTL_SERIAL_XOFF_COUNTER 已达零).")},
{
   1121,TEXT("因为已过超时时间,所以串行 I/O 操作完成.(IOCTL_SERIAL_XOFF_COUNTER 未达零).")},
{
   1122,TEXT("在软盘上找不到 ID 地址标记.")},
{
   1123,TEXT("软盘扇区 ID 字符域与软盘控制器磁道地址不相符.")},
{
   1124,TEXT("软盘控制器报告软盘驱动程序不能识别的错误.")},
{
   1125,TEXT("软盘控制 器返回与其寄存器中不一致的结果.")},
{
   1126,TEXT("当访问硬盘时,重新校准操作失败,重试仍然失败.")},
{
   1127,TEXT("当访问硬盘时,磁盘操作失败,重试仍然失败.")},
{
   1128,TEXT(" 当访问硬盘时,即使失败,仍须复位磁盘控制器.")},
{
   1129,TEXT("已达磁带结尾.")},
{
   1130,TEXT("服务器存储空间不足,无法处理此命令.")},
{
   1131,TEXT(" 检测出潜在的死锁状态.")},
{
   1132,TEXT("指定的基址或文件偏移量没有适当对齐.")},
{
   1140,TEXT("改变系统供电状态的尝试被另一应用程序或驱动 程序否决.")},
{
   1141,TEXT("系统 BIOS 改变系统供电状态的尝试失败.")},
{
   1142,TEXT("试图在一文件上创建超过系统允许数额的链接.")},
{
   1150,TEXT("指定程序要求更新的 Windows 版本.")},
{
   1151,TEXT("指定程序不是 Windows 或 MS-DOS 程序.")},
{
   1152,TEXT("只能启动该指定程序的一个实例.")},
{
   1153,TEXT("该指定程序适用于旧的 Windows 版本.")},
{
   1154,TEXT("执行该应用程序所需的库文件之一 被损坏.")},
{
   1155,TEXT("没有应用程序与此操作的指定文件有关联.")},
{
   1156,TEXT("在输送指令到应用程序的过程中出现错误.")},
{
   1157,TEXT(" 执行该应用程序所需的库文件之一无法找到.")},
{
   1158,TEXT("当前程序已使用了 Window 管理器对象的系统允许的所有句柄.")},
{
   1159,TEXT("消息只能与同步操作一起使用.")},
{
   1160,TEXT("指出的源元素没有媒体.")},
{
   1161,TEXT("指出的目标元素已包含媒体.")},
{
   1162,TEXT("指 出的元素不存在.")},
{
   1163,TEXT("指出的元素是未显示的存储资源的一部分.")},
{
   1164,TEXT("显示设备需要重新初始化,因为硬件有错误.")},
{
   1165,TEXT("设备显示在尝试进一步操作之前需要清除.")},
{
   1166,TEXT("设备显示它的门仍是打开状态.")},
{
   1167,TEXT("设备没有连接.")},
{
   1168,TEXT(" 找不到元素.")},
{
   1169,TEXT("索引中没有同指定项相匹配的项.")},
{
   1170,TEXT("在对象上不存在指定的属性集.")},
{
   1171,TEXT("传递到 GetMouseMovePoints 的点不在缓冲区中.")},
{
   1172,TEXT("跟踪{工作站)服务没运行.")},
{
   1173,TEXT("找不到卷 ID.")},
{
   1175,TEXT(" 无法删除要被替换的文件.")},
{
   1176,TEXT("无法将替换文件移到要被替换的文件.要被替换的文件保持原来的名称.")},
{
   1177,TEXT("无法将替换文 件移到要被替换的文件.要被替换的文件已被重新命名为备份名称.")},
{
   1178,TEXT("卷更改记录被删除.")},
{
   1179,TEXT("卷更改记录服务不处于活 动中.")},
{
   1180,TEXT("找到一份文件,但是可能不是正确的文件.")},
{
   1181,TEXT("日志项从日志中被删除.")},
{
   1200,TEXT("指定的设备名 无效.")},
{
   1201,TEXT("设备当前未连接上,但其为一个记录连接.")},
{
   1202,TEXT("企图记录先前已被记录的设备.")},
{
   1203,TEXT("无任何 网络提供程序接受指定的网络路径.")},
{
   1204,TEXT("指定的网络提供程序名称无效.")},
{
   1205,TEXT("无法打开网络连接配置文件.")},
{
   1206,TEXT("网络连接配置文件损坏.")},
{
   1207,TEXT("无法枚举空载体.")},
{
   1208,TEXT("发生扩展错误.")},
{
   1209,TEXT("指定的组名格式无效.")},
{
   1210,TEXT("指定的计算机名格式无效.")},
{
   1211,TEXT("指定的事件名格式无效.")},
{
   1212,TEXT("指定的域名格式无效.")},
{
   1213,TEXT("指定的服务名 格式无效.")},
{
   1214,TEXT("指定的网络名格式无效.")},
{
   1215,TEXT("指定的共享名格式无效.")},
{
   1216,TEXT("指定的密码格式无效.")},
{
   1217,TEXT(" 指定的消息名格式无效.")},
{
   1218,TEXT("指定的消息目标格式无效.")},
{
   1219,TEXT("提供的凭据与已存在的凭据集冲突.")},
{
   1220,TEXT(" 企图创建网络服务器的会话,但已对该服务器创建过多的会话.")},
{
   1221,TEXT("工作组或域名已由网络上的另一部计算机使用.")},
{
   1222,TEXT("网络未连接或启动.")},
{
   1223,TEXT("操作已被用户取消.")},
{
   1224,TEXT(" 请求的操作无法在使用用户映射区域打开的文件上执行.")},
{
   1225,TEXT("远程系统拒绝网络连接.")},
{
   1226,TEXT("网络连接已被适当地关闭了.")},
{
   1227,TEXT(" 网络传输终结点已有与其关联的地址.")},
{
   1228,TEXT("地址仍未与网络终结点关联.")},
{
   1229,TEXT("企图在不存在的网络连接上进行操作.")},
{
   1230,TEXT(" 企图在使用中的网络连接上进行无效的操作.")},
{
   1231,TEXT("不能访问网络位置.有关网络排除故障的信息,请参阅 Windows 帮助.")},
{
   1232,TEXT(" 不能访问网络位置.有关网络排除故障的信息,请参阅 Windows 帮助.")},
{
   1233,TEXT("不能访问网络位置.有关网络排除故障的信息,请参阅 Windows 帮助.")},
{
   1234,TEXT("没有任何服务正在远程系统上的目标网络终结点上操作.")},
{
   1235,TEXT("请求被终止.")},
{
   1236,TEXT("由本地系统终止网络连接.")},
{
   1237,TEXT("操作无法完成.应该重试.")},
{
   1238,TEXT("因为已达到此帐户的最大同时连接数限制,所以无法连接服 务器.")},
{
   1239,TEXT("试图在这个帐户未被授权的时间内登录.")},
{
   1240,TEXT("此帐户并未得到从这个工作站登录的授权.")},
{
   1241,TEXT("请求的操作不能使用这个网络地址.")},
{
   1242,TEXT("服务器已经注册.")},
{
   1243,TEXT("指定的服务不存在.")},
{
   1244,TEXT("因为用户还未 被验证,不能执行所要求的操作.")},
{
   1245,TEXT("因为用户还未登录网络,不能执行所要求的操作.指定的服务不存在.")},
{
   1246,TEXT("正在继续 工作.")},
{
   1247,TEXT("试图进行初始操作,但是初始化已完成.")},
{
   1248,TEXT("没有更多的本地设备.")},
{
   1249,TEXT("指定的站点不存 在.")},
{
   1250,TEXT("具有指定名称的域控制器已经存在.")},
{
   1251,TEXT("只有连接到服务器上时,该操作才受支持.")},
{
   1252,TEXT("即使 没有改动,组策略框架也应该调用扩展.")},
{
   1253,TEXT("指定的用户没有一个有效的配置文件.")},
{
   1254,TEXT("Microsoft Small Business Server 不支持此操作.")},
{
   1300,TEXT("并非所有被引用的特权都指派给呼叫方.")},
{
   1301,TEXT("帐户名和安全标识 间的某些映射未完成.")},
{
   1302,TEXT("没有为该帐户特别设置系统配额限制.")},
{
   1303,TEXT("没有可用的加密密钥.返回了一个已知加密密钥.")},
{
   1304,TEXT(" 密码太复杂,无法转换成 LAN Manager 密码.返回的 LAN Manager 密码为空字符串.")},
{
   1305,TEXT("修订级别未知.")},
{
   1306,TEXT(" 表明两个修订级别是不兼容的.")},
{
   1307,TEXT("这个安全标识不能指派为此对象的所有者.")},
{
   1308,TEXT("这个安全标识不能指派为对象的主要 组.")},
{
   1309,TEXT("当前并未模拟客户的线程试图操作模拟令牌.")},
{
   1310,TEXT("组可能未被禁用.")},
{
   1311,TEXT("当前没有可用的登录 服务器来服务登录请求.")},
{
   1312,TEXT("指定的登录会话不存在,可能已被终止.")},
{
   1313,TEXT("指定的特权不存在.")},
{
   1314,TEXT("客 户没有所需的特权.")},
{
   1315,TEXT("提供的名称并非正确的帐户名形式.")},
{
   1316,TEXT("指定的用户已存在.")},
{
   1317,TEXT("指定的用户 不存在.")},
{
   1318,TEXT("指定的组已存在.")},
{
   1319,TEXT("指定的组不存在.")},
{
   1320,TEXT("指定的用户帐户已是指定组的成员,或是因 为组包含成员所以无法删除指定的组.")},
{
   1321,TEXT("指定的用户帐户不是指定组帐户的成员.")},
{
   1322,TEXT("无法禁用或删除最后剩余的系统管 理帐户.")},
{
   1323,TEXT("无法更新密码,提供作为当前密码的值不正确.")},
{
   1324,TEXT("无法更新密码,提供给新密码的值包含密码中不允许的值.")},
{
   1325,TEXT(" 无法更新密码,为新密码提供的值不符合字符域的长度、复杂性或历史要求.")},
{
   1326,TEXT("登录失败: 未知的用户名或错误密码.")},
{
   1327,TEXT("登录失败: 用户帐户限制.")},
{
   1328,TEXT("登录失败: 违反帐户登录时间限制.")},
{
   1329,TEXT("登录失败: 不允许用户登录到此计算机.")},
{
   1330,TEXT("登录失败: 指定的帐户密码已过期.")},
{
   1331,TEXT("登录失败: 禁用当前的帐户.")},
{
   1332,TEXT("帐户名与安全标识间无任何映射完成.")},
{
   1333,TEXT("一次请求过多的本地用户标识符{LUIDs).")},
{
   1334,TEXT("无更多可用的本地用户标识符{LUIDs).")},
{
   1335,TEXT("对于该特别用 法,安全 ID 的次级授权部分无效.")},
{
   1336,TEXT("访问控制列表{ACL)结构无效.")},
{
   1337,TEXT("安全 ID 结构无效.")},
{
   1338,TEXT("安全描述符结构无效.")},
{
   1340,TEXT("无法创建固有的访问控制列表{ACL)或访问控制项目{ACE).")},
{
   1341,TEXT("服务器当前已禁用.")},
{
   1342,TEXT(" 服务器当前已启用.")},
{
   1343,TEXT("提供给识别代号颁发机构的值为无效值.")},
{
   1344,TEXT("无更多可用的内存以更新安全信息.")},
{
   1345,TEXT(" 指定属性无效,或与整个群体的属性不兼容.")},
{
   1346,TEXT("指定的模拟级别无效, 或所提供的模拟级别无效.")},
{
   1347,TEXT("无法打开匿名级 安全令牌.")},
{
   1348,TEXT("请求的验证信息类别无效.")},
{
   1349,TEXT("令牌的类型对其尝试使用的方法不适当.")},
{
   1350,TEXT("无法在与 安全性无关联的对象上运行安全性操作.")},
{
   1351,TEXT("未能从域控制器读取配置信息,或者是因为机器不可使用,或者是访问被拒绝.")},
{
   1352,TEXT("安全帐户管理器{SAM)或本地安全颁发机构{LSA)服务器处于运行安全操作的错误状态.")},
{
   1353,TEXT("域处于运行安全操作的错误状态.")},
{
   1354,TEXT("此操作只对域的主要域控制器可行.")},
{
   1355,TEXT("指定的域不存在,或无法联系.")},
{
   1356,TEXT("指定的域已存在.")},
{
   1357,TEXT("试 图超出每服务器域个数的限制.")},
{
   1358,TEXT("无法完成请求操作,因为磁盘上的严重介质失败或数据结构损坏.")},
{
   1359,TEXT("出现了内部错 误.")},
{
   1360,TEXT("通用访问类型包含于已映射到非通用类型的访问掩码中.")},
{
   1361,TEXT("安全描述符格式不正确 {绝对或自相关的).")},
{
   1362,TEXT("请求操作只限制在登录进程中使用,调用进程未注册为一个登录进程.")},
{
   1363,TEXT("无法使用已在使用中的标识启动新的会话.")},
{
   1364,TEXT("未知的指定验证数据包.")},
{
   1365,TEXT("登录会话并非处于与请求操作一致的状态中.")},
{
   1366,TEXT("登录会话标识已在使用中.")},
{
   1367,TEXT("登录请求包含无效的登录类型值.")},
{
   1368,TEXT("在使用命名管道读取数据之前,无法经由该管道模拟.")},
{
   1369,TEXT("注册表子树的事务处理状 态与请求状态不一致.")},
{
   1370,TEXT("安全性数据库内部出现损坏.")},
{
   1371,TEXT("无法在内置帐户上运行此操作.")},
{
   1372,TEXT("无法 在内置特殊组上运行此操作.")},
{
   1373,TEXT("无法在内置特殊用户上运行此操作.")},
{
   1374,TEXT("无法从组中删除用户,因为当前组为用户的主要 组.")},
{
   1375,TEXT("令牌已作为主要令牌使用.")},
{
   1376,TEXT("指定的本地组不存在.")},
{
   1377,TEXT("指定的帐户名不是本地组的成员.")},
{
   1378,TEXT(" 指定的帐户名已是本地组的成员.")},
{
   1379,TEXT("指定的本地组已存在.")},
{
   1380,TEXT("登录失败: 未授予用户在此计算机上的请求登录类型.")},
{
   1381,TEXT("已超过在单一系统中可保存机密的最大个数.")},
{
   1382,TEXT(" 机密的长度超过允许的最大长度.")},
{
   1383,TEXT("本地安全颁发机构数据库内部包含不一致性.")},
{
   1384,TEXT("在尝试登录的过程中,用户的安全 上下文积累了过多的安全标识.")},
{
   1385,TEXT("登录失败: 未授予用户在此计算机上的请求登录类型.")},
{
   1386,TEXT("更改用户密码时需要交叉 加密密码.")},
{
   1387,TEXT("由于成员不存在,无法将成员添加到本地组中,也无法从本地组将其删除.")},
{
   1388,TEXT("无法将新成员加入到本地组 中,因为成员的帐户类型错误.")},
{
   1389,TEXT("已指定过多的安全标识.")},
{
   1390,TEXT("更改此用户密码时需要交叉加密密码.")},
{
   1391,TEXT("表明 ACL 未包含任何可承继的组件.")},
{
   1392,TEXT("文件或目录损坏且无法读取.")},
{
   1393,TEXT("磁盘结构损坏且无法读取.")},
{
   1394,TEXT("无任何指定登录会话的用户会话项.")},
{
   1395,TEXT("正在访问的服务有连接数目标授权限制,这时候已经无法再连接,原因是已经到达可接受的连接数目上 限.")},
{
   1396,TEXT("登录失败: 该目标帐户名称不正确.")},
{
   1397,TEXT("相互身份验证失败,该服务器在域控制器的密码过期.")},
{
   1398,TEXT("在客户机和服务器之间有一个时间差.")},
{
   1400,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Windows下,可以使用Windows API来获取默认打印机的各项信息。具体步骤如下: 1. 引入Windows头文件 ```c #include <windows.h> #include <winspool.h> ``` 2. 定义函数获取默认打印机名称 ```c void getDefaultPrinterName(char* printerName, DWORD size) { DWORD dwSize = size; // 缓冲区大小 GetDefaultPrinter(printerName, &dwSize); } ``` 3. 定义函数获取打印机属性 ```c void getPrinterProperties(char* printerName) { HANDLE hPrinter; // 打印机句柄 PRINTER_DEFAULTS pd; // 打印机默认选项 PRINTER_INFO_2* pi2; // 打印机信息结构体 DWORD dwSize; // 缓冲区大小 // 初始化打印机默认选项 pd.pDatatype = NULL; pd.pDevMode = NULL; pd.DesiredAccess = PRINTER_ALL_ACCESS; // 打开指定打印机 if (OpenPrinter(printerName, &hPrinter, &pd) == FALSE) { printf("OpenPrinter failed, error code: %d\n", GetLastError()); return; } // 获取打印机属性 if (GetPrinter(hPrinter, 2, NULL, 0, &dwSize) == 0) { if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) { printf("GetPrinter failed, error code: %d\n", GetLastError()); ClosePrinter(hPrinter); return; } } pi2 = (PRINTER_INFO_2*)malloc(dwSize); if (GetPrinter(hPrinter, 2, (LPBYTE)pi2, dwSize, &dwSize) == 0) { printf("GetPrinter failed, error code: %d\n", GetLastError()); ClosePrinter(hPrinter); free(pi2); return; } // 输出打印机属性 printf("Printer name: %s\n", pi2->pPrinterName); printf("Driver name: %s\n", pi2->pDriverName); printf("Port name: %s\n", pi2->pPortName); printf("Print processor: %s\n", pi2->pPrintProcessor); // 清理资源 ClosePrinter(hPrinter); free(pi2); } ``` 4. 调用函数获取默认打印机名称和打印机属性 ```c int main() { char printerName[MAX_PATH]; getDefaultPrinterName(printerName, MAX_PATH); printf("Default printer name: %s\n", printerName); getPrinterProperties(printerName); return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值