游戏像劲舞团那样,只要进度条达到某个点,就按下键盘上的某个键就可以了,由于进度条跑得很快,我老是来不及按下,或按下过早。于是就有这个想法,转入正题:
我的思路是,首先:
var
  point:Tpoint;
  MyhDC : HDC;
begin
  GetCursorPos(point);
  scrx1:=point.x;
  scry1:=point.y;       
//获取到那个点的屏幕坐标,然后
  temp := GetPixel(MyhDC,scrx1, scry1);
  rr := GetRValue(temp);
  gg := GetGValue(temp);
  bb := GetBValue(temp);
取得该点的颜色。放一个Timer作为计数器,每过一个很短的时间,就取这个点的颜色去判断。(颜色条走到那里跟没走到那里的颜色我都知道)
如果是进度条已经到那里了(点是红色的),就
    keybd_event(58,0,0,0);  
 按下某个键。
这个思路比较想得理所当然一样,呵呵
问下如果遇到一下问题怎么解决: 
1、我想因为进度条跑得太快了,所以我可能要把 Timer 的 Interval调得很小,大概 20左右吧,这样的话会不会占CPU很厉害搞到我电脑很卡?(我不是专门搞DELPHI的,只要不至于让我电脑完全卡到不行就可以了,电脑是CPU,赛扬4,2.66G,内存512,显卡256M128bit)2、我的显示器是液晶的,不知道是游戏占资源太大的原因,还是显示器刷新的原因。总感觉进度条有点跳(在美工的电脑上不会)。我用这样的方式去处理,会不会有进度条一次跳过我要的点太远的情况。也就是说我上面的取点,跟我屏幕上看到的东西,有没有直接的关系?
麻烦各位大侠就上面的思路给点建议,如果有好的方法也说下哦,谢谢了

解决方案 »

  1.   

    keybd_event(58,0,0,0);  
    按下某键后,记得立即
    keybd_event(58,0,2,0);  
    释放,才真正完成一次按键。
    至于你的问题
    1显然不会。
    2有,估计是内存不够。导致游戏本身卡
      

  2.   

    有大侠在吗?
    我的方法不行哦,奇怪了,以前别的游戏都可以了,现在用这个方法,得到的颜色总是黑色,
    即RGB都是 0 。为什么会这样呢,有什么办法可以得到那个点的颜色?
      

  3.   

    代码注入 
    写个汇编的函数 函数里自己给自己发 message 
    先jmp 到自己的代码 再jmp回去.
      

  4.   

    不懂在 Delphi 里面怎么嵌入汇编~~~~没有简单直接点的方法了吗~~或者楼上能不能给点代码参考一下?
      

  5.   

    用TIME控件怕不行吧.
    还是用线程去检查几个标识点的颜色来确定是否到达。
    考虑到延迟情况可以判断前一两毫米的颜色。
      

  6.   

    用 Timer控件可能不是很精确,但是很方便哦我试过了,把光标放在Flash,或者电影上,都能自动变化颜色,在其他一些游戏上也行但是放到我想要的那个游戏上就很奇怪,每次都是RGB为 0,黑色的,难道是因为那个游戏有金山游盾的关系?(开游戏前会自动运行那个盾,之后那些按键精灵、加速精灵等都无法运行了)我试过一些在网上下载的屏幕取点工具,也是无法得到点的颜色,但是用 HprSnap6 能截图,所以我想应该还是有办法的,不知道是否要用更底层的函数去处理,等到高手解答
      

  7.   

    是DirectX游戏吧,显示不经过GUI的,GetPixel函数没用的,要用专门的DirectX函数.
     HprSnap6 能截图是设置里你打开了DirectX截图功能,关了也是一片黑.
      

  8.   

    先游戏中按printscreen,
    看看能不能考到画图中,
    能就是啥盾的问题。
      

  9.   

    To hztltgg(我想我是风) ,是的,是 3D 游戏,Direct9
                             能指点下大概用哪方面的 DirectX函数 吗?
    To AFIC(AFIC),游戏中printscreen 本来就是那个游戏里面截图用的~~~
      

  10.   

    这个我就帮不了了,DirectX我也不是很熟,不是简单的一个API函数啦,而且这个还牵涉到你这个外挂进程读取那个游戏进程的DIRECTX显存内容,太复杂了,你等等看有游戏编程熟悉的人问问吧