这程序怎么看不懂。有大虾帮讲解一下几个关键的函数吗?这都是哪里冒出来的函数呀?#include "windows.h"
#include "setupapi.h"
#include "initguid.h"
#include "stdio.h"#define NAME_SIZE 128
#define PRINT(_x_) printf _x_DEFINE_GUID (GUID_CLASS_MONITOR,
0x4d36e96e, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1,
0x03, 0x18);static void
PlayWithDeviceInfo(
IN HDEVINFO devInfo,
IN PSP_DEVINFO_DATA devInfoData
)
{
HKEY hDevRegKey;
DWORD uniID[123]; if (SetupDiGetDeviceRegistryProperty(
devInfo,
devInfoData,
SPDRP_DEVICEDESC,//SPDRP_UI_NUMBER,
NULL,
(PBYTE)(&uniID),
sizeof(uniID),
NULL))
{
printf("UID: %s\n",uniID);
}
else {
printf("ERROR: %d\n",GetLastError());
} hDevRegKey = SetupDiOpenDevRegKey(
devInfo,
devInfoData,
DICS_FLAG_GLOBAL,
0,
DIREG_DEV,
KEY_ALL_ACCESS); if (hDevRegKey) {
LONG retValue,i;
DWORD dwType, AcutalValueNameLength= NAME_SIZE; CHAR valueName[NAME_SIZE]; for (i = 0, retValue = ERROR_SUCCESS; retValue !=
ERROR_NO_MORE_ITEMS; i++)
{
unsigned char EDIDdata[1024];
DWORD j,edidsize=sizeof(EDIDdata); retValue = RegEnumValue (
hDevRegKey,
i,
&valueName[0],
&AcutalValueNameLength,
NULL,//reserved
&dwType,
EDIDdata, // buffer
&edidsize); // buffer size if (retValue == ERROR_SUCCESS )
{
if (!strcmp(valueName,"EDID")) {
printf("Found value EDID\n");
{ for (j=0;j<edidsize;j++) {
if (j %16 == 0) printf("\n");
printf("%02x ",EDIDdata[j]);
}
printf("\n");
} break;
}
}
} RegCloseKey(hDevRegKey);
}
else {
printf("ERROR:%d\n",GetLastError());
}}
int EnumDevices()
{
HDEVINFO devInfo = NULL;
SP_DEVINFO_DATA devInfoData;
SP_DEVINFO_LIST_DETAIL_DATA devInfoSetDetailData;
ULONG i; do
{ devInfo = SetupDiGetClassDevsEx(
&GUID_CLASS_MONITOR, //class GUID
NULL, //enumerator
NULL, //HWND
DIGCF_PRESENT, // Flags //DIGCF_ALLCLASSES|
NULL, // device info, create a new one.
NULL, // machine name, local machine
NULL);// reserved if (NULL == devInfo)
{
//PrintWin32Error("SetupDiGetClassDevsEx");
break;
} for (i=0;ERROR_NO_MORE_ITEMS != GetLastError();i++)
{ memset(&devInfoData,0,sizeof(devInfoData));
devInfoData.cbSize = sizeof(devInfoData); if (SetupDiEnumDeviceInfo(devInfo,i,&devInfoData))
{
PlayWithDeviceInfo(devInfo,&devInfoData);
}
} } while (FALSE); return i;
}int __cdecl main()
{
EnumDevices();
return 0;
}
#include "setupapi.h"
#include "initguid.h"
#include "stdio.h"#define NAME_SIZE 128
#define PRINT(_x_) printf _x_DEFINE_GUID (GUID_CLASS_MONITOR,
0x4d36e96e, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1,
0x03, 0x18);static void
PlayWithDeviceInfo(
IN HDEVINFO devInfo,
IN PSP_DEVINFO_DATA devInfoData
)
{
HKEY hDevRegKey;
DWORD uniID[123]; if (SetupDiGetDeviceRegistryProperty(
devInfo,
devInfoData,
SPDRP_DEVICEDESC,//SPDRP_UI_NUMBER,
NULL,
(PBYTE)(&uniID),
sizeof(uniID),
NULL))
{
printf("UID: %s\n",uniID);
}
else {
printf("ERROR: %d\n",GetLastError());
} hDevRegKey = SetupDiOpenDevRegKey(
devInfo,
devInfoData,
DICS_FLAG_GLOBAL,
0,
DIREG_DEV,
KEY_ALL_ACCESS); if (hDevRegKey) {
LONG retValue,i;
DWORD dwType, AcutalValueNameLength= NAME_SIZE; CHAR valueName[NAME_SIZE]; for (i = 0, retValue = ERROR_SUCCESS; retValue !=
ERROR_NO_MORE_ITEMS; i++)
{
unsigned char EDIDdata[1024];
DWORD j,edidsize=sizeof(EDIDdata); retValue = RegEnumValue (
hDevRegKey,
i,
&valueName[0],
&AcutalValueNameLength,
NULL,//reserved
&dwType,
EDIDdata, // buffer
&edidsize); // buffer size if (retValue == ERROR_SUCCESS )
{
if (!strcmp(valueName,"EDID")) {
printf("Found value EDID\n");
{ for (j=0;j<edidsize;j++) {
if (j %16 == 0) printf("\n");
printf("%02x ",EDIDdata[j]);
}
printf("\n");
} break;
}
}
} RegCloseKey(hDevRegKey);
}
else {
printf("ERROR:%d\n",GetLastError());
}}
int EnumDevices()
{
HDEVINFO devInfo = NULL;
SP_DEVINFO_DATA devInfoData;
SP_DEVINFO_LIST_DETAIL_DATA devInfoSetDetailData;
ULONG i; do
{ devInfo = SetupDiGetClassDevsEx(
&GUID_CLASS_MONITOR, //class GUID
NULL, //enumerator
NULL, //HWND
DIGCF_PRESENT, // Flags //DIGCF_ALLCLASSES|
NULL, // device info, create a new one.
NULL, // machine name, local machine
NULL);// reserved if (NULL == devInfo)
{
//PrintWin32Error("SetupDiGetClassDevsEx");
break;
} for (i=0;ERROR_NO_MORE_ITEMS != GetLastError();i++)
{ memset(&devInfoData,0,sizeof(devInfoData));
devInfoData.cbSize = sizeof(devInfoData); if (SetupDiEnumDeviceInfo(devInfo,i,&devInfoData))
{
PlayWithDeviceInfo(devInfo,&devInfoData);
}
} } while (FALSE); return i;
}int __cdecl main()
{
EnumDevices();
return 0;
}
解决方案 »
- 请问给listbox添加点击消息,为什么不能识别WM_NOTIFY
- 在同一个VC RichEdit2.0中如何显示不同大小、颜色、字体的文字?
- 请问要怎么样设置word打印控制的密码和打印份数
- 问高手:DeviceIOControl函数调用了系统什么资源
- 菜单式窗口
- 如何按回车就执行处于焦点的按钮程序?
- 如何屏蔽系统热键???有疑问!!
- 如何实现256色到24真采的转换呀??格式??算法??谢谢
- 初学者:我有一套api函数,我想用com组件封装起来,好实现么?
- 菜鸟的问题!!!!如何把敲回车键的动作送入一个变量?
- 谁知道如何把winpcap整合到自己的项目吗?我那天问了wincap的相关人……
- 谁有最新的CSerialPort 类“?能发给我吗?
#include "setupapi.h"
#include "initguid.h"
#include "stdio.h"#define NAME_SIZE 128
#define PRINT(_x_) printf _x_DEFINE_GUID (GUID_CLASS_MONITOR,
0x4d36e96e, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1,
0x03, 0x18);static void
PlayWithDeviceInfo(
IN HDEVINFO devInfo,
IN PSP_DEVINFO_DATA devInfoData
)
{
HKEY hDevRegKey;
DWORD uniID[123]; if (SetupDiGetDeviceRegistryProperty(//得到指定的PNP设备注册属性
devInfo,
devInfoData,
SPDRP_DEVICEDESC,//SPDRP_UI_NUMBER,返回设备表述信息
NULL,
(PBYTE)(&uniID),
sizeof(uniID),
NULL))
{
printf("UID: %s\n",uniID);
}
else {
printf("ERROR: %d\n",GetLastError());
} hDevRegKey = SetupDiOpenDevRegKey(//为指定的设备打开注册表键值
devInfo,
devInfoData,
DICS_FLAG_GLOBAL,
0,
DIREG_DEV,
KEY_ALL_ACCESS); if (hDevRegKey) {
LONG retValue,i;
DWORD dwType, AcutalValueNameLength= NAME_SIZE; CHAR valueName[NAME_SIZE]; for (i = 0, retValue = ERROR_SUCCESS; retValue !=
ERROR_NO_MORE_ITEMS; i++)
{
unsigned char EDIDdata[1024];
DWORD j,edidsize=sizeof(EDIDdata); retValue = RegEnumValue (
hDevRegKey,
i,
&valueName[0],
&AcutalValueNameLength,
NULL,//reserved
&dwType,
EDIDdata, // buffer
&edidsize); // buffer size if (retValue == ERROR_SUCCESS )
{
if (!strcmp(valueName,"EDID")) {
printf("Found value EDID\n");
{ for (j=0;j<edidsize;j++) {
if (j %16 == 0) printf("\n");
printf("%02x ",EDIDdata[j]);
}
printf("\n");
} break;
}
}
} RegCloseKey(hDevRegKey);
}
else {
printf("ERROR:%d\n",GetLastError());
}}
int EnumDevices()
{
HDEVINFO devInfo = NULL;
SP_DEVINFO_DATA devInfoData;
SP_DEVINFO_LIST_DETAIL_DATA devInfoSetDetailData;
ULONG i; do
{ devInfo = SetupDiGetClassDevsEx(//通过设备类GUID得到设备信息句柄
&GUID_CLASS_MONITOR, //class GUID
NULL, //enumerator
NULL, //HWND
DIGCF_PRESENT, // Flags //DIGCF_ALLCLASSES|
NULL, // device info, create a new one.
NULL, // machine name, local machine
NULL);// reserved if (NULL == devInfo)
{
//PrintWin32Error("SetupDiGetClassDevsEx");
break;
} for (i=0;ERROR_NO_MORE_ITEMS != GetLastError();i++)
{ memset(&devInfoData,0,sizeof(devInfoData));
devInfoData.cbSize = sizeof(devInfoData); if (SetupDiEnumDeviceInfo(devInfo,i,&devInfoData))//枚举设备信息
{
PlayWithDeviceInfo(devInfo,&devInfoData);//通过注册表得到信息
}
} } while (FALSE); return i;
}int __cdecl main()
{
EnumDevices();
return 0;
}
我注视的地方都是关键函数,具体应用察看MSDN