使⽤C#WInform制作⼀个QQ消息通知
这两天⼀直在写⼀个驾校约车的辅助软件,参考了下ByPass的通知,然后昨天晚上写了个发送QQ消息的通知
开始在想的是将QQ HOOK后达到我的⽬的,后来想到⼀个更简单的。
想法
我们这打开QQ或者Tim消息的时候,当点击它的窗⼝,我们可以发现,焦点已经到编辑框上了。
通过这个发现,有了个想法
1.模拟点击QQ聊天的窗⼝,让它放置到最前
2.⾃动操作键盘打字(发送⽂本信息)
2022年开工吉日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的改成⾃⼰要保存的变量就⾏
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);
}
qq消息
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论