QQ2008自动聊天精灵delphi源码
QQ2008自动聊天精灵delphi源码
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls,Registry, ExtDlgs, bsSkinShellCtrls, BusinessSkinForm, bsSkinBoxCtrls, bsSkinCtrls;
type TTform1 = class(TForm) GroupBox1: TGroupBox; Bevel1: TBevel; Label2: TLabel; Bevel2: TBevel; Bevel3: TBevel; Bevel4: TBevel; FindBtn: TSpeedButton; Image1: TImage; SendBtn: TSpeedButton; LoadBtn: TSpeedButton; loaddialog1: TOpenDialog; ListBox1: TListBox; bsBusinessSkinForm1: TbsBusinessSkinForm; bsSkinOpenDialog1: TbsSkinOpenDialog; AoutBtn: TSpeedButton; procedure FormCreate(Sender: TObject); procedure FindBtnClick(Sender: TObject); procedure LoadBtnClick(Sender: TObject); procedure SendBtnClick(Sender: TObject); procedure AoutBtnClick(Sender: TObject);
private { Private declarations } public { Public declarations } end;
var Tform1: TTform1;
implementation {$R *.dfm} //定义一组全程变量 const WinCaption07:string='聊天中'; WinCaption08:string='交谈中'; var x:integer; TextBoxNum:shortint; //QQ输入框是第几个对话框 SendButtonNum:shortint; //发送按钮是第几个按钮 QQInputBoxHandle,SendButtonHandle:HWND;//发送按钮和输入框句柄 StopSend:boolean; //=====================延时时程序=================== procedure Delay(msecs:integer); var FirstTickCount:longint; begin FirstTickCount:=GetTickCount; repeat if STopSend then exit ; Application.ProcessMessages; until ((GetTickCount-FirstTickCount) >= Longint(msecs)); end; //=====================得到窗口内容=================== function GetWindowStr(Wnd: HWND): String; var Len: Integer; begin Len := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0); SetLength(Result, Len + 1); SendMessage(Wnd, WM_GETTEXT, Length(Result), Longint(@Result[1])); end; //=====================得到所属类=================== function GetWindowClass(Wnd: HWND): String; begin SetLength(Result, 65); GetClassName(Wnd, @Result[1], 65); end;
//=====================查找子控件=================== function EnumChildProc(Wnd: HWND; lParam: LPARAM): Boolean; stdcall; var S, C: String; begin S := GetWindowStr(Wnd); C := GetWindowClass(Wnd); X:=X+1;
if Pos('RichEdit', C) =1 then begin TextBoxNum:=TextBoxNum+1; if TextBoxNum =3 then QQInputBoxHandle :=Wnd; end; if (pos('发送',S) =1) and (Pos('Button', C) =1) then begin if SendButtonNum=2 then SendButtonHandle:=wnd; SendButtonNum:= SendButtonNum+1; end; Result := True; end; //=====================定义一个回调函数===================
function EnumWindowsProc(Wnd: HWND; lParam: LPARAM): Boolean; stdcall; var S, C: String; begin S := GetWindowStr(Wnd); C := GetWindowClass(Wnd); //看是07和08版QQ的标题吗? if (Pos(WinCaption07, S) >0) or (Pos(WinCaption08, S) >0) then begin //如果找到QQ窗体则找出所有控件 if not EnumChildWindows(Wnd, @EnumChildProc, lParam) then ; Result := False; end; Result := True; end; //=====================主表单初始化=================== procedure TTform1.FormCreate(Sender: TObject); begin //初始化表单和列表框颜色 Tform1.color:=tcolor(rgb(236,233,216)); ListBox1.color:=Tcolor(rgb(96,96,97)); end;
//=====================查找QQ主窗体=================== procedure TTform1.FindBtnClick(Sender: TObject); begin X:=0; TextBoxNum:=1; SendButtonNum:=1;
try if not EnumWindows(@EnumWindowsProc, Integer(Pointer(ListBox1))) then ; finally if X = 0 then messagebox( Tform1.Handle,'不能找到QQ发送窗口!','错误',MB_OK+MB_DEFBUTTON1 +MB_ICONHAND); end; listbox1.ItemIndex:=0; if (QQInputBoxHandle<>0) and (SendButtonHandle <>0) then SendBtn.Enabled :=True; end;
//=====================装入聊天记录=================== procedure TTform1.LoadBtnClick(Sender: TObject); begin if bsSkinOpenDialog1.execute then begin ListBox1.Clear; ListBox1.Items.LoadFromFile(bsSkinOpenDialog1.filename); end; end;
//=====================可中断的连续发送================ procedure TTform1.SendBtnClick(Sender: TObject); var SendTxt:string; begin
StopSend := False; //把是否安暂停设为不停 if SendBtn.Caption='发 送' then begin SendBtn.Caption :='暂 停'; end else begin //如果是暂停按钮按下 SendBtn.Caption:='发 送'; StopSend:=True; end;
while (listbox1.ItemIndex<ListBox1.Items.Count-1) and (not StopSend) do begin listbox1.ItemIndex:=listbox1.ItemIndex+1;
//如果导入的文本文件里有空行,则跳过空行 while ListBox1.Items.strings[listbox1.ItemIndex]='' do listbox1.ItemIndex:=listbox1.ItemIndex+1;
if STopSend then exit; //如果暂停键按下 SendTxt :=ListBox1.Items.strings[listbox1.ItemIndex]; SendMessage(QQInputBoxHandle,EM_REPLACESEL,180,Integer(Pchar(SendTxt))); delay(300); SendMessage(SendButtonHandle,BM_CLICK,0,0); end; end;
procedure TTform1.AoutBtnClick(Sender: TObject); begin messagebox( Tform1.Handle,'QQ2008!','关于',MB_OK+MB_DEFBUTTON1 +MB_ICONQUESTION ); end;
end.
QQ2008自动聊天精灵delphi源码的更多相关文章
- [源码]Delphi源码免杀之函数动态调用 实现免杀的下载者
[免杀]Delphi源码免杀之函数动态调用 实现免杀的下载者 2013-12-30 23:44:21 来源:K8拉登哥哥's Blog 自己编译这份代码看看 过N多杀软 没什么技 ...
- 转换GMT秒数为日期时间格式-Delphi源码
转换GMT秒数为日期时间格式-Delphi源码.收藏最近在写PE分析工具的时候,需要转换TimeDateStamp字段值为日期时间格式,这是Delphi的源码. //把GMT时间的秒数转换成日期时间格 ...
- http代理工具delphi源码
http://www.caihongnet.com/content/xingyexinwen/2013/0721/730.html http代理工具delphi源码 以下代码在 DELPHI7+IND ...
- 【krpano】二维码自动生成插件(源码+介绍+预览)
简介 在krpano生成的全景支持HTML5在手机中展示,而在手机中打开全景网址时不方便,需要输入网址. 最近研究了如何让krpano全景根据自己当前的网址,自动生成二维码,并在电脑浏览时,可以展示出 ...
- Maven引入依赖后自动下载并关联源码(Source)
好多用 Maven 的时候会遇到这样一个棘手的问题: 就是添加依赖后由于没有下载并关联源码,导致自动提示无法出现正确的方法名,而且不安装反编译器的情况下不能进入方法内部看具体实现 . 其实 eclip ...
- Android接受验证码自动填入功能(源码+已实现+可用+版本兼容)
实际应用开发中,会经常用到短信验证的功能,这个时候如果再让用户就查看短信.然后再回到界面进行短信的填写,难免有多少有些不方便,作为开发者.本着用户至上的原则我们也应该来实现验证码的自动填写功能,还有一 ...
- IOS无限自动循环滚动banner(源码)
本文转载至 http://blog.csdn.net/iunion/article/details/19080259 目前有很多APP都开始使用一些滚动banner,我自己也做了一个,部分算法没有深 ...
- Eclipse_插件_05_自动下载jar包源码插件
一.Java Source Attacher 1.下载 官网:http://marketplace.eclipse.org/content/java-source-attacher#.U5RmTePp ...
- iOS精美过度动画、视频会议、朋友圈、联系人检索、自定义聊天界面等源码
iOS精选源码 iOS 精美过度动画源码 iOS简易聊天页面以及容联云IM自定义聊天页面的实现思路 自定义cell的列表视图实现:置顶.拖拽.多选.删除 SSSearcher仿微信搜索联系人,高亮搜索 ...
随机推荐
- 并发-AtomicInteger源码分析—基于CAS的乐观锁实现
AtomicInteger源码分析—基于CAS的乐观锁实现 参考: http://www.importnew.com/22078.html https://www.cnblogs.com/mantu/ ...
- EF Code-First 学习之旅 配置一对一的关系
1对1.1对0 的关系 例如:Entity1与零个或一个Entity2的实例有关系 public class Student { public Student() { } public int Stu ...
- Win10/Server2016镜像集成离线补丁
Win10镜像集成离线补丁 因为正常安装系统后再打补丁比较漫长,可以事先做好打过补丁的iso,备将来使用. 以管理员身份运行cmd,然后通过dism提取.挂载.集成补丁.保存install.wim镜像 ...
- oepnstack笔记
openstack简介: 组件:Nova 提供计算资源池neutron 网络资源管理horizon 基于openstack API借口使用django开发的web管理 组件:Nova 提供计算资源池n ...
- 双系统在Linux下查看win的硬盘(Ubuntu 16.04 挂载Windows的 硬盘)
一般情况下,Linux的桌面系统能够直接查看到计算机各个硬盘的文件情况 但是,当我们想通过命令行查看Windows下的硬盘的时候,会发现在 /media/ (一般Windows下的盘会挂载到这里)文件 ...
- 下载并安装Prism5.0库 Download and Setup Prism Library 5.0 for WPF(英汉对照版)
Learn what’s included in Prism 5.0 including the documentation, WPF code samples, and libraries. Add ...
- wc.exe(c语言实现)
Github项目地址:https://github.com/zhongciting2009/wc WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写 ...
- DOM解析XML文件例子
DOM解析XML文件是一次性将目标文件中的所有节点都读入,然后再进行后续操作的方式. 一般分为以下几步: 1. 定义好目标XML文件路径path . 2. 实例化DOM解析工厂对象 ,Document ...
- Java丨简单的登录过滤器实现方法
过滤过滤,实际就是把需要和不需要的东西分开! 今天来说道说道我们程序中的‘登录过滤器’ ,首先我们看看一下面的问题: 1.“登录过滤器”是干什么用的? 1)“登录过滤器”就是为了防止在用户没有登录的情 ...
- HAWQ取代传统数仓实践(十一)——维度表技术之维度合并
有一种合并维度的情况,就是本来属性相同的维度,因为某种原因被设计成重复的维度属性.例如,在销售订单示例中,随着数据仓库中维度的增加,我们会发现有些通用的数据存在于多个维度中.客户维度的客户地址相关信息 ...