Консультация № 146296
07.10.2008, 09:00
0.00 руб.
0 6 1
Здравствуйте!
Как вызывать Callback-функции в .Net? Желательно на языке Delphi.
Например, хочется вызвать апишную функцию EnumChildWindows, у которой второй параметр - это функция. Как оформить данный вызов?
Заранее спасибо.

Обсуждение

Неизвестный
07.10.2008, 10:01
общий
это ответ
Здравствуйте, Guv2002!

В .Net вызвать апишную функцию можно только при помощи PInvoke. Но зачем это надо, если есть managed-аналог? Для EnumChildWindows - это свойство System.Windows.Forms.Form.Controls.
Неизвестный
07.10.2008, 13:25
общий
Можно поподробнее...
Если есть пример, то вообще хорошо будет :)
Неизвестный
07.10.2008, 19:21
общий
Вот вкратце о PInvoke:
PInvoke

Если Вам нужно получить список дочерних окон WinForms-окна (System.Windows.Forms.Control или наследника), то у него есть свойство Controls Типа ControlCollection - это и есть искомый список.
Неизвестный
08.10.2008, 07:21
общий
А как тогда получить по названию окна или по его классу объект класса System.Windows.Forms ?
Т.е. из своей программы мне надо перебрать все открытые окна в ОС Windows и найти нужное, а затем у найденного окна найти определенный видимый компонент и передать ему некоторые команды.
Мне копать в PInvoke или в System.Windows.Forms?
Неизвестный
08.10.2008, 13:24
общий
Прямого аналога FindWindow (Вы ведь его имеете ввиду?) в .NET нет. Так что вариант только юзать интероп из нативных апишных DLL.
Типа того:

using System.Runtime.InteropServices;
public class Win32
{
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
}

На gotdotnet.ru поищи Win32Window. Готовый класс для разных манипуляций с HWindow на низком уровне.
Неизвестный
13.10.2008, 06:06
общий
Спасибо
Форма ответа