我有多个显示器(虚拟+实际),默认情况下我想从我的程序中将其放入克隆/双重模式。有人可以建议我怎么做到这一点?我对这个世界非常陌生:)对于这个基本问题抱歉......甚至任何文档或任何链接都将非常可观。如何制作克隆或扩展模式
/sarbojit
我有多个显示器(虚拟+实际),默认情况下我想从我的程序中将其放入克隆/双重模式。有人可以建议我怎么做到这一点?我对这个世界非常陌生:)对于这个基本问题抱歉......甚至任何文档或任何链接都将非常可观。如何制作克隆或扩展模式
/sarbojit
//Extend
SetDisplayConfig(0, NULL,0, NULL,(SDC_APPLY | SDC_TOPOLOGY_EXTEND));
//Clone
SetDisplayConfig(0, NULL,0, NULL,(SDC_APPLY | SDC_TOPOLOGY_CLONE));
更多信息:http://msdn.microsoft.com/en-us/library/ff569533%28v=VS.85%29.aspx
要设置克隆显示在Win7,如果有2条路径,这将工作和4种模式
UINT32 cPath=0; //path count
UINT32 cMode=0; //mode count
HRESULT hr;
hr = GetDisplayConfigBufferSizes(QDC_ALL_PATH, &cPath, &cMode);
std::vector<DISPLAYCONFIG_PATH_INFO> pathArray(cPath);
std::vector<DISPLAYCONFIG_MODE_INFO> modeArray(cMode);
hr =QueryDisplayConfig(QDC_ALL_PATHS, &cPath, &pathArray[0], &cMode, &modeArray[0], NULL);
if(hr != ERROR_SUCCESS) { problem in paradise }
if(cPath!=2 || cMode != 4) { anything else is too complex or a single display or already cloned }
// to change resolution also
// int ix=pathArray[0].sourceInfo.modeInfoIdx; assuming path[0] is primary, it should be
// modeArray[ix].sourceMode.width = 320; // :(
// modeArray[ix].sourceMode.hieght = 240; // :(
pathArray[1].flags |= DISPLAYCONFIG_PATH_ACTIVE;
pathArray[1].sourceInfo.modeIdx = pathArray[0].sourceInfo.modeIdx; //same source
pathArray[1].sourceInfo.id = pathArray[0].sourceInfo.id; //same source
hr = SetDisplayConfig(cPath, &pathArray[0], cMode, &modeArray[0], SDC_APPLY | SDC_USE_SUPPLIED_DISPLAY_CONFIG | SDC_ALLOW_CHANGE | SDC_SAVE_TO_DATABASE));
if(hr != ERROR_SUCCESS) { so close!!! }
如果你恰巧是在Windows XP中,并有可以使用下面的命令行命令
rundll32.exe NvCpl.dll,dtcfg setview 1 clone
或
rundll32.exe NvCpl.dll,dtcfg setview 1 dualview
的NVIDIA显卡,并使用CreateProcess的创建一个子运行该命令的进程。我一直无法让NvAPI在Windows XP上设置克隆或扩展模式,但它似乎在Windows 7上运行良好。