在安装应用程序中以编程方式调用设备属性对话框

若要在安装应用程序中以编程方式调用设备属性对话框,应用程序代码应执行以下操作:

  • 在应用程序代码中包含宏定义和类型定义,以确保在生成应用程序时链接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);
    };