2010-03-09 3 views
1

есть программное обеспечение, которое вызывает метод в моей C# dll. В этом методе dll мне нужно иметь дескриптор окна программы/окна, называемый моей dll.Получить окно дескриптора вызывающего окна

Как получить этот «дескриптор окна вызова»?

Спасибо!

+0

Как называется метод? Можете ли вы добавить параметр 'hwnd'? – SLaks

ответ

2

Это может вернуть ручку главного окна.

System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle 

Как я знаю, нет никакого способа получить конкретное окно, потому что это не более чем объект формы. Но класс формы имеет свойство Handle. Вы можете передать его в качестве аргумента для вызовов методов DLL.

+0

, то проблема не в том, что я не могу передать аргумент в свой метод dll из источника программа. поэтому я не могу пройти ручку. Мне нужно найти ручку в моем методе dll. – Tobi

+0

Хммм ... К сожалению, единственный способ решить проблему - немного переписать dll. Я не вижу здесь никаких проблем (если и dll, и исполняемый файл написаны вами, поэтому у вас есть источники), за исключением того, что дизайн сборки будет страдать ... – ILya

+0

Да, я выполнил код, который вы мне сказали, это работает. у меня нет источников вызова программы, поэтому мне пришлось использовать GetCurrentProcess(). MainWindowHandle. Я думаю, что нет другого «чистого» способа? – Tobi

2

Вы не можете: окна не вызывают методы, методы кодовых вызовов.

В идеале вы должны добавить параметр дескриптора окна. Если это абсолютно невозможно, вы можете использовать, скажем, функцию API GetActiveWindow, чтобы активировать окно в текущем потоке. Это не гарантирует работу; возможно, нет открытых окон.

Для чего нужен ручка окна?

+0

, чтобы изменить окно вызова, в настоящее время я использую GetForegroundWindow, но это не очень хорошее решение, поэтому, если пользователь меняет окно немедленно, у меня будет неправильный дескриптор – Tobi