VC程序设置桌面的分辨率

2016-02-19 13:00 33 1 收藏

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐VC程序设置桌面的分辨率,无聊中的都看过来。

【 tulaoshi.com - 编程语言 】

刚刚开始工作,最近搞测试程序,要模仿用户做设置分辨率的工作,从网上查了好久都没有查到相关的东西。经过几天的摸索总算把这个小东西搞了出来,拿出来和朋友们分享一下,希望对有需要的朋友有帮助。

考虑到篇幅的问题,注释就省了,很简单,相信对各位朋友都没有什么障碍的。
/*---------------------------------------------------------------------------------------
Win32 Application
Filename:    Screen.cpp
author:     Soucula
date:     06/14/05 
----------------------------------------------------------------------------------------*/   
#include "stdafx.h"

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

bool FindMainWindow(HWND &hwnd,PROCESS_INFORMATION &pi)
{
    STARTUPINFO si;
 DWORD d_pid;
 int n_con;
 
 ZeroMemory(&si,sizeof(si));
 ZeroMemory(&si,sizeof(pi));
 si.cb=sizeof(si);
 CloseHandle(pi.hThread);
 CloseHandle(pi.hProcess);
 
 if(!CreateProcess(NULL,
  "rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3",
  NULL,NULL,FALSE,0,NULL,NULL,
  &si,&pi))
  return false;
 
 n_con=0;
 while(n_con20)
 {
  Sleep(1000);
  for(hwnd=GetWindow(GetDesktopWindow(),GW_CHILD);
  hwnd;
  hwnd=GetWindow(hwnd,GW_HWNDNEXT))
  {
   ::GetWindowThreadProcessId(hwnd,&d_pid);
   if(d_pid==pi.dwProcessId)
    if(GetWindow(hwnd,GW_CHILD)!=NULL)
    {
     n_con=20;
     break;
    }
  }
  n_con++;
 }
 
 if(n_con==20)
  return false;
 
 return true;
}

bool FindChildWindow(const HWND hwnd,const int count,HWND &hwndchild)
{
    int n_count;
   
 if(hwnd==NULL||count1)
  return false;
 
 n_count=0;
 for(hwndchild=GetWindow(hwnd,GW_CHILD);
 hwndchild;
 hwndchild=GetWindow(hwndchild,GW_HWNDNEXT))
 {
  n_count++;
  if(n_count==count)
   break;
 }

 return true;
}

bool SetSolution(const HWND hwndscroll,const HWND hwndtext,const char *so1,char *so2)
{
    int n_con;
 char c_str[21];
 char *n_po1;
 char *n_po2;
   
 if(hwndscroll==NULL||hwndtext==NULL)
  return false;
 
    if(so1==NULL||so2==NULL)
  return false;
 
 n_con=0;
 while(n_con20)
 {
  PostMessage(hwndscroll,WM_KEYDOWN,VK_DOWN,0);
  n_con++;
 }
   
 Sleep(1000);
 GetWindowText(hwndtext,c_str,20);
 n_po1=strstr(c_str,so1);
 n_po2=strstr(c_str,so2);
 n_con=0;
 while(((!n_po1||!n_po2)||(n_po1n_po2))&&n_con20)
 {
  PostMessage(hwndscroll,WM_KEYDOWN,VK_UP,0);
 
  Sleep(1000);
 
  GetWindowText(hwndtext,c_str,20);
  n_po1=strstr(c_str,so1);
  n_po2=strstr(c_str,so2);
  n_con++;
 }
 
 if(n_con==20)
  return false;
   
 return true;
}

bool GetOkWindow(const HWND hwnd,const PROCESS_INFORMATION pi,HWND &hwndok)
{
    DWORD d_pid;
 int n_con;
   
 if(hwnd==NULL)
  return false;
 
 n_con=0;
 while(n_con20)
 {
  Sleep(1000);
  for(hwndok=GetWindow(GetDesktopWindow(),GW_CHILD);
  hwndok;
  hwndok=GetWindow(hwndok,GW_HWNDNEXT))
  {
   ::GetWindowThreadProcessId(hwndok,&d_pid);

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)   if(d_pid==pi.dwProcessId)
    if(GetWindow(hwnd,GW_CHILD)!=NULL)
     if(hwndok!=hwnd)
     {
      n_con=20;
      break;
     }
  }
  n_con++;
 }
   
 if(n_con==20)
  return false;
 
 return true;
}
void SetScreen(const char *so1,char *so2)
{
    HWND pw_main;
 HWND pw_chscroll;
 HWND pw_chtext;
 HWND pw_ok;
 PROCESS_INFORMATION pi;
 
 if(!FindMainWindow(pw_main,pi))
  return;
 
 if(!FindChildWindow(GetWindow(pw_main,GW_CHILD),11,pw_chscroll))
  return;
 
 if(!FindChildWindow(GetWindow(pw_main,GW_CHILD),14,pw_chtext))
  return;
 
 if(!SetSolution(pw_chscroll,pw_chtext,so1,so2))
  return;
 
 PostMessage(pw_main,WM_COMMAND,1,0);
 
 if(!GetOkWindow(pw_main,pi,pw_ok))
  return;
 PostMessage(pw_ok,WM_COMMAND,1,0);
 
 if(!GetOkWindow(pw_main,pi,pw_ok))
  return;
 PostMessage(pw_ok,WM_COMMAND,6,0);
 
}
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 
    SetScreen("1280","720");
 return 0;
}

这个程式在win2000下已经通过验证了,在winxp下要将FindChildWindow中的count改为8和11。本来可以通过窗口文本来解决查找问题,但是由于该程式要用于多国语言的操作系统所以该方法不可行。由于技术水平的问题,一些不周到的地方在所难免,希望朋友们能够给予斧正,不胜感激。这又是本贴的一个目的。

来源:http://www.tulaoshi.com/n/20160219/1602724.html

延伸阅读
标签: 电脑入门
我设置的是1280*800 但是玩游戏 就不行 游戏屏幕大了点 还有小半在下面看不见,多少分辨率能正常显示. 首先说下,游戏内的画面的分辨率一般都是在启动游戏后,由游戏自己的画面控制程序来控制画面的显示的效果的.如果切换出来则按照系统默认的设置的为主的.因此游戏本身和桌面的显示效果是2个概念. 下面解释一下屏幕的分辨率应该设置多少最佳.首...
如何更改win7系统桌面分辨率   1、鼠标右键点击桌面的空白处,弹出右键菜单,选择菜单中的屏幕分辨率; 2、弹出分辨率设置窗口之中,可以找到分辨率设置栏目,点选分辨率设置下拉框,点击之后出现了一系列的设置选项,其中会有推荐选项,也可以可以通过对滑块调节的方式,根据个人需要提交分辨率的大小,然后点击左下角的应用...
标签: 分辨率 电脑
点击通知中心 只需点击Windows 10屏幕右下角的“通知中心图标”,点击弹出的界面中的“所有设置”。 设置系统 找到图中的“系统”案件,点击并进入系统设置菜单。 高级显示设置 在右边下方可以找到“高级显示设置”。 调整分辨率 点击“高级显示设置”后,就能够看到“屏幕分辨率设置窗口了”。只需在相关窗口选择要调...
标签: 电脑 分辨率
打开分辨率选项 我以win7系统为例来演示。以前的xp系统是在桌面点击右键然后选择属性,在属性里设置分辨率的。而win7则有点不同,首先右键点击桌面,在右键菜单中直接显示了屏幕分辨率的选项,用鼠标点击一下这个选项。 调节分辨率大小 在分辨率设置选项页面中,有一个分辨率的选项,点击一下这个选项,上面默认显示的数值是你现在的屏幕...
标签: PS PS教程
图像分辨率的作用 表示图像分辨率的方法有很多种,这主要取决于不同的用途。下面所要探讨的,就是在各种情况下分辨率所起的作用,以及它们相互间的关系。 1.平面设计中分辨率的作用 在平面设计中,图像的分辨率以PPI来度量,它和图像的宽、高尺寸一起决定了图像文件的大小及图像质量。比如,一幅图像宽8英寸、高6英寸,分辨率为10...

经验教程

919

收藏

10
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部