⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitmainform.pas

📁 模拟键盘输入的QQ聊天机器人。 免责声明:本软件版权归下载者所有
💻 PAS
字号:
unit UnitMainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Tlhelp32;

type
  TMainForm = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    ComboBox1: TComboBox;
    SpeedButton1: TSpeedButton;
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure SpeedButton1Click(Sender: TObject);
  private
    function ListQQ: Integer;
    function CallQQ: boolean;
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

function TMainForm.ListQQ: Integer;
var
  i: integer;
  hcurrentwindow: hwnd;
  sztext: array[0..254] of char;
begin
  i := 0;
  ComboBox1.Items.Clear;
  ComboBox1.Text := '';
  hcurrentwindow := GetWindow(handle, gw_hwndfirst);
  while hcurrentwindow<>0 do
  begin
    if GetWindowText(hcurrentwindow, @sztext, 255)>0 then
    begin
      if ((pos('与', strpas(@sztext))>0) and (pos('聊天', strpas(@sztext))>0))
      or (pos('讨论组', strpas(@sztext))>0)
      or (pos('群', strpas(@sztext))>0)
      then
      begin
        inc(i);
        ComboBox1.Items.Add(strpas(@sztext));
      end;
    end;
    hcurrentwindow := GetWindow(hcurrentwindow, gw_hwndnext);
  end;
  if ComboBox1.Items.Count=1 then
    ComboBox1.ItemIndex := 0;
  Result := i;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  ListQQ;
end;

function TMainForm.CallQQ: boolean;
var
  strWinName: string;
  npad: HWND;
  i, j: integer;
begin
  strWinName := Trim(ComboBox1.Text);
  if strWinName='' then Exit;
  Npad := FindWindow(nil, PChar(strWinName));
  if npad = 0 then
  begin
    Result := False;
    Exit;
  end;

  BringWindowToTop(Npad); //使其成为focus之window

  i := ord('1');
  keybd_event(i, 0, 0, 0); //keydown此键
  keybd_event(VK_RETURN, 0, 0, 0); //换行
  keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);

  keybd_event( VK_TAB, MapVirtualKey( VK_TAB, 0 ), 0 , 0 );
  keybd_event( VK_TAB, MapVirtualKey( VK_TAB, 0 ), KEYEVENTF_KEYUP , 0 );

  keybd_event( VK_RETURN, MapVirtualKey( VK_RETURN, 0 ), 0 , 0 );
  keybd_event( VK_RETURN, MapVirtualKey( VK_RETURN, 0 ), KEYEVENTF_KEYUP , 0 );
  
  Result := True;
end;

procedure TMainForm.Button2Click(Sender: TObject);
begin
  CallQQ;
  Application.ProcessMessages;  
end;

procedure TMainForm.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i:=0 to 99 do
  begin
    if not CallQQ then break;
    Application.ProcessMessages;
    Sleep(200);
  end;
end;

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := CaFree;
end;

procedure TMainForm.SpeedButton1Click(Sender: TObject);
begin
  ListQQ;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -