我有2个应用程序,一个是隐藏窗口("hW"),另一个是控制台应用程序("CA"),我想从中发送命令到hW.在控制台应用程序中我得到了hW句柄,这是一个问题:如果我正在运行:
PostMessage(hwnd, WM_QUIT, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)
一切正常,消息变为hW并将其关闭.但如果我正在发送
PostMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)"texttext");
Run Code Online (Sandbox Code Playgroud)
消息根本没有.间谍++也表明消息没有达到hW.有什么特定的WM_SETTEXT,这可以防止它吗?提前致谢.
好.在这里找到答案http://cboard.cprogramming.com/windows-programming/72589-wm_settext-postmessage.html
Turns out the API tries to protect me against scope issues; PostMessage() always fails with WM_SETTEXT, or any other system-defined message that has a pointer as a parameter.Which gets me to SendMessage(), which is not good, because i wanted asynchronous messaging....
PPS
另外,看起来像
SendMessage(hwnd, WM_QUIT, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)
没有做任何事情来瞄准app.Even在简单的测试应用程序,如
HWND hNote;
if (!(hNote=FindWindow(L"Notepad",NULL)))
exit(1);
SendMessage(hNote, WM_QUIT, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)
而
PostMessage(hNote, WM_QUIT, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)
作品.
所有这些对我来说都不合乎逻辑......是否有一些通用功能适用于任何类型的消息?
不同的消息有不同的要求.有些需要发布到队列中.有些需要同步交付.因此,该系统旨在需要两种交付机制.
在这种情况下WM_SETTEXT,它总是需要同步传递.那是因为窗口管理器需要能够管理文本数据的生命周期.Raymond Chen谈到了这个问题:为什么我不能PostMessage WM_COPYDATA消息,但我可以用一个微小的超时SendMessageTimeout吗?
SendMessage当窗口处于另一个进程时,调用会有危险.如果其他进程挂起,那么您的进程也不会挂起.因为SendMessage是同步的.
解决方案是打电话SendMessageTimeout.这会将您的字符串数据封送到其他进程中.并且您可以设置超时以确保在其他进程挂起的情况下,您的进程可以避免这种命运.
| 归档时间: |
|
| 查看次数: |
6823 次 |
| 最近记录: |