воскресенье, 10 февраля 2013 г.

получить hwnd панели windows forms

private static extern IntPtr FindWindowEx(

[DllImport("user32.dll")]

private static extern IntPtr FindWindow(string ClassName, string WindowName);

[DllImport("user32.dll")]

// а если нет, то не знаю, кто его писал

// Если этот код работает, его написал Александр Климов,

Теперь переходим к функциям. Для наших целей нам понадобятся функции FindWindows, FindWindowEx и ShowWindow. Я не буду здесь приводить описания функций вы можете самостоятельно узнать о них в интернете или в моем справочнике. Приведу только их объявления и парочку сопутствующих констант:

TrayClockWClass часы

TrayNotifyWnd область уведомлений со значками и часами

Button кнопка Пуск

Shell_TrayWnd панель задач

Итак, начнем с теории. Во-первых, кнопка Пуск, панель задач, область уведомлений и область часов это все окна. А значит, получив доступ к такому окну, можно изменить привычное поведение элемента интерфейса. Второе все эти окна принадлежат определенным классам. И, именно, по имени классов и можно найти дескрипторы требуемых нам окон, чтобы проделать над ними эксперименты. Вот названия классов:

На самом деле, пример не имеет какой-то практической ценности (во всяком случае мне не удалось найти ему стоящее применение). Единственное, что приходит на ум создание шуточной программы, которая 1 апреля скроет привычные элементы интерфейса на столе неподготовленного пользователя. Но, с другой стороны, пример дает некоторое представление об устройстве Windows, эффектен в глазах начинающих программистов и дает более полное представление об используемых функциях.

Когда появилась платформа .NET Framework и языки C# и Visual Basic.NET, то плавно мигрировал на эти языки. И вот здесь мне очень пригодился свой справочник по функциям Windows API. Как пишут во многих умных книжках, язык C# вобрал в себя лучшее из Java, C++, Visual Basic. В отношении P/Invoke можно сказать, что технология вызова неуправляемого кода из управляемого кода была взята из Visual Basic. Если на C++ вызов системных функций прозрачен для программиста, то для C# нужную функцию требуется объявить (аналог Declare в VB 6.0). Из своей коллекции примеров я решил показать проект, позволяющий скрывать кнопку Пуск и панель задач в Windows XP/Vista/7.

Впервые о возможности использовать системные функции Windows в своих программах я узнал при изучении Visual Basic. Эта тема настолько захватила меня, что я стал собирать в коллекцию примеры использования функций Windows API. Сначала я собирал примеры все подряд. Затем стал подходить к делу более разборчиво и стал отбирать те функции и примеры, которые использовал сам в своих проектах. За несколько лет я набрал более 500 функций, и все примеры к ним для удобства оформил в виде CHM-файла. Демо-версию справочника можно до сих пор скачать с сайта .

Я же хочу показать более наглядный пример, показывающий возможности неуправляемого кода мы будем прятать кнопку Пуск и панель задач.

На Хабре уже было несколько статей, рассказывающих об использовании механизма P/Invoke в проектах на C#. В основном, в статьях был сильный уклон в сторону теории и приводились небольшие показательные примеры.

Использование P/Invoke: прячем кнопку Пуск и панель задач в Windows

3 сентября 2009 в 00:36

Использование P/Invoke: прячем кнопку Пуск и панель задач в Windows / Хабрахабр

Комментариев нет:

Отправить комментарий