上一页 1 2 3 4 5 6 7 8 9 10 ··· 30 下一页
摘要: 一直有人问如何在DirectX全屏游戏中弹出窗口就象金山游侠一样.我答应过要给出原码,只是一直没有时间整理,不过现在总算是弄玩了.代码不长,大致作了些注释,但愿你能看懂:)按照我的说明一步步作应该就能成功,但有时可能不行,为什么?我也不知道,或许是你哪一步做错了,或者是Delphi的问题?天知道,但大多数时候按照我给出的步骤,这些代码应该能实现我们的目标.下面的代码经过了一定的测试,但并没有刻意设计保证程序兼容性和稳定性的代码,所以不能保证在所有的机器上正常运行.如果死机或者花屏了,那么很不幸它不适合你,在找些别人写的类似的代码吧(不过以前有人公开过类似的代码吗?如果有请mail给我:)试一试 阅读全文
posted @ 2013-06-23 20:51 Max Woods 阅读(671) 评论(0) 推荐(0) 编辑
摘要: 最近接触到这个函数,因此了解了一下,总结一下列在这。我了解它的出发点是如何通过它向活动窗口输入字符,这是很多程序都有的功能(我猜Visual Assist X就用了这个功能)。根据MSDN,此函数模拟按键操作,将一些消息插入键盘或鼠标的输入流中,Windows对它进行处理,生成相应的WM_KEYDOWN或WM_KEYUP事件,这些事件与普通键盘输入一起进入应用程序的消息循环,它们不仅可以转换为WM_CHAR消息,还可以转换为其它(诸如加速键)等消息。使用它来发送字符消息,并没有看起来那么简单。这有两个需要考虑的问题:1. 输入法的转换。例如需要向活动窗口发送一些英文字符,我们可能想象这样来实现 阅读全文
posted @ 2013-06-21 00:11 Max Woods 阅读(411) 评论(0) 推荐(0) 编辑
摘要: keybd_event 函数功能:该函数合成一次击键事件。系统可使用这种合成的击键事件来产生WM_KEYUP或WM_KEYDOWN消息,键盘驱动程序的中断处理程序调用keybd_event函数。在Windows NT中该函数己被使用SendInput来替代它。--------------------------------------------------http://www.cnblogs.com/yedaoq/archive/2010/12/30/1922305.htmlSendInput模拟键盘输入的问题最近接触到这个函数,因此了解了一下,总结一下列在这。我了解它的出发点是如何通过它. 阅读全文
posted @ 2013-06-21 00:09 Max Woods 阅读(1709) 评论(0) 推荐(0) 编辑
摘要: 可以截取layered窗口(包括透明窗口)的代码:procedure CaptureScreen(AFileName: string);const CAPTUREBLT = $40000000;var hdcScreen: HDC; hdcCompatible: HDC; bmp: TBitmap; hbmScreen: HBITMAP;begin hdcScreen := CreateDC('DISPLAY', nil, nil, nil); hdcCompatible := CreateCompatibleDC(hdcScreen); hbmScreen := Create 阅读全文
posted @ 2013-06-18 15:33 Max Woods 阅读(2455) 评论(0) 推荐(0) 编辑
摘要: 昨天晚上,有个朋友告诉我他想屏蔽掉键盘的WIN键,问我有没有简单的办法,回来就做了一个简单的示例。这个示例中使用到一个低级的键盘钩子,它是从windows2000引进的,所以必须在win2000以上的版本才被支持,而且关于低级键盘钩子的部分在delphi中并没有引入。所以对照C语言的资料将它转换为delphi语言的格式,下面是使用delphi格式声明的一个常量和一个数据结构:const WH_KEYBOARD_LL = 13;typePBDLLHOOKSTRUCT = ^TBDLLHOOKSTRUCT;TBDLLHOOKSTRUCT = recordvkCode: DWORD;scanCode 阅读全文
posted @ 2013-06-15 02:33 Max Woods 阅读(1188) 评论(0) 推荐(0) 编辑
摘要: 如果你是基于Windows操作系统做系统集成的,你可能希望你的最终产品独占系统资源。你希望规范用户行为,比如你不希望用户通过按Ctrl+Alt+Del终止某个进程,或者按下Win键弹出开始菜单,或者按下Alt+Tab组合键切换到别的应用程序。笔者已有相关一篇文章《Win2K/NT下屏蔽Ctrl+Alt+Del的响应》,介绍了如何通过GINA编程接口屏蔽Ctrl+Alt+Del的响应。作为续篇,本文将继续介绍屏蔽Win键和Alt+Tab组合键的方法。 由于这些按键的响应是系统级的,我们不可能简单地通过某个程序来控制它们。因此,我们需要使用微软提供的另外一种编程接口——钩子(Hook)。大... 阅读全文
posted @ 2013-06-15 02:32 Max Woods 阅读(925) 评论(0) 推荐(0) 编辑
摘要: 这个Delphi单元主要是把键盘按键保存在堆栈线性队列中,可以在软件界面自己查看按键内容,同时还保存了按键信息在c:\logfiles.txt的文本文件中,方便以后的查看。。。安装全局钩子函数 KeyLogHook := SetWindowsHookEx(WH_jOURNALRECORD,KeyLogProc,HInstance,0);卸载钩子函数是 UnhookWindowsHookEx(KeyLogHook); 使用过程中好像有点问题,软件开机自启动的时候,会让Lingoes的启动无法正常启动,提示内存访问错误什么的,有时候莫名其妙钩子会失效,截获不了键盘按键,可能用dll的好点吧。。.. 阅读全文
posted @ 2013-06-15 02:28 Max Woods 阅读(759) 评论(0) 推荐(0) 编辑
摘要: 小读了一下《Delphi下深入Windows核心编程》感觉里面的东西写得还算可以,至少有学到东西于是整理了一下书中的代码,并加上注注释发上来首先是最重要的键盘钩子使用的DLL:unit UnitDll;interfaceuses Windows;const BUFFER_SIZE = 16 * 1024; // 文件映射到内存的大小const HOOK_MEM_FILENAME = 'MEM_FILE'; // 映像文件名const HOOK_MUTEX_NAME = 'MUTEX_NAME'; // 互斥名type // 共享结构 TShared = reco 阅读全文
posted @ 2013-06-15 02:26 Max Woods 阅读(1563) 评论(0) 推荐(0) 编辑
摘要: 实现适时监视键盘,并将按键信息保存在TXT文件中的程序 Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能。钩子的种类很多,每种钩子可以截获并处理相应的消息,如键盘钩子可以截获键盘消息,外壳钩子可以截取、启动和关闭应用程序的消息等。本文在VC6编程环境下实现了一个简单的键盘钩子程序,并对Win32全局钩子的运行机制、Win32 DLL的特点、VC6环境下的MFC DLL以及共享数据等相关知识进行了简单的阐述。 一.Win32全局钩子 阅读全文
posted @ 2013-06-15 02:09 Max Woods 阅读(1027) 评论(0) 推荐(0) 编辑
摘要: 引言 在科研生产中对研制、调试操作的记录是非常有必要而且是有很重要价值的。通过对记录信息的分析,可以在事故发生后准确的分析出事故的起因、操作是否存在失误等许多重要线索。通常需要记录的信息是多种多样的,如环境温度记录、软件运行记录、文件访问记录等等。这里将以键盘信息记录为例来讲述类似的实验信息自动记录的一般实现方法。 由于需要记录当前系统下所有应用程序的键盘录入记录,因此必须采取某种特殊的技术来实现本进程(监视程序)对外部进程键盘操作信息的获取。这种技术便是本文将要论述的核心--系统全局钩子。本文下面将对Win32平台下全局钩子的运行机制进行介绍并给出了一个具体的由VC++6.0编写的捕获键.. 阅读全文
posted @ 2013-06-15 02:07 Max Woods 阅读(998) 评论(0) 推荐(0) 编辑
摘要: 全局热键的意思是指,当程序并不是当前窗口的时候,按下热键也可以响应。以前做这种功能用过一种方法,是编写一个键盘钩子的DLL,过滤系统中所有的键盘消息,当然还要再写一个程序去调用它。这种方法做起来麻烦了一起,不过倒是黑客窃取键盘密码雏形。这里介绍的方法是利用windows api直接注册热键,分三步走:1、增加一个全局Atom2、为Atom注册一个全局热键(这样相应的键盘消息就会分配给本程序了)3、写相应的HotKey响应处理代码再进一步,如果需要让用户自定义热键,就需要在界面上放一个标准的THotKey控件,这个控件允许用户自己输入热键,不过它的输出是TShortCut,在Menus单元中有几 阅读全文
posted @ 2013-06-15 01:52 Max Woods 阅读(2480) 评论(0) 推荐(0) 编辑
摘要: 当按下一键时,产生mark码,产生一次IRQ1中断。放开键时,产生break码,产生一次IRQ1中断。因此:当按下A键放开,实际上产生了两次IRQ1中断break是mark码的bit7置1得来,也就是:break=mark+0x801、scancode集这里只说一般日常应用中的键盘码集set2(有set1、set2以及set3)基本scancode:绝大多数scancode是1byte的。扩展scancode:由e0、e1或e2引导特殊的PrintScreen/SysRq键:e02ae037物殊的Pause/Break键:e11d45e19dc52、小键盘scancode表keymark(He 阅读全文
posted @ 2013-06-14 15:21 Max Woods 阅读(1459) 评论(0) 推荐(0) 编辑
摘要: The following table shows the symbolic constant names, hexadecimal values, and mouse or keyboard equivalents for the virtual-key codes used by the system. The codes are listed in numeric order.Constant/valueDescriptionVK_LBUTTON0x01Left mouse buttonVK_RBUTTON0x02Right mouse buttonVK_CANCEL0x03Contro 阅读全文
posted @ 2013-06-14 15:17 Max Woods 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 四、BitmapData.pas的使用(注:以上压缩包中的BitmapData.pas文件有个小BGU,主要是截取鼠标指针的图片时没有考虑当前的背景颜色,始终为黑色。在本贴三楼的压缩包中有更新后的BitmapData.pas文件下载。) 在上面的压缩包中是BitmapData.pas使用的示范程序,BitmapData.pas文件可以从压缩包中获得。在BitmapData.pas文件中我将位图数据封装成了类TBDBitmapData,以便于使用。另外我编写一系列的函数用以BGR格式颜色的构建、转换、模糊比较。注意在BitmapData.pas文件中我定义了一些常量,这些常量只是为了增加程序的. 阅读全文
posted @ 2013-06-14 12:11 Max Woods 阅读(1849) 评论(0) 推荐(0) 编辑
摘要: 三、找图找色 结合本文第一节和第二节的内容设计一个找图找色的程序应该不是问题。对于一个位图可以看成是由象素组成的矩阵,Top相当于y,Left相当于x,利用(Top,Left)可以象访问矩阵元素一样访问位图上的象素。查找过程就是对位图象素的遍历。相关的代码在BitmapData.pas文件中都有,这里就不重复了。在BitmapData.pas文件中我实现的查找过程主要还是一对一的比对,这是一种较慢的匹配算法。对于一些字符串匹配算法,在查找过程中可以在匹配失败时跳过一些字符从而加快查找的速度。在矩阵查找中也有类似的算法,但我没有找到比较好的算法,所以在实现上还是采用了一对一的比对。这就意味着查. 阅读全文
posted @ 2013-06-14 12:05 Max Woods 阅读(1403) 评论(0) 推荐(0) 编辑
摘要: 二、矩阵遍历 矩阵遍历是一个数据结构方面的问题。假设有一个矩阵Matrix,它共有RowCount行,每行有ColCount列,当利用y表示行数,x表示列数,那么利用Matrix[y,x]就可以访问矩阵中的任意元素。假设有一个10×10大小的矩阵,它的遍历方法有以下三种:此主题相关图片如下:(图1)在上图中矩阵中的数字表示遍历到元素的先后次序,箭头表示遍历的方向。第一种的一般遍历法在很多编程书上都有介绍,而且经常作为循环代码的示范程序使用。这种遍历方法稍加修改就可以做到从右上角开始、从左下角开始、从右下角开始。这种遍历方法很简单,这里就不多说了。与一般遍历相反,螺旋遍历在所有的编程书 阅读全文
posted @ 2013-06-14 12:03 Max Woods 阅读(1039) 评论(0) 推荐(0) 编辑
摘要: 前言 最近有好几个朋友都在问我找图找色的问题,奇怪?于是乎写了一个专门用于找图找色的单元文件“BitmapData.pas”。在这个单元文件中我实现了从文件中导入位图、屏幕截图、鼠标指针截图、在图片上查找子图、在图片上查找颜色等功能。在查找过程中可以设定颜色变化范围、可以从左到右从上到下查找、也可以从指定点向四周查找。关于这个文件的下载和使用,可以参考本文的第四节。下面详细说说这些功能的实现。一、数据提取 位图其实可以看成是一个由象素组成的矩阵,找图找色可以看成是象素值的比对。很多新手在设计这类的程序时喜欢使用TBitmap.Canvas.Pixels属性,这个属性其实是对API函数Get.. 阅读全文
posted @ 2013-06-14 12:02 Max Woods 阅读(1549) 评论(0) 推荐(0) 编辑
摘要: unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;typeTest=record a: Integer; b: Integer; end; TForm1 = class(TForm) btn1: TButton; memo1: TMemo; procedure btn1Click(Sender: TObject); private { Private declara... 阅读全文
posted @ 2013-06-13 14:39 Max Woods 阅读(1377) 评论(0) 推荐(0) 编辑
摘要: 64位Wnidows 里面有个叫Wow64的模拟器技术,可以使32位的程序在64位Windows 上运行。 当你想在程序里面针对32b位/ 64位系统执行不同代码的时候, 需要判断操作系统是32位还是64位。 使用 Windows API函数GetNativeSystemInfo可以获得这个信息。代码示例:SYSTEM_INFO si;GetNativeSystemInfo(&si);if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || si.wProcessorArchitecture != PROCESSO 阅读全文
posted @ 2013-06-11 17:25 Max Woods 阅读(492) 评论(0) 推荐(0) 编辑
摘要: delphi语言在传统的Records类型的基础上增加了许多像类一样的高级功能,如:Records可以有属性和方法(包括构造constructors),类属性,类方法,类静态字段和内嵌类型。下面这个示例演示定义一个功能像类一样的Records:typeTMyRecord = recordtypeTInnerColorType = Integer;varRed: Integer;class varBlue: Integer;procedure printRed();constructor Create(val: Integer);property RedProperty: TInnerColor 阅读全文
posted @ 2013-06-11 09:13 Max Woods 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 本文转自http://hi.baidu.com/homejun/blog/item/3cd2cd1b6c60f4faaf5133d0.htmldelphi2006语言新特性——类静态字段、类属性类静态字段 Class Fields(直译应为类字段,为避免混淆,本文统称类静态字段)类静态字段是类的一种特殊字段,它可以在类没有实例化时访问(普通的实例字段必须在类实例化后才能访问)。类静态字段储存的值可以被所有实例共享。(很有意思,赋一下值,所有类,实例都会改变,感觉很有用)你可以用关键字class var在类的声明部分定义一个类静态字段块,所有在class var 以后定义的字段都是静态存储的。当 阅读全文
posted @ 2013-06-11 08:59 Max Woods 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 设计一个PC游戏,键盘鼠标的输入是绝不能少。Windows也提供了诸如WM_LBUTTONDOWN、WM_RBUTTONUP等鼠标消息以及WM_KEYDOWN、WM_KEYUP等键盘输入消息。但是DirectInput中仍然提供了对鼠标键盘的支持,其原因就是DirectInput提供一个更直接更快捷的对输入设备的访问方法。就象我们在DOS下直接接管键盘中断,而不是去用什么讨厌的INT16来处理键盘输入一样(用INT16来处理键盘输入其弊端在《金庸群侠传》中显得尤为明显,人物在走路之前总要顿那么一下,就是这一下让我觉得非常之不爽!其原因我想我也不用罗嗦了)。 当然Windows的键盘消息比之I. 阅读全文
posted @ 2013-06-11 01:27 Max Woods 阅读(1260) 评论(0) 推荐(0) 编辑
摘要: 键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作。但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件。那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows中响应键盘事件的机制。当用户按下键盘上的一个键时,键盘内的芯片会检测到这个动作,并把这个信号传送到计算机。如何区别是哪一个键被按下了呢?键盘上的所有按键都有一个编码,称作键盘扫描码。当你按下一个键时,这个键的扫描码就 阅读全文
posted @ 2013-06-11 01:24 Max Woods 阅读(1143) 评论(0) 推荐(0) 编辑
摘要: 1 // DInputKeyboard.h: interface for the CDInputKeyboard class. 2 // 3 ////////////////////////////////////////////////////////////////////// 4 5 #pragma once 6 7 #define DIRECTINPUT_VERSION 0x800 8 #include <afxtempl.h> 9 #include <dinput.h> 10 #pragma comment(lib, "dinput8.lib&quo 阅读全文
posted @ 2013-06-11 01:20 Max Woods 阅读(1208) 评论(0) 推荐(0) 编辑
摘要: 1 #include <winnls.h> 2 #include <malloc.h> 3 LPCSTR AnsiToUtf8(LPCSTR Ansi) 4 { 5 int WLength = MultiByteToWideChar(CP_ACP, 0, Ansi, -1, NULL, 0); 6 LPWSTR pszW = (LPWSTR) _alloca((WLength+1) * sizeof(WCHAR)); 7 MultiByteToWideChar(CP_ACP, 0, Ansi, -1, pszW, WLength); 8 9 int ALength = 阅读全文
posted @ 2013-06-11 01:17 Max Woods 阅读(636) 评论(0) 推荐(0) 编辑
摘要: 转载自:http://xylvhp.blog.163.com/blog/static/31123614201101104644542/首先是,头文件必须包含以下两个:#include <winable.h>#include <atlconv.h>前者是SendInput函数要用到,后者是字符串转换的时候要用到。void SendAscii(wchar_t data, BOOL shift){ INPUT input[2]; memset(input, 0, 2 * sizeof(INPUT)); if (shift) { input[0].type = INPUT_KE 阅读全文
posted @ 2013-06-10 02:03 Max Woods 阅读(412) 评论(0) 推荐(0) 编辑
摘要: 1.知道进程handle 获取进程名称。PROCESS_INFORMATION* processInfo =(PROCESS_INFORMATION*)pid(); HANDLE hProcess =processInfo->hProcess; char buffer[255]; ZeroMemory(buffer,255*sizeof(char)); GetModuleFileNameExA(hProcess,0,buffer,255*sizeof(char));2.知道进程handle,获取内存使用率PROCESS_INFORMATION* processInfo = (PROCES 阅读全文
posted @ 2013-06-09 22:14 Max Woods 阅读(1165) 评论(0) 推荐(0) 编辑
摘要: [转]http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/29cf2de9-412e-44dd-9050-174089d8e2a2/Simulating keyboard events:SendInput() is the function to use if DirectX applications need to receive the simulated keyboard events.This function injects keyboard instructions at driver level - so t 阅读全文
posted @ 2013-06-09 02:51 Max Woods 阅读(712) 评论(0) 推荐(0) 编辑
摘要: 微软雅黑字体在没有开启ClearType效果时显示会一塌糊涂,最近项目中因使用了雅黑字体,所以系统启动时候需要自动开启这个功能.网上大部份资料都是针对注册表的,几乎没有什么用.相关位置:HKEY_CURRENT_USER\Control Panel\Desktop类似如下:if NOT reg.ValueExists('FontSmoothing') then reg.WriteString('FontSmoothing','2');if NOT reg.ValueExists('FontSmoothingType') then 阅读全文
posted @ 2013-06-07 14:10 Max Woods 阅读(574) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/testcs_dn/article/details/7644410想修改窗体的非客户区,首先就得明白为什么要修改非客户区,什么是非客户区从窗体或控件来看,非客户区就是无法放置控件的区域,比如窗体的标题栏,和边框,菜单栏也是非客户区,菜单栏不是控件是画上去的文本框的边框,滚动条区域都是非客户区为什么要修改非客户区呢??原因是为了自绘,让边框好看一些,比如要加高窗体标题栏,就需要改非客户区,自绘非客户区会响应 WM_NCPAINT消息在这个消息里,你可以进行窗体,控件,非客户区的自绘好啦,现在转入正题,要修改非客户大小,必须处理 WM_NCCALCSIZE 阅读全文
posted @ 2013-06-06 14:33 Max Woods 阅读(1852) 评论(0) 推荐(0) 编辑
摘要: Windows Registry Editor Version 5.00; 视觉设置[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects]"VisualFXSetting"=dword:00000000以下两种办法刷新也无法立即生效。。但是手动设置能立即生效。。。由于以前做系统时把这个给去了 现在发现显示字体边缘模糊有锯齿。。。十分难堪。。。特此寻求解决方法。。DllCall("user32.dll","int",&quo 阅读全文
posted @ 2013-06-06 02:05 Max Woods 阅读(983) 评论(0) 推荐(0) 编辑
摘要: 以下两个函数可以为应用程序中的各子窗口显示一个任务条到任务栏并更改它们的图标。对那些象QQ一样隐藏主窗口的应用程序特别有用。//函数用途:更改一个窗口的图标并将其显示在任务栏、任务切换条、任务管理器里//参数说明://hWnd要改变图标的窗口句柄//hLargeIcon显示到任务切换条上的图标32*32//hSmallIcon显示到除任务切换条之外的图标16*16//hIcon显示的图标,32*32,在显示到任务切换条之外的其余地方时会被自动压缩成16*16的。//注释://此函数对于模式对话框无能为力。//如果HICON为NULL,函数不改变窗口图标,但是将原有图标显示到任务栏、//任务切换 阅读全文
posted @ 2013-06-05 23:35 Max Woods 阅读(706) 评论(0) 推荐(0) 编辑
摘要: 由于本机系统不准确,所以决定从Internet 获取来校正系统,说干就干。程序设计步骤1、新建一个工程;2、在窗体上放一个TEdit控件和一个TClientSocket(在Internet页下)控件。TEdit用来显示取得的格林尼治转化成北京后的,TClientSocket用来从Internet 获取的格林尼治;3、程序代码procedure TForm1.FormCreate(Sender: TObject);beginClientSocket1.Host :=‘tick.usno.navy.mil‘;// 美国海军天文台;ClientSocket1.Port :=13;ClientSock 阅读全文
posted @ 2013-06-05 17:11 Max Woods 阅读(633) 评论(0) 推荐(0) 编辑
摘要: // Prepare pipe handles for standard output redirectionSECURITY_ATTRIBUTES saAttr;// Set the bInheritHandle flag so pipe handles are inherited.saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);saAttr.bInheritHandle = TRUE;saAttr.lpSecurityDescriptor = NULL;HANDLE hReadPipe, hWritePipe;BOOL res = CreatePi 阅读全文
posted @ 2013-06-05 08:38 Max Woods 阅读(374) 评论(0) 推荐(0) 编辑
摘要: 前言 最近有好几个朋友都在问我找图找色的问题,奇怪?于是乎写了一个专门用于找图找色的单元文件“BitmapData.pas”。在这个单元文件中我实现了从文件中导入位图、屏幕截图、鼠标指针截图、在图片上查找子图、在图片上查找颜色等功能。在查找过程中可以设定颜色变化范围、可以从左到右从上到下查找、也可以从指定点向四周查找。关于这个文件的下载和使用,可以参考本文的第四节。下面详细说说这些功能的实现。一、数据提取 位图其实可以看成是一个由象素组成的矩阵,找图找色可以看成是象素值的比对。很多新手在设计这类的程序时喜欢使用TBitmap.Canvas.Pixels属性,这个属性其实是对API函数Get.. 阅读全文
posted @ 2013-05-29 16:49 Max Woods 阅读(658) 评论(0) 推荐(0) 编辑
摘要: AutoHotkey的源码,模糊找图和精确找图思路一样,也是用笨方法。原来的C代码比较难看懂,这里的delphi代码,很容易弄明白。以下是模糊的找图。如果需要,可以再做优化处理。注意我这里去掉了透明处理,需要的自己加上吧。因为用到了iif函数,别忘了uses IdGlobal;// 模糊判断,在大图里的(x,y)位置上是不是小图?// 其中nV是R,G,B的偏差值,0..255function BmpCmpEx(bmpBig,bmp:TBitmap;x,y:integer;nV:byte):boolean;var i,j:integer; row1, row2:pRGBTripArray; p 阅读全文
posted @ 2013-05-29 16:47 Max Woods 阅读(466) 评论(0) 推荐(0) 编辑
摘要: 以前一直以为找图比较难,后来看了AutoHotkey的源码,原来也就是笨方法。以下是精确的找图。因为已经很快,没再做优化处理。注意我这里去掉了透明处理,需要的自己加上吧。//精确判断,在大图里的(x,y)位置上是不是小图?function BmpCmp(bmpBig,bmp:TBitmap;x,y:integer):boolean;var i,j:integer; row1, row2:pRGBTripArray; p1,p2:TRGBTriple;begin result:=true; for j:=0 to bmp.Height-1 do begin row1:=bmpBig.ScanLi 阅读全文
posted @ 2013-05-29 16:46 Max Woods 阅读(808) 评论(0) 推荐(0) 编辑
摘要: 找色和色块,是模拟的重要基础。有时候,需要确定某点是否出现某种颜色,有时候需要判断色块是否出现在某位置有时候,需要看范围内是否出现色块。function IsColor(bmp:TBitmap; x,y:integer; c:TColor):boolean;var row:pRGBTripArray; p:TRGBTriple;begin row:=bmp.ScanLine[y]; p:=row[x]; result:=(p.rgbtBlue=GetBValue(c)) and (p.rgbtGreen=GetGValue(c)) and (p.rgbtRed=GetRValue(c));en 阅读全文
posted @ 2013-05-29 16:44 Max Woods 阅读(377) 评论(0) 推荐(1) 编辑
摘要: 模拟需要找色,找图等等功能,我们先要熟悉有关的知识。我们的目的是为了找色和找图,所以只用考虑只需要处理24B颜色(PF24BIT)。TColor值是以十六进制进行存储的,低三位分别表示红、绿、蓝三种基色的饱和度。var C:Tcolor R,G,B:Byte;TColor转换成RGB的值 R:=GetRValue(C); G:=GetGValue(C); B::=GetBValue(C);或 R:=C and $FF; G:=(C and $FF00) shr 8; B:=(C and $FF0000) shr 16;RGB转换成TColor的值 C:=StrToInt(IntToHex(B, 阅读全文
posted @ 2013-05-29 16:43 Max Woods 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 查找游戏窗口procedure FindGameWindow;var h:THandle; buf:array[0..255] of char;begin FillChar(buf,sizeof(buf),0); h := GetForegroundWindow(); while (h<>0) do begin GetWindowText(h, buf, 255); if (AnsiContainsStr(buf, '游戏标题名称')) then begin // 找到一个游戏窗口句柄,做记录或其他处理 end; h:=GetNextWindow(h,2); end 阅读全文
posted @ 2013-05-29 16:42 Max Woods 阅读(331) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 30 下一页