zoukankan      html  css  js  c++  java
  • QQ2008自动聊天精灵delphi源码

    QQ2008自动聊天精灵delphi源码

     
    unit Unit1;
    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.
  • 相关阅读:
    MD5加密
    HDU 1800 Flying to the Mars(Trie字典树 upper_bound)
    POJ 3624 Charm Bracelet(01背包 基础)
    hdu 1005 (规律 循环节)
    ZOJ 3710 friends(暴力 枚举 水)
    zoj 3714 Java Beans(枚举 水)
    hdu 1108 最小公倍数(数论基础 水)
    POJ 1797 Heavy Transportation(dijkstra )
    poj 3984 迷宫问题(bfs 打印路径)
    报数游戏(模拟 枚举)
  • 原文地址:https://www.cnblogs.com/china1/p/3395039.html
Copyright © 2011-2022 走看看