不同进程间SendMessage求助
本帖最后由 sdbzjqr 于 2022-9-3 07:33 编辑我注入一个DLL文件到一个x64的应用程序,HOOKMessageBox获取Msg的内容。(其实是HOOK recv,先搞个MessageBox做个测试)
这个DLL文件和我的主程序之间的通信问题,采用SendMessage或者PostMessage,但是我按照百度的方法实现不了,求助下怎么解决。
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
public string lpData;
}
static IntPtr MessageBoxW_Hooked(IntPtr hWnd, string text, string caption, uint type)
{
string strTest = "25425";
Win32API.COPYDATASTRUCT cds;
cds.dwData = (IntPtr)100;
cds.lpData = strTest;
byte[] sarr = System.Text.Encoding.UTF8.GetBytes(strTest);
int len = sarr.Length;
cds.cbData = len + 1;
Win32API.SendMessage(hwndtest, 0x62, 5, ref cds);
return MessageBoxW(hwndtest, "已注入-" + hwndtest, "已注入-" + caption, type);
}
以上为DLL SendMessage
protected override void DefWndProc(ref Message m)
{
switch (m.Msg)
{
case 0x62:
Win32API.COPYDATASTRUCT mystr = new Win32API.COPYDATASTRUCT();
Type mytype = mystr.GetType();
mystr = (Win32API.COPYDATASTRUCT)m.GetLParam(mytype);
string str2 = mystr.lpData;
label1.Text = str2;
break;
default:
base.DefWndProc(ref m);
break;
}
}
以上为主程序的消息函数。
报这个错误,网上查了好久都找不解决办法,求大神帮助。 SendMessage或PostMessage只能发送给窗口程序,推荐你试试线程通信用PostThreadMessage
本帖最后由 fuhohua 于 2022-9-3 10:28 编辑
PostThreadMessage声明
public static extern bool PostThreadMessage(int threadId, uint msg, IntPtr wParam, IntPtr lParam);
Dll部分
// 首先通过主程序路径获取主程序进程Id(processId)(这里没有贴出代码)
// 然后发送消息到主程序的主线程
PostThreadMessage(Process.GetProcessById(processId).Threads.Id, 2048, IntPtr.Zero, IntPtr.Zero);
主程序部分
让你主程序的Form类继承 IMessageFilter接口,然后实现方法PreFilterMessage
public partial class FrmMain : Form, IMessageFilter
{
/// <summary>
/// 过滤消息
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == 2048)
{
// 干你想干的
return true;
}
return false;
}
}
在Form类的构造函数添加消息监视
public FrmMain()
{
// 添加进程消息监视
MsgFilter msgFilter = new();
Application.AddMessageFilter(msgFilter);
InitializeComponent();
}
不同进程传COPYDATASTRUCT只能用WM_COPYDATA
否则wParam或是lParam都只是指针!!指针!!一个偏移地址!!
读另一个进程的指针当然不行 谢谢各位 fuhohua 发表于 2022-9-3 10:22
PostThreadMessage声明
谢谢大佬
页:
[1]