Как сохранить пользовательский текст в Window (Win32) - PullRequest
2 голосов
/ 04 января 2011

Мы можем установить текст окна с помощью:

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

и текст этого окна другим приложением

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

Я не хочу менять заголовок формы, но я хочу сохранить пользовательский текст в окне и получить этот текст другим экземпляром той же программы. Как мне этого добиться?

Ответы [ 3 ]

3 голосов
/ 04 января 2011

Простой способ сделать это:

  1. Определите ваше собственное сообщение WM_APP , которое экземпляр A вашего приложения будет использовать, чтобы сообщить окну B экземпляра "отправьте мне свой личный текст".
  2. Когда экземпляр B получает это сообщение, он может использовать WM_COPYDATA , чтобы отправить ответ окну экземпляра A.
  3. Экземпляр A получает данные от WM_COPYDATA и делает с ними то, что хочет.

Эта схема позволяет отправлять произвольные данные (при условии, что они не содержат указателей) при условии, что данные достаточно малы (скажем, несколько килобайт). Это также легко реализовать. Чего ему не хватает, так это контроля безопасности, поэтому, если вы не хотите, чтобы злоумышленники извлекали эти данные из вашего приложения, вам нужно использовать что-то более тяжелое.

1 голос
/ 04 января 2011

Возможно, самый простой способ сделать это - определить сообщение Windows в диапазоне WM_APP и отправить его из одного экземпляра в другой.Вы должны сделать свой собственный маршаллинг, хотя с чем-то вроде GlobalAlloc.

1 голос
/ 04 января 2011

Я не уверен, но я думаю, что вам придется открыть другой процесс, используя openProcess, а затем использовать некоторую функцию на дескрипторе процесса, чтобы получить текст заголовка.Когда у вас есть текст, вы можете очень хорошо использовать его в своем приложении.Для получения процесса, если это требуется, вы можете использовать EnumProcess, вот полный пример: http://msdn.microsoft.com/en-us/library/ms686701%28v=vs.85%29.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...