| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1589 人关注过本帖
标题:[分享]模拟一个简单的QQ尾巴
取消只看楼主 加入收藏
田里兵蜂
Rank: 1
等 级:新手上路
威 望:2
帖 子:604
专家分:0
注 册:2007-1-29
收藏
 问题点数:0 回复次数:5 
[分享]模拟一个简单的QQ尾巴

//QQ尾巴

#include <windows.h>
#include <stdio.h>
#include <string.h>

#define id_Send 0x77E //发送按扭的ID

unsigned char title[256],buffer[]="大家好.";

int isChat()/*判断是否QQ聊天窗口*/
{ unsigned char *cp;
int s_len;
s_len=strlen(title);
if (s_len<4)
return 0;
title[2]='\0';
/*与好友聊天中(判断起始字是'与',结束字是'聊天中')*/
if (!strcmp(title,"与") && s_len>8)
{ cp=&title[s_len-6];
if(!strcmp(cp,"聊天中"))
return 1;
}
/*群聊中(判断结束字是'-群')*/
cp=&title[s_len-2];
if (!strcmp(cp,"群"))
return 1;
return 0;
}

int main(int argc,char *argv[])
{
HWND h_Fore; //前台窗口句柄
HWND h_Chat; //聊天窗口句柄
HWND h_Parent; //发送按扭的父窗口
int i;
ShowWindow(FindWindow("ConsoleWindowClass",argv[0]),0); //隐藏自身
while(1)
{ h_Fore=GetForegroundWindow(); //得到前台窗口句柄
GetWindowText(h_Fore,title,256); //得到前台窗口标题

if (isChat())
{ h_Parent=FindWindowEx(h_Fore,NULL,"#32770","");
//因为第二个AfxWnd42才是消息框的父窗口
h_Chat=FindWindowEx(h_Parent,NULL,"AfxWnd42",NULL);
h_Chat=FindWindowEx(h_Parent,h_Chat,"AfxWnd42",NULL);
h_Chat=FindWindowEx(h_Chat,NULL,"RichEdit20A",NULL);

for(i=0;buffer[i]!='\0';i++)
SendMessage(h_Chat,WM_CHAR,buffer[i],0);
SendMessage(h_Parent,WM_COMMAND,id_Send,BN_CLICKED);//单击发送按扭
//EnableWindow(h_Chat,0);要是加上这句的话,用户就不能聊天啦.
}
Sleep(500);
}
return 0;
}


专门加了一个对QQ聊天窗口判断的函数.

[此贴子已经被作者于2007-3-1 2:06:47编辑过]

搜索更多相关主题的帖子: QQ尾巴 windows title len include 
2007-02-28 23:43
田里兵蜂
Rank: 1
等 级:新手上路
威 望:2
帖 子:604
专家分:0
注 册:2007-1-29
收藏
得分:0 

想了下,不需要对窗口标题的判断一样可以实现。
对窗口句柄判断就行啦。

下面是修改后的程序

//QQ尾巴

[CODE]#include <windows.h>
#include <stdio.h>
#include <string.h>
#define id_Send 0x77E //发送按扭的ID
unsigned char buffer[]="大家好.";

int main(int argc,char *argv[])
{
HWND h_Fore; //前台窗口句柄
HWND h_Chat; //聊天窗口句柄
HWND h_Parent; //发送按扭的父窗口
int i;
ShowWindow(FindWindow("ConsoleWindowClass",argv[0]),0); //隐藏自身
while(1)
{ h_Fore=GetForegroundWindow(); //得到前台窗口句柄

if (h_Parent=FindWindowEx(h_Fore,NULL,"#32770",""))
{
//因为第二个AfxWnd42才是消息框的父窗口
if (h_Chat=FindWindowEx(h_Parent,NULL,"AfxWnd42",NULL))
{ h_Chat=FindWindowEx(h_Parent,h_Chat,"AfxWnd42",NULL);
h_Chat=FindWindowEx(h_Chat,NULL,"RichEdit20A",NULL);

for(i=0;buffer[i]!='\0';i++)
SendMessage(h_Chat,WM_CHAR,buffer[i],0);
SendMessage(h_Parent,WM_COMMAND,id_Send,BN_CLICKED);//单击发送按扭
//EnableWindow(h_Chat,0);要是加上这句的话,用户就不能聊天啦.
}
}
Sleep(500);
}
return 0;
}[/CODE]


[此贴子已经被作者于2007-3-1 2:06:06编辑过]

2007-03-01 02:05
田里兵蜂
Rank: 1
等 级:新手上路
威 望:2
帖 子:604
专家分:0
注 册:2007-1-29
收藏
得分:0 
你也还在呀
我看的 windows程序设计.chm 电子书
这个主要是用API
2007-03-01 02:08
田里兵蜂
Rank: 1
等 级:新手上路
威 望:2
帖 子:604
专家分:0
注 册:2007-1-29
收藏
得分:0 
那个windows程序设计有好多也看不懂
你可以看些视频教程,讲得浅显易懂些
吉大有教学视频
下面是地址
你打开
http://download.chinaitlab.com/DownSearch.asp
不过只有3KB/S

2007-03-01 02:15
田里兵蜂
Rank: 1
等 级:新手上路
威 望:2
帖 子:604
专家分:0
注 册:2007-1-29
收藏
得分:0 
我现在睡觉啦,明天传,我这台机子上没有,懒得开那台机子了
88
2007-03-01 02:17
田里兵蜂
Rank: 1
等 级:新手上路
威 望:2
帖 子:604
专家分:0
注 册:2007-1-29
收藏
得分:0 

HINSTANCE是一个实例句柄
就是程序运行后产生的,用来控制程序.

我建了个windows编程的QQ群,欢迎热爱C语言的朋友进..
群号:31702498

下面是在网上找的资料,写得很明也,比喻很形象

下面便简单介绍一下与 Windows 系统密切相关的几个基本概念:

  ⒈窗口:这是我要说的第一个概念。似乎是地球人都知道的事儿了,窗口是Windows本身以及Windows 环境下的

应用程序的基本界面单位,但是很多人都误以为只有具有标题栏、状态栏、最大化、最小化按钮这样标准的方框才叫

窗口。其实窗口的概念很广,例如按钮和对话框等也是窗口哦,只不过是一种特殊的窗口罢了。

  从用户的角度看,窗口就是显示在屏幕上的一个矩形区域,其外观独立于应用程序,事实上它就是生成该窗口

的应用程序与用户间的直观接口;从应用程序的角度看,窗口是受其控制的一部分矩形屏幕区。应用程序生成并控

制与窗口有关的一切内容,包括窗口的大小、风格、位置以及窗口内显示的内容等。用户打开一个应用程序后,程

序将创建一个窗口,并在那里默默地等待用户的要求。每当用户选择窗口中的选项,程序即对此做出响应。

  ⒉程序:通常说的程序都是指一个能让计算机识别的文件,接触得最多的便是.exe型的可执行文件,这个不难

理解。

  ⒊进程:说到进程,学过《操作系统》的人都很清楚,所谓进程就是应用程序的执行实例(或称一个执行程序)

需要注意的是:进程是程序动态的描述,而上面说到的程序是静态的描述,两者有本质的区别。举个例子,从网上

Down了一个瑞星杀毒软件到C盘但没有运行,那个.exe 可执行文件叫做程序,它是一个二进制码的文件。一旦双击

了exe文件图标运行程序,那个“正在运行着的瑞星杀毒”便称为进程,它在双击的那一刻被系统创建,当你关机

或者在任务栏的图标上单击鼠标右键选“退出”时,进程便消亡,彻底结束了生命。进程经历了由“创建”到

“消亡”的生命期,而程序自始至终存在于你的硬盘上,不管你的机器是否启动。

  ⒋线程:线程是进程中的一个执行单元,同一个进程中的各个线程对应于一组CPU指令、一组CPU寄存器以及一

堆栈。进程本来就具有动态的含义,然而实质上是通过线程来执行体现的,从这个意义上说,Windows 中进程的动

态性意义已经不是很明显了,只算是给程序所占的资源划定一个范围而已(个人观点,纯属个人理解,不必引起争

议!),真正具有动态性意义的是线程。以前在大二学习操作系统课的时候就有个同学跟笔者提起这点,笔者还跟

他驳得面红耳赤呢!现在想想,觉得很有道理,不得不佩服那位同学对Windows内部机制了解得如此清楚。

  之所以在此花那么多的篇幅说线程,是因为下面将要介绍到多线程编程技巧,如果不理解这点,那就很难应

用到实践上,希望大家明白。

  ⒌消息:我们几乎做每一个动作都会产生一个消息,在用鼠标指点江山的今天,鼠标被移动会产生WM_MOUSEMOVE

消息,鼠标左键被按下会产生WM_LBUTTONDOWN的消息,鼠标右键按下便产生WM_RBUTTONDOWN消息等等。所有的这些都

可以通过GetMessage,SendMessage等函数得到,以后的操作中我们会经常接触到这些函数。

  ⒍事件:何谓事件?从它的字面意思我们就可以明白它的含义,如在程序运行的过程中改变窗口的大小或者移动

窗口等,都会触发相应的“事件”。

  ⒎句柄:单单一个“柄”字便可以解释它的意思了,我们天气热摇扇子的时候只要抓住扇柄便可以控制整个扇子

的运动了,在程序中也差不多是这个意思。通常一个句柄就可以传递我们所要做的事情。有经验的读者肯定清楚,编

写程序总是要和各种句柄打交道的,句柄是系统用来标识不同对象类型的工具,如窗口、菜单等,这些东西在系统中

被视为不同类型的对象,用不同的句柄将他们区分开来。


这些资料群里都有

[此贴子已经被作者于2007-3-1 10:44:58编辑过]

2007-03-01 10:34
快速回复:[分享]模拟一个简单的QQ尾巴
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016280 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved