第6节 获取桌面 RGB 颜色


日期: 2000-07-25 14:00 | 联系我
关注我: Telegram, Twitter

  由于各种各样的原因,测试的目标程序, 经过一段时间后可能出现故障停止运行。这时,我们的软件应该能够检测到这一现象,若累计达到一定时间(如五分钟),则应该记录错误发出警告, 并将程序关闭重启。

  那么,如果检测程序的异常状态呢?下面讲述我摸索出来的几个原理:

  大多数程序出现异常时,会弹出一个错误窗口,这样就可以用前面所说的 EnunWindow 的方式,来判断是否状态改变。另外,有一些程序,状态发生改变之后,会在界面上反映出来。例如,QQ 成功登录之后,是一个金色的企鹅图标;如果没有登录成功,则是灰色的。这样的话,我们可以通过程序获取其界面上的某点,分析其RGB值,若为金色,则判断程序在登录状态。否,则在注销状态。

  我们要用到如下两个API函数:

CreateDC
The CreateDC function creates a device context (DC) for
 a device using the specified name. 

HDC CreateDC(
  LPCTSTR lpszDriver,        // driver name
  LPCTSTR lpszDevice,        // device name
  LPCTSTR lpszOutput,        // not used; should be NULL
  CONST DEVMODE* lpInitData  // optional printer data
);

GetPixel
The GetPixel function retrieves the red, green, blue (RGB) 
color value of the pixel at the specified coordinates. 

COLORREF GetPixel(
  HDC hdc,    // handle to DC
  int nXPos,  // x-coordinate of pixel
  int nYPos   // y-coordinate of pixel
);
  CreateDC用来建立一个设备场景。GetPixel用来获取设备场景中某逻辑坐标的RGB值。

  我的部分程序如下:

COLORREF CaptureRGB( )
{
  HDC hScreenDC;
  COLORREF color;

  hScreenDC = CreateDC("DISPLAY",NULL,NULL,NULL);
  color = GetPixel(hScreenDC,18,682);
  return color;
}

void CheckState()
{
  COLORREF Colors;
  short j=0;

  Colors = CaptureRGB();
  if ( Colors == 0x0000FF )
  {
    // 假定 绿色 是一种状态,在此处理
  }
  else
  {
    // 非绿色的处理
  }
}
  函数CaptureRGB()用来获取屏幕上某点的RGB值。为了简单起见,此处座标为一常数坐标(18,682)。在程序中,应该通过设定来获取坐标值。

  在函数中,用 if ( Colors == 0x0000ff) 来判断获取的颜色是否为指定的颜色。0x0000ff 是绿色的rgb值。

标签: VC 源码 | WINAPI | RGB

 文章评论
目前没有任何评论.

↓ 快抢占第1楼,发表你的评论和意见 ↓

当前页面是本站的 Google AMP 版本。
欲查看完整版本和发表评论请点击:完整版 »

 

程序员小辉 建站于 1997
Copyright © XiaoHui.com; 保留所有权利。