在安装应用程序中以编程方式调用设备属性对话框
若要在安装应用程序中以编程方式调用设备属性对话框,应用程序代码应执行以下操作:
在应用程序代码中包含宏定义和类型定义,以确保在生成应用程序时链接DeviceProperties_RunDLL的相应版本。 Windows 支持 Unicode 版本和 ASCII 版本。
加载 devmgr.dll。
获取指向 DeviceProperties_RunDLL 函数的 指针。
调用 DeviceProperties_RunDLL,提供相应的参数。
下面的代码示例演示如何定义引用 DeviceProperties_RunDLL 函数的 pDeviceProperties 函数指针。 如果在遵守代码时定义了_UNICODE宏, 则 pDeviceProperties 是指向函数的 Unicode 版本的指针;否则 ,pDeviceProperties 是指向函数的 ASCII 版本的指针。
#ifdef _UNICODE
#define DeviceProperties_RunDLL "DeviceProperties_RunDLLW"
typedef void (_stdcall *PDEVICEPROPERTIES)(
HWND hwndStub,
HINSTANCE hAppInstance,
LPWSTR lpCmdLine,
int nCmdShow
);
#else
#define DeviceProperties_RunDLL "DeviceProperties_RunDLLA"
typedef void (_stdcall *PDEVICEPROPERTIES)(
HWND hwndStub,
HHINSTANCE hAppInstance,
LPSTR lpCmdLine,
int nCmdShow
);
#endif
PDEVICEPROPERTIES pDeviceProperties;
下面的代码示例使用前面的代码示例中提供的 pDeviceProperties 的定义,并演示如何以编程方式加载 devmgr.dll 以及如何获取指向适当版本的 DeviceProperties_RunDLL的函数指针。
HINSTANCE hDevMgr = LoadLibrary(_TEXT("devmgr.dll"));
if (hDevMgr) {
pDeviceProperties = (PDEVICEPROPERTIES)GetProcAddress((HMODULE)hDevMgr, DeviceProperties_RunDLL);
}
获取 pDeviceProperties 函数指针后,必须在调用 DeviceProperties_RunDLL 时提供计算机名称和设备实例标识符。 以下代码示例演示了这些项的适当格式和要求:
(Windows XP 及更高版本) 不提供可选的 machine-name-parameter 字段,这表示默认情况下,计算机是本地计算机。 必需的 device-instance-ID-parameter 字段提供设备实例标识符“root\system\0000”。
if (pDeviceProperties){ pDeviceProperties(m_hWnd, NULL, _TEXT("/DeviceID root\\system\\0000"), NULL); };
(Windows XP 及更高版本) 不提供可选的 machine-name-parameter 字段,这表示默认情况下,计算机是本地计算机。 必需的 device-instance-ID-parameter 字段提供设备实例标识符“PCI\VEN_8086&DEV_2445 &SUBSYS_010E1028&REV_12\3&172E68DD&0&FD”。
if (pDeviceProperties){ pDeviceProperties(m_hWnd, NULL, _TEXT("/DeviceID PCI\\VEN_8086\&DEV_2445\&SUBSYS_010E1028\&REV_12\\3\&172E68DD\&0\&FD"), NULL); };
(Windows 2000 及更高版本) 必需的 计算机名称参数 字段为 计算机名称提供一对双引号 (“”) ,指示计算机是本地计算机。 必需的 device-instance-ID-parameter 字段提供设备实例标识符“root\system\0000”。
if (pDeviceProperties){ pDeviceProperties(m_hWnd, NULL, _TEXT("/MachineName \"\" /DeviceID root\\system\\0000"), NULL); };
(Windows 2000 及更高版本) 必需的 machine-name-parameter 字段提供远程计算机名称“\\RemoteMachineAbc”,并且所需的 device-instance-ID-parameter 字段提供设备实例标识符“root\system\0000”。
if (pDeviceProperties){ pDeviceProperties(m_hWnd, NULL, _TEXT("/MachineName \\\\RemoteMachineAbc /DeviceID root\\system\\0000"), NULL); };