VC程序设置桌面的分辨率

Newstar军

Newstar军

2016-02-19 13:00

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

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

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

(本文来源于图老师网站,更多请访问https://m.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);

(本文来源于图老师网站,更多请访问https://m.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。本来可以通过窗口文本来解决查找问题,但是由于该程式要用于多国语言的操作系统所以该方法不可行。由于技术水平的问题,一些不周到的地方在所难免,希望朋友们能够给予斧正,不胜感激。这又是本贴的一个目的。

展开更多 50%)
分享

猜你喜欢

VC程序设置桌面的分辨率

编程语言 网络编程
VC程序设置桌面的分辨率

电脑分辨率怎么设置

电脑 分辨率
电脑分辨率怎么设置

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

网页分辨率设置技巧

Web开发
网页分辨率设置技巧

如何修改Linux桌面分辨率

电脑入门
如何修改Linux桌面分辨率

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

InstaSize哪里设置图像分辨率

手机软件 应用软件
InstaSize哪里设置图像分辨率

在Linux下更改桌面分辨率

服务器
在Linux下更改桌面分辨率

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

ajax.js里面有内容显示效果根据ID

ajax.js里面有内容显示效果根据ID

升级Win10正式版后出现禁用连接错误的解决方法

升级Win10正式版后出现禁用连接错误的解决方法
下拉加载更多内容 ↓