【WinXP】下怎样用自己写的程序旋转显示器方向

OTIZG 2008-09-02 04:13:03
因为工作需要,要通过自己写的程序,将显示器的显示方向,随意调整为横向(1280*1024)或纵向(1024*1280),也就是说需要象【控制面板】里面【显卡设置】->【旋转屏幕90度】的操作那样。但是需要自己写程序,调用API来实现。

有关的技术网站访问了不少,很多的答案都说需要调用显卡的隐藏驱动接口函数。但是隐藏接口函数到底是什么,如何使用,没有一个答案。

也有的答案说使用ChangeDisplaySettingsEx函数来实现(WinCE系统可以通过此方法实现),但是很不幸,我的电脑不支持这种方法。

我的实现目标,在配备NVIDIA显卡Geforce7600以上的桌面电脑,操作系统是WindowsXP,用自己写的程序,实现显示器方向的旋转90度即可。

期望目标
1)如果能够在Intel集成显卡上也能实现就更好了。

关于这项技术,我坚信有办法来实现它,因为已经有类似的程序已经实现了这种技术,例如iRotate软件,参考链接地址 http://www.entechtaiwan.com/util/irotate.shtm 感兴趣的朋友,可以下载尝试体会一下(点此下载

备注:
在此谢绝任何用手来显示器旋转等类似灌水帖。使用【控制面板】里面【显卡设置】->【旋转屏幕90度】的操作的回复,在此也谢绝各位了。

真诚期待了解此类技术或感兴趣的各位同仁们来一起探讨。


...全文
885 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
songqianxia 2010-02-24
  • 打赏
  • 举报
回复
真的很有用,感谢楼住,佩服您的执著!!
OTIZG 2009-01-14
  • 打赏
  • 举报
回复
谢谢楼上的回复,经过了4个月的时间,终于让我有机会对这个帖子继续的机会了。(原来因为我连续回复三次,csdn论坛认为有灌水嫌疑,在没有人回复之前,不允许我再发表任何回复.....)

按照楼上的方法,调用ChangeDisplaySettings函数确实可以旋转显示器方向,但是它的前提条件是显卡必须是Intel的,或者比较旧的NV显卡、ATI显卡、或者其他显卡(比如丽台、vodoo,这些显卡是否可以,因未经测试无法准确判断)

在NV的Geforce系列最新显卡上,使用这个API函数就无法进行旋转。

但是NV显卡的CUDA提供了解决办法,在一本《NVIDIA UTILITIES AND APIS NVCPL.DLL API Manual》的官方手册里面,描述了有关的NV显卡的显示有关API函数。
使用google可以搜索 NVCPL.DLL API Manual 来得到这个手册。(目前的下载地址为:http://developer.download.nvidia.com/SDK/9.5/Samples/DEMOS/common/src/NvCpl/docs/NVControlPanel_API.pdf
)
/*------------------------------------*/
NV显卡(Geforce、Quadro)的显示器旋转方法的答案如下:

请在Windows的【开始菜单】的【运行】,输入如下信息:

rundll32.exe NvCpl.dll,dtcfg rotate <指定显示器编号#> <旋转角度: 0,90,180,270>

例如:

rundll32.exe NvCpl.dll,dtcfg rotate 1 90

/*-----------下面是官方文档摘录,意思同上面中文--------------*/
rotate

Description Rotate a display to the designated orientation.
Format rundll32.exe NvCpl.dll,dtcfg rotate <display#> <angle: 0,90,180,270>

Example

rundll32.exe NvCpl.dll,dtcfg rotate 2 90

Rotates display #2 to the 90 degree position.
/*------------------------------------*/



chenshengabc 2008-12-04
  • 打赏
  • 举报
回复
调用Window API函数可以实现,须在VS2005或以后版本编译才行,VC6的头文件太早,这个特性它里面还没有
DEVMODE dm;
// initialize the DEVMODE structure
ZeroMemory(&dm, sizeof(dm));
dm.dmSize = sizeof(dm);

if (0 != EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm))
{
// swap height and width
DWORD dwTemp = dm.dmPelsHeight;
dm.dmPelsHeight= dm.dmPelsWidth;
dm.dmPelsWidth = dwTemp;

// determine new orientaion
switch (dm.dmDisplayOrientation)
{
case DMDO_DEFAULT:
dm.dmDisplayOrientation = DMDO_270;
break;
case DMDO_270:
dm.dmDisplayOrientation = DMDO_180;
break;
case DMDO_180:
dm.dmDisplayOrientation = DMDO_90;
break;
case DMDO_90:
dm.dmDisplayOrientation = DMDO_DEFAULT;
break;
default:
// unknown orientation value
// add exception handling here
break;
}
long lRet = ChangeDisplaySettings(&dm, 0);
if (DISP_CHANGE_SUCCESSFUL != lRet)
{
// add exception handling here
}
}
OTIZG 2008-09-03
  • 打赏
  • 举报
回复
目前仍然没有实质性进展,但是貌似和GDI以及显卡驱动有关...
OTIZG 2008-09-02
  • 打赏
  • 举报
回复
补充一下,本帖希望用程序实现NVIDIA NVRotate 功能,也就是可以使Windows 桌面以 Landscape(横向)或 Portrait(纵向)模式显示
并且可以将桌面旋转 90、180 或 270 度。
OTIZG 2008-09-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 king820802 的回复:]
ChangeDisplaySettingsEx?

Windows NT: Requires version 5.0 or later.
Windows: Requires Windows 98 or later.
Windows CE: Unsupported.
Header: Declared in winuser.h.
Import Library: Use user32.lib.
Unicode: Implemented as Unicode and ANSI versions on Windows NT.

MSDN说WinCE不支持

[/Quote]

不好意思,可能是我误导了各位。WinCE到底支持不支持,我也没有测试过。
微软的官网上的介绍如下:

Windows NT/2000/XP/Vista: Included in Windows 2000 and later.
Windows 95/98/Me: Included in Windows 98 and later.
Header: Declared in Winuser.h; include Windows.h.
Library: Use User32.lib.
Unicode: Implemented as Unicode and ANSI versions on Windows 2000/XP. Also supported by Microsoft Layer for Unicode.

但是可以确定的是,在某些电脑配置下,是无法使用ChangeDisplaySettingsEx来实现屏幕旋转的。(我的电脑配置就没办法实现)
我电脑配置如下:

CPU:Intel Dual Core E2180
主板:Intel 945GC
显卡:Intel集成GMA950

na_he 2008-09-02
  • 打赏
  • 举报
回复
哦,关注了,不错的课题哦
king820802 2008-09-02
  • 打赏
  • 举报
回复
ChangeDisplaySettingsEx?

Windows NT: Requires version 5.0 or later.
Windows: Requires Windows 98 or later.
Windows CE: Unsupported.
Header: Declared in winuser.h.
Import Library: Use user32.lib.
Unicode: Implemented as Unicode and ANSI versions on Windows NT.

MSDN说WinCE不支持
OTIZG 2008-09-02
  • 打赏
  • 举报
回复
相关的有参考价值的英文网页
Rotating the display using ChangeDisplaySettingsEx

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧