Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->编程语言 ->Delphi ->正文

制作QQ消息炸弹

来源:Linuxdby.com 作者:Webmaster 时间:2007-06-05 点击: [收藏] [投稿]

hmemo=GetDlgItem(hparent,$00000000); //找到父类。
hmemo1=GetWindow(hmemo1,GW_CHILD); //得到父类下的第一个子窗口句柄(hmemo1即QQ输入文本的那个窗体的句柄^_^大功告成)
  这里顺便说一下GetWindow()用法:
GetWindow(
  Hwnd:Long, //源窗口句柄。
  wCnd:Long //指定结果窗口与源窗口的关系。(GW_CHILD为得到源窗体下的第一个子窗口句柄)
)
  更多的常数关系你们就去查看MSDN吧!这里就不必占用寒泉的空间了。哈!
  到此,QQ对话框和QQ输入文本窗口的句柄我们都已经得到了,以下的步骤就是把你要写的话,贴进QQ输入文本窗口,点一下发送,就郁闷别人吧!
  现在贴出我的一段代码以供大家参考:
procedure TForm1.FormCreate(Sender: TObject);
begin
  i:=0;
  //导入文件内容到combobox控件。
  combobox1.Items.LoadFromFile(extractfilepath(application.ExeName)+'text.txt');
  combobox1.Text:=combobox1.Items.Strings[0];
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var hmemo1:HWND; //hmemo1为找到的QQ文本输入框句柄
begin
  if checkbox1.Checked then //点击了循环发送复选框。
  begin
    if i>combobox1.Items.Count-1 then
      i:=0;
    edit1.Text:=combobox1.Items.Strings[i];
    edit1.SelectAll;
    edit1.CopyToClipboard; //拷贝到剪切板
    sendmessage(hmemo1,WM_PASTE,0,0); //对QQ输入文本窗体发送粘贴消息。
    sendmessage(hbutton,BM_CLICK,0,0); //点击发送按钮
    i:=i+1;   
  end;
  if checkbox1.Checked=false then  //没有点击了循环发送复选框。
  begin
    edit1.Text:=combobox1.Text;
    edit1.SelectAll;
    edit1.CopyToClipboard;
    sendmessage(hmemo1,WM_PASTE,0,0);
    sendmessage(hbutton,BM_CLICK,0,0);
  end;
end;
  附上简要说明:由于本人所知有限,不太会用剪切板函数对将已知字串拷贝到剪切板的方法还不知道。所以只能借道于控件上。因为所有文本类控件都有一个方法即——edit1.CopyToClipboard,所以只能先将Edit1变为不可见控件。每次先将要发送的内容传给Edit1,而后在将Edit1的内容CopyToClipboard。哈!这只是一个取巧的法子,大家要是知道有什么更好的方法还望告知在下,呵!
后记:
  以上代码是针对QQ2003版本。虽然网上有如:飘叶千夫指的好工具。不过作为一个小小菜鸟。但又喜欢编程的人来说。自己DIY(do it youtself)一个也是很爽的一件事吧!我自己也参照飘叶千夫指做了一个,感觉具备了它的使用功能吧!还不错。其实也没有太多技术性的东西,只是运用了几个API函数而已。只希望对刚刚学Delphi的朋友有所帮助,当然高手是用不着的了。

注明:QQ2004有些改动.为了方便我把新改的代码帖上来:

procedure TForm1.Timer1Timer(Sender: TObject);
var hbutton,hbutton1,hmemo,hmemo1,hparent1:HWND;
begin
  repeat
     hparent:=findwindowex(0,hparent,'#32770',nil);

//QQ2004就是多了下面这句,Memo上又多了一层窗口
     hparent1:=findwindowex(hparent,0,'#32770',nil);
  until  hparent1<>0;
  hbutton:=findwindowEX(hparent1,0,nil,'发送(&S)');
  hbutton1:=findwindowex(hparent1,0,nil,'聊天模式(&T)');
  if hbutton1<>0 then
     sendmessage(hbutton1,BM_CLICK,0,0);
     hmemo1:=GetDlgItem(hparent1,$00000000);
     hmemo:=getwindow(hmemo1,GW_CHILD);
  if hmemo<>0 then
  begin
  if  checkbox1.Checked then
  begin
    if i>combobox1.Items.Count-1 then
       i:=0;
       edit1.Text:=combobox1.Items.Strings[i];
       edit1.SelectAll;
       edit1.CopyToClipboard;
       sendmessage(hmemo,WM_SETTEXT,0,0);
       sendmessage(hmemo,WM_PASTE,0,0);
       sendmessage(hbutton,BM_CLICK,0,0);
       i:=i+1;  
  end;
  if checkbox1.Checked=false then
  begin
    edit1.Text:=combobox1.Text;
    edit1.SelectAll;
    edit1.CopyToClipboard;
    sendmessage(hmemo,WM_SETTEXT,0,0);
    sendmessage(hmemo,WM_PASTE,0,0);
    sendmessage(hbutton,BM_CLICK,0,0);
  end;
end;
end;
  有需要的朋友请到我的网站去下载(位于我的作品里):
  作者网站:http://asp.itdrp.com/hottey

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:Delphi中的线程类--之(5,大结局)   下一篇:一个新算法的表达式求值的函数

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号