C语言实操篇 您所在的位置:网站首页 qq消息恶搞代码 C语言实操篇

C语言实操篇

2024-07-05 16:39| 来源: 网络整理| 查看: 265

引言

哪怕把C语言学完,依然会遇见很多未知的函数。Window.h库里有很多好玩的函数,下面让我们使用这个库中的函数并且尝试实现消息轰炸,这里以QQ为例(轰炸条数任意,轰炸内容可以是某段文字也可以是某个表情包哦)~

分析如何实现“轰炸”效果 程序设计

朋友们,不妨设想一下,我们平时连续发送同一句话“骚扰”朋友的时候,走的是什么路子?

——复制

——粘贴

——发送

——以上步骤循环往复;朋友:有你是我的福气~

哈哈哈,如何用C语言来实现我们的目的呢?各位客官,请看下文~

轰炸步骤 连接QQ窗口

FindWindowA(NULL, "111");//连接QQ窗口

 这行代码的释义是连接一个名为“111”的窗口;括号里面是两个参数,一个是发送信息的对象,另一个不使用,写成空指针NULL:

复制信息

复制一次消息后,粘贴无论进行多少次,粘贴结果不变,用户手动Ctrl-V即可~

粘贴信息 

SendMessageA(FindWindowA(NULL, "111"), WM_PASTE, NULL, NULL);

 进行信息粘贴和发送部分都要使用SendMessage()函数,send是发送的意思,message是信息,也就是发送信息函数。SendMessage()函数转到定义是需要4个参数,所以这里要写上两个NULL(空指针);在这里也是要进行FindWindow()的调用,每粘贴一次,就和QQ进行一次连接;

发送消息

SendMessageA(FindWindowA(NULL, "111"), WM_KEYDOWN, VK_RETURN, NULL);

我们在发送信息时,一般按'发送'或者'Enter'键。那么电脑是使用enter键;其他和上一条同理;

反复进行

循环用起来啊兄弟们,while\for\do-while用起来~

我这里用的是while循环来控制轰炸消息条数。

参考代码 轰炸代码 #include #include int main() { int Message = 100;//值可以随意修改或者用scanf函数输入 //Sleep(3000);//运行之前暂停3s while (Message > 0) { FindWindowA(NULL, "111");//连接QQ窗口 //粘贴所复制的信息 SendMessageA(FindWindowA(NULL, "111"), WM_PASTE, NULL, NULL); //发送信息 SendMessageA(FindWindowA(NULL, "111"), WM_KEYDOWN, VK_RETURN, NULL); Message--; } return 0; } 代码的详细解释(如果代码只用于整蛊这个地方可以不看) FindWindowA(LPCSTR IpClassName,LPCSTR IpWindowName)

FindWindowA是WIndow.h库中的一个函数,用于查找窗口句柄,处理的是ANSI编码字符串(如果你需要处理Unicode编码字符串,可以使用FindWindowW函数)。它的作用是根据窗口的类别和窗口名来查找对应的窗口,并且返回该窗口的句柄;

句柄(Handle):是一种用于表示资源或对象的标识符。它是一个无类型的整数,通常用于引用操作系统或应用程序提供的各种资源,如文件句柄、窗口句柄、线程句柄等等。它的主要作用是提供一种对资源或者对象的间接访问方式。通过句柄,应用程序和操作系统可以进行交互,请求操作系统为其分配和管理资源。句柄将资源或对象的具体细节隐藏起来,使得应用程序无需关心资源的具体实现方式,从而提高了代码的可移植性和安全性。

LPCSTR:它是Win32和VC++所使用的一种字符串数据类型。它被定义为一个指向以“\0”结尾的常量字符指针;L表示long;P表示这是一个指针;C表示常量const(虽然无所谓但是啰嗦一句:可以将变量声明为常量,使其不能被重新赋值;注:const关键字修饰的只是变量的可读性而不是存储类型,存储类型不变,常量依然可以是全局变量、局部变量或者函数参数);STR表示这个变量是一个字符串。

参数说明

lpClassName:窗口类名的字符串指针。可以指定具体的类名,也可以使用通配符*(*表示任意多个字符串)来匹配所有类名。

IpWindowName:窗口名的字符串指针。可以指定具体的窗口名,也可以使用通配符*来匹配所有窗口名。

函数返回值

1.如果找到了匹配的窗口,则返回该窗口的句柄。

2.如果未找到匹配的窗口,则返回空指针NULL。

示例代码 #include  int main() {   HWND hwnd = FindWindowA("Notepad", NULL);  // 查找记事本窗口   if (hwnd != NULL) {     // 窗口找到,进行后续操作     printf("Found Notepad window with handle: 0x%x\n", hwnd);   } else {     // 窗口未找到     printf("Notepad window not found\n");   }   return 0; }

在上述示例中,通过调用  FindWindowA()  函数来查找名为 "Notepad"(记事本)的窗口。如果找到了该窗口,则打印窗口句柄;否则,打印找不到窗口的消息。

LRESULT SendMessageA(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam);

在 C 语言中, SendMessageA 函数是一个用于向窗口发送消息的函数,它是 Windows API 的一部分;

 参数说明

 hwnd 表示窗口句柄, Msg 表示要发送的消息, wParam 和 lParam 分别是消息的附加参数。 SendMessageA 函数会将指定的消息发送到指定的窗口,并返回窗口过程处理消息后的结果。

        //粘贴所复制的信息         SendMessageA(FindWindowA(NULL, "111"), WM_PASTE, NULL, NULL);         //发送信息         SendMessageA(FindWindowA(NULL, "111"), WM_KEYDOWN, VK_RETURN, NULL);

 蛮好记的,PASTE (paste),英文注释就是粘贴;KEYDOWN(keydown)输入或者按下什么键

注意事项 1.窗口名称

窗口名称和备注一致即可,确保窗口名正确哦~

2.连接窗口无法弹出问题

示例代码在VS2013上可以正常运行;如果是VS2022话QQ窗口会弹不出来,那么可以稍微修改一下:加一个延时函数,在延时时间内打开窗口(就是把示例函数中被注释掉的sleep函数那一行取消注释就可以)

sleep函数

在C语言中,sleep()函数的参数以毫秒为单位,sleep(3000)意为程序暂停三秒钟,为我们打开QQ窗口提供时间;



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有