PostMessage 无法传递字符串 C#

Nic*_*ick 5 c# parameters postmessage intptr

这是我的原型:

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern bool PostMessage(int hhwnd, uint msg, IntPtr wparam, IntPtr lparam);
Run Code Online (Sandbox Code Playgroud)

这是我如何使用它:

PostMessage(HWND_BROADCAST, msg, Marshal.StringToHGlobalAuto("bob"), IntPtr.Zero);
Run Code Online (Sandbox Code Playgroud)

在另一个线程中,我可以截获此消息,但是当我尝试使用以下方法取回 bob 时:

string str = Marshal.PtrToStringAuto(m.WParam); // where m = the Message object
Run Code Online (Sandbox Code Playgroud)

我没有得到鲍勃在 str。

我认为这一定是因为我在一个线程的堆栈上引用了“bob”字符串,而该引用在另一个线程的堆栈中绝对没有意义。但如果是这样的话,这些 wparam 和 lparam 指针真的只用于在同一线程中传递的消息吗?

编辑*更正:通过线程我的意思是进程。这是在进程之间传递字符串而不是线程的问题。

Chr*_*cke 1

无论如何,HGLOBAL 都不再是全球性的了。win16以后就没有了。HWND_BROADCAST 看起来就像您正在将消息发送到不同的进程,而不必介意只是不同的线程。

因此,除非您使用操作系统知道如何封送的标准消息之一,否则您需要将字符串“bob”放置在不同进程可以访问的共享内存区域中。