|
Программирование >> Автоматически обновляемые приложения
В нашем примере используется константа flashwtray, что позволяет выбрать вариант мигания заголовка окна только на панели задач. Когда вы нажмете на соответствующую кнопку, то форма должна мигнуть 5 раз (переменная uCount). Интересно отметить, что в бета-версии Visual Studio 2005 была возможность использовать мигание встроенными средствами, но затем эту функциональность убрали, хотя и обещали вернуться к ней в следующих версиях Visual Studio. Форматирование дисков Чтобы вызвать стандартное диалоговое окно форматирования дисков, нужно воспользоваться функцией sHFormatDnve. Пример приведен в листинге 17.13. : Листинг 17,13. Вызов диалогового окна форматирования дисков [Dlllmport( shell32.dll )] static extern uint SHFormatDrive(IntPtr hwnd, uint drive, uint fmtID, uint options); [Dlllmport( user32.dll )] public static extern bool FlashWindowEx([MarshalAs(UnmanagedType.Struct) ] ref FLASHWINFO pfwi); private void butFlashWindow Click(object sender, EventArgs e) { FLASHWINFO fwi = new FLASHWINFO(); fwi.cbSize = Marshal.SizeOf(fwi); fwi.hwnd = this.Handle; fwi.dwFlags = FLASHW TRAY; fwi.dwTimeout = 0; fwi.uCount = 5; FlashWindowEx(ref fwi); Открытие и закрытие лотка привода компакт-дисков Наверное, при работе с утилитами, прожигающими компакт-диски CD-R и CD-RW, вы замечали, что у них имеется возможность извлекать компакт-диск из привода программным путем. Неплохо бы научиться делать то же самое при помощи С#. Для этого используем функцию mciSendString в связке со специальными командами, которые и позволят нам открывать и закрывать лоток привода компакт-дисков (листинг 17.14). Листинг 17.14. Открытие и закрытие лотка привода компакт-диска Функция для открытия и закрытия лотка привода CD [Dlllmport( winmm.dll , EntryPoint = mciSendStringA , CharSet = CharSet.Ansi)] public static extern int mciSendString(string strCommand, StringBuiider strReturnString, int cchReturn, IntPtr hwndCallback); private void butOpenCD Click(object sender, EventArgs e) { Открываем лоток mciSendString( set CDAudio door open , null, 0, IntPtr.Zero). private void butCloseCD Click(object sender, EventArgs e) { Закрываем лоток mciSendString( set CDAudio door closed , null, 0, IntPtr.Zero); Примечание Примеры работы с функциями Windows API находятся в папке WinAPIDemo на прилагаемом компакт-диске. private void butFormatDiskDial Click(object sender, EventArgs e) { SHForTnatDrive(this.Handle, 3, 0, 0); 1 Листинг 17.15, Объявление функций для системного меню Флаги для системного меню public enum MenuFlags MF BITMAP = 0x00000004, MF CHECKED = 0x00000008, MF DISABLED = 0x00000002, MF ENABLED = 0x00000000, MF GRAYED = 0x00000001, MF MENUBREAK = 0x00000020, MF OWNERDRAW = 0x00000100, MF POPUP = 0x00000010, MF SEPARATOR = 0x00000800, MF STRING = 0x00000000, MF UNCHECKED = 0x00000000 [Dlllmport( user32.dll , EntryPoint = GetSystemMenu , SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)] private static extern IntPtr GetSystemMenu(IntPtr hwnd, int bRevert); Создание собственного пункта в системном меню у большинства окон в Windows имеется так называемое системное меню. Внешний вид, как правило, у всех меню одинаков, но иногда попадаются программы, у которых в системном меню имеются свои собственные пункты. Естественно, любого программиста разбирает любопытство - а как реализовать эту функциональность в своей программе. На данный момент .NET Framework не предоставляет такого полезного свойства, как Form. SystemMenu или что-то в этом роде. Поэтому придется прибегать к помощи механизма P/Invoke для вызовов функций Windows API. Опытные программисты (особенно имеющие опыт работы с языком С++) знают, что для модификации системного меню используется функция GetSystemMenu, а также вспомогательная функция AppendMenu, которая позволяет добавлять в меню разделители, картинки, галочки и сам текст. Итак, объявим необходимые функции с применением атрибута Dlllmport, а также другие переменные (листинг 17.15).
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |