Пользовательские свойства в окне win32 - PullRequest
2 голосов
/ 01 февраля 2010

Я слышал (читай, на http://www.ddj.com/windows/184416861),, что можно установить пользовательские свойства в окне Win32.

Беда в том, что загрузка вышеприведенной статьи происходит на ftp-сервере, который меня не пускает.

В качестве справочной информации у меня есть приложение .NET. Главное окно зарегистрировано для обработки пользовательских оконных сообщений. Из отдельного приложения мне нужно публиковать сообщения в этом окне. Я не могу найти окно по заголовку, так как заголовок меняется. Я не могу найти его ПРОСТО по классу окна, поскольку класс окна одинаков для всех форм в этом домене приложения.

В идеале, я хотел бы установить пользовательское свойство в окне Win32 главной формы (Form1), которое говорит, что да, это form1. Затем, когда я перечисляю окна этого приложения, я могу сказать, что это обязательная форма, посмотрев, существует ли это пользовательское свойство.

Приветствия

Steve

Ответы [ 2 ]

2 голосов
/ 01 февраля 2010

Как говорит Мартин, ответом являются Win32 API GetProp и SetProp.

Вот что я делаю сейчас, когда создаю основную форму:

[DllImport("user32.dll", SetLastError=true)]
static extern bool SetProp(IntPtr hWnd, string lpString, IntPtr hData);

SetProp( this.Handle, @"foo", new IntPtr( 1 ) ) ;

Теперь я могу проверить это свойство при перечислении окон:

[DllImport("user32.dll")]
private static extern IntPtr GetProp(IntPtr hWnd, string lpString);

IntPtr result = GetProp( (IntPtr) hWnd, @"foo" ) ;
2 голосов
/ 01 февраля 2010

См. здесь для обзора свойств окна.По сути, вы вызываете функцию Win32 API SetProp для установки свойства окна и GetProp для его получения.Есть еще несколько функций для перечисления свойств и тому подобное, но звучит так, как будто SetProp и GetProp - это все, что вам нужно.

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