微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有AC / C + +多监视器库来改变XP的桌面设置的双视图或克隆?

我正在写一个应用程序,它将有助于自动切换在Windows XP的桌面在双视图或克隆。 该应用程序使用GUI的一个小wxWidgets窗口。 在graphics用户界面中有一个可以轻松在双视图和克隆之间切换的button将会很不错。

是否有访问控制双视图或克隆的ac / c + +库?

python pygtk如何在特定的显示器上放置一个窗口

有没有办法在多GPU环境中以编程方式select渲染GPU? (视窗)

“以扩展我的Windows桌面到这个监视器”编程

在特定的屏幕上启动进程

在Windows的双显示器上使用NetBeans 8

看看这个脚本 ,据我所知,应该启用或禁用多视图。 虽然它是用脚本语言编写的,但它确实利用了正常的WinAPI函数,因此您应该能够通过查看它们来了解发生了什么。

据我所知,通过调用第二个监视器上的ChangedisplaySettingsEx ,并提供宽度,高度,颜色深度和刷新率为0来完成禁用第二个监视器。要重新启用它,可以再次调用ChangedisplaySettingsEx据推测有效的参数。

无论如何,这可能是最好的尝试脚本(解释器可在主页上免费),看看它是否实现了你正在寻找的功能(注意脚本硬编码为两个特定的显示器,你将不得不他们与您的显示器的名称,以使其工作)。

以下代码的作品。 它不保持显示器分辨率。

void AppFrame::OnButtonModify(wxCommandEvent& event) { static bool bSwitch = false; if (bSwitch) { ExtendExternaldisplay(); } else { CloneExternaldisplay(); } bSwitch = !bSwitch; } void AppFrame::ExtendExternaldisplay() { int nModeSwitch = NULL; DEVMODE dmPrimary,dmSecondary,dmThird,savedmSecondary; #define szPrimarydisplay TEXT( "\\.\disPLAY1" ) #define szSecondarydisplay TEXT( "\\.\disPLAY2" ) #define szThirddisplay TEXT( "\\.\disPLAY3" ) ZeroMemory( &dmPrimary,sizeof(dmPrimary) ); dmPrimary.dmSize = sizeof(dmPrimary); ZeroMemory( &dmSecondary,sizeof(dmSecondary) ); dmSecondary.dmSize = sizeof(dmSecondary); ZeroMemory( &dmThird,sizeof(dmThird) ); dmThird.dmSize = sizeof(dmThird); ZeroMemory( &dmThird,sizeof(dmThird) ); dmThird.dmSize = sizeof(dmThird); BOOL result; HDC handle; DWORD iDevNum = 0; DWORD dwFlags = 0; disPLAY_DEVICE lpdisplayDevice,lpdisplayDeviceOne,lpdisplayDeviceTwo; ZeroMemory(&lpdisplayDevice,sizeof(lpdisplayDevice)); ZeroMemory(&lpdisplayDeviceOne,sizeof(lpdisplayDeviceOne)); ZeroMemory(&lpdisplayDeviceTwo,sizeof(lpdisplayDeviceTwo)); lpdisplayDevice.cb = sizeof(lpdisplayDevice); lpdisplayDeviceOne.cb = sizeof(lpdisplayDeviceOne); lpdisplayDeviceTwo.cb = sizeof(lpdisplayDeviceTwo); // All this does is confirm the number of display devices the graphics board is capable of handling while(EnumdisplayDevices(NULL,iDevNum,&lpdisplayDevice,dwFlags)) { if (iDevNum == 0) { lpdisplayDeviceOne = lpdisplayDevice; TRACE("DeviceName: '%s'n",lpdisplayDeviceOne.DeviceName); TRACE("DeviceString: '%s'n",lpdisplayDeviceOne.DeviceString); TRACE("Flags: %08X %s%sn",lpdisplayDeviceOne.StateFlags,((lpdisplayDeviceOne.StateFlags & disPLAY_DEVICE_ATTACHED_TO_DESKTOP) ? "Desktop " : ""),((lpdisplayDeviceOne.StateFlags & disPLAY_DEVICE_PRIMARY_DEVICE) ? "Primary" : "")); } if (iDevNum == 1) { lpdisplayDeviceTwo = lpdisplayDevice; TRACE("DeviceName: '%s'n",lpdisplayDeviceTwo.DeviceName); TRACE("DeviceString: '%s'n",lpdisplayDeviceTwo.DeviceString); TRACE("Flags: %08X %s%sn",lpdisplayDeviceTwo.StateFlags,((lpdisplayDeviceTwo.StateFlags & disPLAY_DEVICE_ATTACHED_TO_DESKTOP) ? "Desktop " : ""),((lpdisplayDeviceTwo.StateFlags & disPLAY_DEVICE_PRIMARY_DEVICE) ? "Primary" : "")); } iDevNum ++; } // load disPLAY1 monitor @R_409_4045@ion // ENUM_CURRENT_SETTINGS if (!EnumdisplaySettings(szPrimarydisplay,ENUM_REGISTRY_SETTINGS,(DEVMODE*)&dmPrimary)) { TRACE("EnumdisplaySettings unable to enumerate primary displayn"); return; } if (!EnumdisplaySettings(szSecondarydisplay,(DEVMODE*)&dmSecondary)) TRACE("EnumdisplaySettings unable to enumerate secondary display displayn"); // these don't enumerate in clone mode if (!EnumdisplaySettings(szSecondarydisplay,ENUM_CURRENT_SETTINGS,(DEVMODE*)&savedmSecondary)) TRACE("EnumdisplaySettings unable to enumerate secondary display using ENUM_CURRENT_SETTINGS settingsn"); // disable a display,doesn't work // nModeSwitch = ChangedisplaySettingsEx (szSecondarydisplay,NULL,NULL); // CDdx::ErrordisplayDevice(nModeSwitch); // test and TRACE result dmPrimary.dmFields = DM_POSITION; dmPrimary.dmPosition.x = 0; // set disPLAY1 as the primary display dmPrimary.dmPosition.y = 0; // set disPLAY1 as the primary display // set disPLAY1 as primary display (dmPosition.x = 0) nModeSwitch = ChangedisplaySettingsEx (szPrimarydisplay,(DEVMODE*)&dmPrimary,(CDS_UPDATEREGISTRY | CDS_norESET),NULL); // CDdx::ErrordisplayDevice(nModeSwitch); // test and TRACE result // despite the other lines of code this next line is neccesary to wake the video projector dmSecondary = dmPrimary; dmSecondary.dmFields = DM_POSITION | DM_PELSWIDTH | DM_PELSHEIGHT; dmSecondary.dmPosition.x = dmPrimary.dmPelsWidth + 1; dmSecondary.dmPosition.y = 0; dmSecondary.dmPelsWidth = dmPrimary.dmPelsWidth; // resize the primary display to match the secondary display dmSecondary.dmPelsHeight = dmPrimary.dmPelsHeight; // resize the primary display to match the secondary display nModeSwitch = ChangedisplaySettingsEx (szSecondarydisplay,(DEVMODE*)&dmSecondary,NULL); // CDdx::ErrordisplayDevice(nModeSwitch); // test and TRACE result // load disPLAY3 monitor @R_409_4045@ion if (!EnumdisplaySettings(szThirddisplay,(DEVMODE*)&dmThird)) { TRACE("EnumdisplaySettings unable to enumerate third display displayn"); } else { dmThird.dmPelsWidth = dmSecondary.dmPelsWidth; // resize the primary display to match the secondary display dmThird.dmPelsHeight = dmSecondary.dmPelsHeight; // resize the primary display to match the secondary display dmThird.dmPosition.x = -dmThird.dmPelsWidth; // set disPLAY3 as the third display dmPrimary.dmPosition.y = 0; // set disPLAY1 as the third display // set disPLAY3 as third display (-dmThird.dmPelsWidth) nModeSwitch = ChangedisplaySettingsEx (szThirddisplay,(DEVMODE*)&dmThird,NULL); // CDdx::ErrordisplayDevice(nModeSwitch); // test and TRACE result } // really important line makes the whole thing happen nModeSwitch = ChangedisplaySettingsEx (NULL,NULL); // CDdx::ErrordisplayDevice(nModeSwitch); // test and TRACE result } void AppFrame::CloneExternaldisplay() { int nModeSwitch = NULL; DEVMODE dmPrimary,dmThird; #define szPrimarydisplay TEXT( "\\.\disPLAY1" ) #define szSecondarydisplay TEXT( "\\.\disPLAY2" ) #define szThirddisplay TEXT( "\\.\disPLAY3" ) ZeroMemory( &dmPrimary,sizeof(dmThird) ); // load disPLAY1 monitor @R_409_4045@ion if (!EnumdisplaySettings(szPrimarydisplay,(DEVMODE*)&dmPrimary)) { TRACE("EnumdisplaySettings unable to enumerate primary displayn"); return; } if (!EnumdisplaySettingsEx(szSecondarydisplay,0)) TRACE("EnumdisplaySettings unable to enumerate secondary display displayn"); dmPrimary.dmFields = DM_POSITION; dmPrimary.dmPosition.x = 0; // set disPLAY1 as the primary display dmPrimary.dmPosition.y = 0; // set disPLAY1 as the primary display // set disPLAY1 as primary display (dmPosition.x = 0) nModeSwitch = ChangedisplaySettingsEx (szPrimarydisplay,NULL); // CDdx::ErrordisplayDevice(nModeSwitch); // test and TRACE result // this should disable display dmSecondary.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT; dmSecondary.dmPelsWidth = 0; //dmPrimary.dmPelsWidth; // resize the primary display to match the secondary display dmSecondary.dmPelsHeight = 0;//dmPrimary.dmPelsHeight; // resize the primary display to match the secondary display // this should clone the display dmSecondary.dmFields |= DM_POSITION; dmSecondary.dmPosition.x = 0; // set disPLAY1 as the primary display dmSecondary.dmPosition.y = 0; // set disPLAY1 as the primary display nModeSwitch = ChangedisplaySettingsEx (szSecondarydisplay,NULL); // CDdx::ErrordisplayDevice(nModeSwitch); // test and TRACE result nModeSwitch = ChangedisplaySettingsEx (NULL,NULL); // set disPLAY1 as the primary display // CDdx::ErrordisplayDevice(nModeSwitch); // test and TRACE result }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐