2010-02-01 2 views
2

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

Проблема, загрузка для вышеупомянутой статьи на FTP-сервер, который не подведет меня.

Как немного вводной информации, у меня есть приложение .NET. Главное окно зарегистрировано для обработки пользовательских оконных сообщений. Из отдельного приложения мне нужно отправить сообщения в это окно. Я не могу найти окно под заголовком при изменении заголовка. Я не могу найти его JUST по классу окон, так как класс окна одинаковый для всех форм в этом домене приложения.

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

Приветствия,

Стив

ответ

2

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

+0

Благодаря Martin. Я фактически искал pinvoke.net с помощью «SetProperty» и «GetProperty», и он ничего не возвращал! –

2

Как говорит Мартин, ответом являются GetProp Win32 и 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") ; 
Смежные вопросы