使用C# WInform制作一个QQ消息通知

这两天一直在写一个驾校约车的辅助软件,参考了下ByPass的通知,然后昨天晚上写了个发送QQ消息的通知
开始在想的是将QQ HOOK后达到我的目的,后来想到一个更简单的。

想法

我们这打开QQ或者Tim消息的时候,当点击它的窗口,我们可以发现,焦点已经到编辑框上了。
通过这个发现,有了个想法

1.模拟点击QQ聊天的窗口,让它放置到最前
2.自动操作键盘打字(发送文本信息)
3.模拟点击Enter键

解决方案

我们需要用到下面几个 user32.dll函数

[DllImport("user32.dll")]
public static extern int GetCursorPos(ref Point lpPoint); //获取鼠标位置
[DllImport("user32.dll")]
public static extern int WindowFromPoint(int xPoint, int yPoint); //获取鼠标位置下的窗口句柄
[DllImport("user32.dll")]
public static extern int GetWindowText(int hwnd, StringBuilder lpString, int nMaxCount); //获取窗口的标题
[DllImport("user32.dll")]
public static extern int GetClassName(int hwnd, StringBuilder lpstring, int nMaxCount); //获取窗口的类名
[DllImport("user32.dll", EntryPoint = "SendMessageA")]
public static extern int SendMessage(int hwnd, int wMsg, int wParam, string lParam);//发送信息,但是貌似没有用到这个
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd); //把窗口放到最上面

开始获取窗口句柄,使用经典的拖到窗口上获取 下面代码中。。setting为我的设置信息把有setting的改成自己要保存的变量就行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0vxb7Roq-1618916703849)(http://47.94.89.49/wp-content/uploads/2021/02/NS0C5K2LTE88FKEZW27D-300x80.jpg)]

static int hwnd;//窗体句柄
static  StringBuilder name = new StringBuilder(256);//接受窗体标题和类名称
Boolean ax = false;
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
     ax = true;//鼠标左右键被按下
     Cursor = new Cursor(Application.StartupPath+"/data/1.cur"); //改变鼠标样式为十字架
     panel1.BackgroundImage = null;
}

private void panel1_MouseUp(object sender, MouseEventArgs e)
{
     ax = false;
     panel1.BackgroundImage =appointment.Properties.Resources.pointer_128px_1164880_easyicon_net;
     Cursor = Cursors.Default;//改变鼠标样式为默认
}
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
    setting.QQMsgName = new StringBuilder(256);
    Point pi = new Point();
    //当鼠标移动时发生
    if (ax)//左键是否被按下
    {
        String t = "";
        GetCursorPos(ref pi);
        hwnd = WindowFromPoint(pi.X, pi.Y);//获取坐标下的窗体句柄
        GetClassName(hwnd, name, 256);
        GetWindowText(hwnd, setting.QQMsgName, 256);//得到窗体的标题
		//用来判断是否是QQ或者TIM的窗口,Equals(QQ)是因为如果是QQ的主窗口的话,也可以获取到句柄
        if (name.ToString().Equals("TXGuiFoundation") && !setting.QQMsgName.ToString().Equals("QQ"))
        {
            label22.Text = setting.QQMsgName.ToString();
            label23.Text = hwnd.ToString();
            setting.QQMsgHw = hwnd;
        }
        else {
            setting.QQMsgName = null;
        }
    }
}

发送消息

public void send(String title,int hw,String text) {
            try
            {
                if (hw == 0) throw new Exception("");
                IntPtr k = (IntPtr)hw;
                SetForegroundWindow(k);
                SendKeys.SendWait(text);  // 键入你要发送的文本
                SendKeys.Send("{ENTER}"); // 模拟enter按键
            }
            catch (Exception ex) {
                addLog("没有找到聊天窗口",Color.Red);
            }
        }

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值