如何在Window中保留自定义文本(Win32)

我们可以设置窗口文本:

BOOL WINAPI SetWindowText( __in HWND hWnd, __in_opt LPCTSTR lpString ); 

和这个窗口文本由另一个应用程序

 int WINAPI GetWindowText( __in HWND hWnd, __out LPTSTR lpString, __in int nMaxCount ); 

我不想更改我的表单标题,但我想保留一个自定义的文本在窗口中,并通过同一程序的另一个实例获取此文本。 我怎样才能做到这一点?

一个简单的方法是:

  1. 定义自己的WM_APP消息 ,应用程序的哪个实例A将用来告诉实例B的窗口“发送给我你的私人文本”。
  2. 当实例B收到这个消息时,它可以使用WM_COPYDATA来向实例A的窗口发送一个回复。
  3. 实例A从WM_COPYDATA接收数据,并按照它的要求做。

这个方案允许你发送任意数据(只要它不包含指针),只要数据是相当小的(比如说几KB)。 这也很容易实现。 它缺少的是安全控制,所以如果你不得不防止坏人从你的应用程序中检索这些数据,你将需要使用更重的东西。

我不确定,但我想你将不得不使用openProcess来打开其他进程,然后使用进程句柄上的某个函数来获取标题文本。 一旦你有了这个文本,你就可以很好的在你的应用程序中使用它。 为了获得所需进程的进程,可以使用EnumProcess ,这里是一个完整的示例: http : //msdn.microsoft.com/en-us/library/ms686701%28v=vs.85%29.aspx

可能最简单的方法是在WM_APP范围内定义一个Windows消息,并将其从一个实例发送到另一个实例。 尽管使用GlobalAlloc之类的东西,你还得自己编组。