首页 随笔 乐走天涯 程序资料 评论中心 Tag 论坛 其他资源 搜索 联系我 关于 RSS

第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楼,发表你的评论和意见 ↓

发表你的评论
如果你想针对此文发表评论, 请填写下列表单:
姓名: * 必填 (Twitter 用户可输入以 @ 开头的用户名, Steemit 用户可输入 @@ 开头的用户名)
E-mail: 可选 (不会被公开。如果我回复了你的评论,你将会收到邮件通知)
反垃圾广告: 为了防止广告机器人自动发贴, 请计算下列表达式的值:
3 x 5 + 1 = * 必填
评论内容:
* 必填
你可以使用下列标签修饰文字:
[b] 文字 [/b]: 加粗文字
[quote] 文字 [/quote]: 引用文字

 
首页 随笔 乐走天涯 猎户星 Google Earth 程序资料 程序生活 评论 Tag 论坛 资源 搜索 联系 关于 隐私声明 版权声明 订阅邮件

程序员小辉 建站于 1997 ◇ 做一名最好的开发者是我不变的理想。
Copyright © XiaoHui.com; 保留所有权利。