2010-01-16 2 views
1

У меня есть программа, в которой есть MDI-хост, и я хотел бы иметь возможность получить, какой из них у детей только что получил фокус, bassiclly. Я хотел бы сделать событие с фокусом в окне это приложение.Найти, какой ребенок MDI получил фокус Win32 API

Приложение является сторонним, и у меня нет источника, у меня есть дескриптор окна для основной программы и основной части MDI.

Я знаю, что мне придется использовать API Win32, просто не уверен, какие из них.

Я пишу мое приложение в C#

Спасибо.

+0

Вы должны задать этот вопрос в течение дня. Каждый, кто знает ответ на это, спит. Измученные дети. Или просто сила тяжести. –

+0

Ну, это дневной свет в Аусе, где я живу: P, но посмотрим. Я уверен, что кто-то это увидит. –

ответ

1

Я предполагаю, что вы ищете перехватывает WM_SETFOCUS и WM_KILLFOCUS сообщения

Реальная проблема в том, как вы собираетесь это сделать. Я предполагаю, что простой способ - установить hook, который является подпрограммой для отслеживания трафика сообщений в системе и обработки определенных типов сообщений до того, как они достигнут процедуры целевого окна. Вы делаете это с помощью функции SetWindowsHookEx winapi с типами крючков WH_CALLWNDPROC или WH_CALLWNDPROCRET. Там некоторые примеры размещены на codeproject; также есть один на msdn: How to set a Windows hook in Visual C# .NET

Что не совсем ясно в вашем сообщении, где ваш код работает: в том же процессе с окнами MDI или это отдельное приложение \ служба? В случае, если это так, вам также потребуется ввести код в удаленный процесс. Проверить эту ссылку для получения подробной информации о том, как вы можете это сделать: Three Ways to Inject Your Code into Another Process

надеюсь, что это помогает, считает

+0

Поскольку у него есть ручки, он может наследовать от 'System.Windows.Forms.NativeWindow' и вызывать' AssignHandle (IntPtr) '. Затем он может прослушивать сообщения для конкретного окна с помощью 'WndProc'. –

+0

согласен, NativeWindow также должен работать; Я все равно останусь с крючком, потому что им НЕ ХОРОШО НАЧАТЬСЯ, и он работает для всего приложения; кроме того, неизвестно, относится ли его дескриптор окна к тому же процессу, в котором работает его код. –

+0

. Мой подключаемый модуль работает в собственном appdomian в основном приложении, может ли это вызвать проблему? –

 Смежные вопросы

  • Нет связанных вопросов^_^