程序进行设置屏幕分辨率的问题

CrazyRobber 2008-04-16 11:06:14
我用下面这段代码设置屏幕的分辨率,当作为一个普通应用程序时(Application),设置分辨率是成功的,而当我将这段代码写入一个服务程序中时(Service Application),在服务中设置不成功,跟踪调试发现反回值rlt为-1,即设置失败。请教各位,如何解决问题?
当我改变ChangeDisplaySettings的第二个参数,用其它几个参数时,也都设置不成功,有些返回-1,一些返回-4,即标记错误。

function SetScreenResolution(nWidth, nHeight: Integer): string;
var
lpDevMode: TDeviceMode;
rlt: Integer;
begin
Result := 'Error';
if EnumDisplaySettings(nil, 0, lpDevMode) then
begin
lpDevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
lpDevMode.dmPelsWidth := nWidth;
lpDevMode.dmPelsHeight := nHeight;
rlt := ChangeDisplaySettings(lpDevMode, 0);
case rlt of
DISP_CHANGE_SUCCESSFUL: Result := 'OK';
DISP_CHANGE_FAILED: Result := 'Failed';
DISP_CHANGE_BADMODE: Result := 'BadMode';
DISP_CHANGE_NOTUPDATED: Result := 'NotUpdated';
DISP_CHANGE_BADFLAGS: Result := 'BadFlags';
end;
end;
end;
...全文
208 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
CrazyRobber 2008-04-24
  • 打赏
  • 举报
回复
终于明白了,改了服务的属性解决问题,谢谢!
Efeis 2008-04-23
  • 打赏
  • 举报
回复
有没有考虑过,分辨率是桌面的一个属性,是对应某个用户的,而服务是系统的,它不知道为谁设置分辨率。
两个解决办法:
一个是写一个普通程序,将设置分辨率的代码写在这个程序中,并且设置一个消息,用于接受设置分辨率的请求,然后在服务中,需要设置分辨率时将请求消息发给该程序,让这个程序完成分辨率的设置;
另一个很简单,就是在“管理工具”->“服务”中,找到你的服务,右键“属性”->“登录”,选中“允许服务与桌面交互”,这样服务就与默认的桌面进行交互,完成对默认桌面的分辨率进行设置
CrazyRobber 2008-04-16
  • 打赏
  • 举报
回复
to: zhangguo666
你说的服务程序与桌面交互是什么意思?是不是给消息服务程序进行设置分辨率?我原程序是通过网络发指令给服务程序,再由服务程序设置分辨率的,服务程序的其它功能都好用,而跟踪服务程序,也进行了设置分辨率的操作,只是通过函数ChangeDisplaySettings设置不成功,而这段设置分辨率的代码放到一个普通的应用程序中很正常。
zhangguo666 2008-04-16
  • 打赏
  • 举报
回复
服务程序跟桌面交互了吗?
CrazyRobber 2008-04-16
  • 打赏
  • 举报
回复
msdn描述的返回值就是case语句中的(还有几个未列举完全),我得到的结果就是DISP_CHANGE_FAILED(-1)或DISP_CHANGE_BADFLAGS(-4)
brightyang 2008-04-16
  • 打赏
  • 举报
回复
莫不是权限问题

看msdn里面对错误返回值的描述是怎么样的

5,387

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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