返回首页

您好
我需要发布的消息,从另一个进程的进程。我写了这两个进程。都是Win32控制台应用程序。为此,我需要使用PostThreadMessage函数。
1。有另一种用于这一​​目的的方法吗?
2。我怎么能知道的线程ID,我必须提供的功能?我可以提供进程ID,但:
3。我怎样才能获得一个线程ID,进程ID
4。他们是相同的吗?
5。会发生什么,如果我使用进程ID线程ID?
我试着问准确。请给予准确的答案(数字)。
THX

回答

评论会员:mbue 时间:2012/02/06
它不可能。你只能发表messagees他们有一个消息队列的线程。一个进程可以有多个线程 - 线程有没有区分它们的名字。所以,据我所知,没有任何函数来枚举进程的所有线程 - 如果有,你要发布的消息,哪个线程
最佳的解决方案(我看来)是创建一个无形的虚拟窗口。然后你就可以播出的注册信息与其他进程进行通信(ES)。
的问候。

[编辑]
apllication 1
// application 1

void main()

{

  int    mterm = RegisterWindowMessage("MyTermMessage");

  HWND  hwnd = CreateWindowEx(0,__T("STATIC"),__T(""),0,0,0,0,0,0,0,0,0);

  for(MSG m;GetMessage(&m,0,0,0);DispatchMessage(&m))

  {

    if(mterm==m.message)

      PostQuitMessage(0);

  }

  DestroyWindow(hwnd);

}

 

应用2
{C}你需要一个虚拟的窗口接收广播消息(S) - 那是因为你不可以未知线程的消息。正如我刚才解释 - 有没有函数来获得一个线程ID从另一个进程
。问候:马杜・奈尔:我会建议使用CreateNamedPipe与其他非窗口的过程,而不是使用目前的设计与PostThreadMessage沟通。 PostThreadMessage是只在一个单一的过程中有所帮助。
你可以找到更多的信息:]。ilostmyid2:我写了这样的程序:
void main()

{

	MSG msg;

	while (GetMessage(&msg, 0, 0, 0))

	{

		TranslateMessage(&msg);

		if (msg.message == 101)

		{

			cout << "i got my msg!" << endl;

			PostQuitMessage(0);

		}

		else

			DispatchMessage(&msg);

	}

}

因为看到这是一个Win32控制台应用程序含有味精循环。我觉得它只有一个线程,主线程组成。对吗?我需要另一个进程发表味精101这一进程。这一切。
现在我能做些什么呢?如何在不可见的窗口可以帮助我吗?
我的解决方案,至今已经写的过程中,要接收味精文件的线程ID!像这样的代码:
{体C3}然后我运行过程中,要发送的消息。然后,它使用fscanf从文件中读取的线程ID,知道有什么线程张贴味精,然后调用PostThreadMessage
任何更好的建议呢? {S0的}
我觉得PostThreadMessage,马杜说,在一个单一进程中的线程之间发送短信息。但它的怪异,有没有办法枚举线程或进程的主线程
评论会员:游客 时间:2012/02/06
!mbue:另一种解决方案:{的C4}祝你好运。|