Программирование >>  Автоматически обновляемые приложения 

1 ... 151 152 153 [ 154 ] 155 156 157 ... 170


В нашем примере используется константа 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).



1 ... 151 152 153 [ 154 ] 155 156 157 ... 170

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика