?? unit1.pas
字號:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls,StrUtils, Spin, Buttons;
type
TForm1 = class(TForm)
Timer1: TTimer;
Button1: TButton;
Timer5: TTimer;
Button3: TButton;
GroupBox1: TGroupBox;
Label2: TLabel;
Label4: TLabel;
memo1: TMemo;
Timer3: TTimer;
RadioGroup1: TRadioGroup;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Label1: TLabel;
Timer2: TTimer;
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
Label3: TLabel;
Label5: TLabel;
SpinEdit3: TSpinEdit;
SpeedButton1: TSpeedButton;
SpinEdit4: TSpinEdit;
Label6: TLabel;
Timer4: TTimer;
Label7: TLabel;
Label8: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer5Timer(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Timer3Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure Timer4Timer(Sender: TObject);
private
hotkeyid :integer;
procedure WMhotkeyhandle(var msg:Tmessage);message wm_hotkey; //響應敏感鍵按鍵消息
public
end;
var
Form1: TForm1;QQ32770:hwnd; a:hwnd;
implementation
{$R *.dfm}
function EnumChildWindowsPr(h: HWnd; TF: TForm1): Boolean; stdcall;
var
Buffer: array[0..255] of Char;
begin
Result := True;
getclassname(h,Buffer,1024);
if Buffer='RICHEDIT' then a:=h;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
Pos: TPoint; Handle,ha: HWND;
Buf: array[0..1024] of Char; b,a: array[0..1024] of char;
begin
GetCursorPos(Pos);
Handle := WindowFromPoint(Pos);
GetClassName(Handle, Buf, 1024);
if Buf='#32770' then QQ32770:=Handle;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled :=false;
timer5.Enabled:=false;
timer2.Enabled:=false;
timer3.Enabled:=false;
end;
procedure TForm1.Timer5Timer(Sender: TObject);
var
hCurrentWindow,richedit,QQ,edit: HWnd;
szText: array[0..254] of char;
begin
QQ:=findwindow(nil,'發送消息');
edit:=findwindowex(QQ,0,'edit',nil);
richedit:=findwindowex(QQ,0,'richedit',nil);
begin
sendmessage(edit,wm_gettext,255,longint(@szText));
if szText='' then
begin
SendMessage(edit,WM_SETTEXT, 0, lParam(pChar(memo1.Text)));
SendMessage(richedit,WM_SETTEXT, 0, lParam(pChar(memo1.Text)));
SendMessage(QQ,WM_COMMAND,1,0);
end;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if RadioButton1.Checked=true then timer5.Enabled :=true;
if RadioButton2.Checked=true then timer3.Enabled :=true;
if (SpinEdit1.Text='0')and(SpinEdit2.Text='0') then
begin
showmessage('請填寫Y坐標');
exit;
end;
timer1.Enabled :=true;
timer2.Enabled :=true;
timer2.Interval:=strtoint(SpinEdit3.Text);
end;
procedure TForm1.Timer3Timer(Sender: TObject);
var
hCurrentWindow: HWnd;
szText,hao: array[0..254] of char; pt: TPoint;Buf: array[0..1024] of Char;Handle: HWND;
y3:integer;
begin
hCurrentWindow := GetWindow(form1.Handle,GW_HWNDFIRST);
while hCurrentWindow <> 0 do
begin
sendmessage(hCurrentWindow,wm_gettext,255,longint(@szText));
if AnsiContainsText(szText,'發送消息') then
begin
EnumChildWindows(hCurrentWindow,@EnumChildWindowsPr, Longint(Self));
sendmessage(a,wm_gettext,255,longint(@szText));
if szText='' then
begin
SendMessage(a,WM_SETTEXT, 0, lParam(pChar(memo1.Text)));
SendMessage(hCurrentWindow,WM_COMMAND,1,0);
end; end;
hCurrentWindow := GetWindow(hCurrentWindow,GW_HWNDNEXT);
end;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
var
hCurrentWindow: HWnd;
szText,hao: array[0..254] of char; pt: TPoint;Buf: array[0..1024] of Char;Handle: HWND;
y3:integer;
begin
GetCursorPos(Pt);
Handle := WindowFromPoint(Pt);
GetClassName(Handle, Buf, 1024);
if (buf='Tencent_QQBar')and(pt.Y>strtoint(SpinEdit2.Text)) then
begin
SetCursorPos( pt.X,strtoint(SpinEdit1.Text));
SetForegroundWindow(QQ32770);
sleep(700);
SetForegroundWindow(QQ32770);
keybd_event( VK_NEXT, MapVirtualKey(VK_NEXT,0),0,0);
end;
if buf='Tencent_QQBar' then
begin
mouse_event( MOUSEEVENTF_MOVE, 0, 7, 0, 0 );
mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );
mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );
mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );
mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
hotkeyid:=GlobalAddAtom(pchar('UserDefineHotKey'))-$C000;
//減去$C000是為了保證取值范圍的限制
registerhotkey(handle,hotkeyid,MOD_CONTROL or mod_Alt,$41);
//敏感鍵為ctrl+Alt+A
end;
procedure TForm1.Wmhotkeyhandle(var msg:Tmessage);
var Handle:hwnd;pt:Tpoint;x,y:integer;
begin
if (msg.LParamHi=$41) and(msg.lparamLo=MOD_CONTROL or mod_Alt) then
begin
msg.Result:=1; //該消息已經處理
GetCursorPos(Pt);
Handle := WindowFromPoint(Pt);
if SpinEdit1.Text ='0' then
begin
SpinEdit1.Text:=inttostr(pt.Y);
SpinEdit4.Text:=inttostr(pt.x);
exit;
end;
if SpinEdit2.Text ='0' then
begin
SpinEdit2.Text:=inttostr(pt.Y-10);
SetCursorPos(strtoint(SpinEdit4.Text),strtoint(SpinEdit1.Text));
Button3.Click;
exit;
end;
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
SpinEdit1.Text:='0';
SpinEdit2.Text:='0';
end;
procedure TForm1.Timer4Timer(Sender: TObject);
var
hCurrentWindow: HWnd;
szText,hao: array[0..254] of char; pt: TPoint;Buf: array[0..1024] of Char;Handle: HWND;
begin
hCurrentWindow := GetWindow(form1.Handle,GW_HWNDFIRST);
while hCurrentWindow <> 0 do
begin
sendmessage(hCurrentWindow,wm_gettext,255,longint(@szText));
if AnsiContainsText(szText,'聊天中') then
SendMessage(hCurrentWindow, WM_CLOSE, 0, 0);
if AnsiContainsText(szText,'查看消息') then
SendMessage(hCurrentWindow, WM_CLOSE, 0, 0);
hCurrentWindow := GetWindow(hCurrentWindow,GW_HWNDNEXT);
end;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -