Маленькие шутки
Рассмотрим несколько маленьких приколов. Это небольшие задачи, ради которых нет смысла писать самостоятельные примеры, поэтому в целях экономии места я объединил различные шутки в одну программу. Вы можете использовать эту заготовку в своих невидимых шуточных приложениях или реальных программах. Некоторые используемые функции могут пригодиться и в коммерческих проектах.
Как программно потушить монитор?
А если серьезно, то системная команда "на тушение" выглядит так:
SendMessage(hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, 0);
Чтобы "зажечь", измените последний параметр на -1.
Запуск системных CPL - файлов
Добавьте в начало файла модуль shellapi.h, чтобы вы могли использовать функцию ShellExecute:
Теперь напишите следующий код :
ShellExecute(hWnd, "Open", "Rundll32.exe", "shell32,Control_RunDLL filename.cpl", "", SW_SHOWNORMAL);
Функция ShellExecute запускает указанную программу. У нее есть следующие параметры:
- окно, из которого запускается программа, — можно указать хоть 0, для нас это не важно;
- действие, которое надо выполнить, — для запуска программы указываем "Open";
- имя запускаемой программы;
- команды, которые надо передать в командной строке;
- каталог по умолчанию, с которого будет работать запущенная программа, — при задании пустой строки будет использоваться путь по умолчанию, что нас вполне устраивает;
- тип запуска — параметр, который указывает, как запустить программу, — указываем SW_SHOWNORMAL, что означает запуск программы в нормальном режиме (флаг идентичен параметру у функции ShowWindow).
Тогда вот такой код отобразит окно настроек сети Интернет:
ShellExecute(hWnd, "Open", "Rundll32.exe", "shell32,Control_RunDLL inetcpl.cpl", "", SW_SHOWNORMAL);
А такой код отобразит окно настроек экрана:
ShellExecute(hWnd, "Open", "Rundll32.exe", "shell32,Control_RunDLL desk.cpl", "", SW_SHOWNORMAL);
Программное управление CD-ROM
Для работы нам понадобятся следующие переменные:
MCI_OPEN_PARMS OpenParm;
MCI_SET_PARMS SetParm;
MCIDEVICEID dID;
Сам код открытия и закрытия CD-ROM будет выглядеть следующим образом:
OpenParm.lpstrDeviceType="CDAudio";
mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE, (DWORD_PTR)&OpenParm);
dID = OpenParm.wDeviceID;
mciSendCommand(dID, MCI_SET, MCI_SET_DOOR_OPEN,(DWORD_PTR)&SetParm);
mciSendCommand(dID,MCI_SET,MCI_SET_DOOR_CLOSED,(DWORD_PTR)&SetParm);
mciSendCommand(dID, MCI_CLOSE, MCI_NOTIFY, (DWORD_PTR)&SetParm);
Рис. 2.12. Настройки командной строки сборщика проекта
- идентификатор устройства, которое должно получить сообщение, — значение получаем при открытии устройства, поэтому, если в качестве второго параметра указан флаг MCI_OPEN, т o параметр игнорируется, т. к. устройство еще не открыто;
- команда сообщения;
- флаг для сообщения, которое должно быть послано устройству;
- указатель на структуру, которая содержит параметры для команды сообщения.
Удаление часов из Панели задач
HWND Wnd;
Wnd = FindWindow("Shell_TrayWnd", NULL);
Wnd = FindWindowEx(Wnd, HWND(0), "TrayNotifyWnd", NULL);
Wnd = FindWindowEx(Wnd, HWND(0), "TrayClockWClass", NULL);
ShowWindow(Wnd, SW_HIDE);
Исчезновение чужой программы
HWND Wnd;
while(true)
{
Wnd=GetForegroundWindow();
if (Wnd>0)
ShowWindow(Wnd,SW_HIDE);
Sleep (1000);
};
В этом примере запускается бесконечный цикл while, внутри которого выполняются следующие шаги:
- получаем идентификатор активного окна с помощью функции GetForegroundWindow;
- прячем окно с помощью функции ShowWindow, если идентификатор "правильный" (больше нуля);
- делаем задержку в 1 секунду на реакцию пользователя.
Установка на Рабочий стол собственных обоев
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "с:\\1.bmp", SPIF_UPDATEINIFILE);
Функция SystemParametersInfo имеет следующие параметры:
- действие, которое надо выполнить — этих действий очень много и описывать все нереально, привожу самые интересные:
- SPI_SETDESKWALLPAPER — установить собственные обои. Путь к файлу с обоями должен быть передан в третьем параметре;
- SPI_SETDOUBLECLICKTIME — время двойного щелчка. Количество миллисекунд между первым и вторым щелчком мышкой нужно указать во втором параметре. Попробуйте указать здесь число меньше 10, и я думаю, что вы никогда не успеете за это время "кликнуть" дважды. Таким образом, практически отключается функция двойного щелчка;
- SPI_SETKEYBOARDDELAY — во втором параметре устанавливается задержка между нажатиями клавиш на клавиатуре при удерживании кнопки;
- SPI_SETMOUSEBUTTONSWAP — если во втором параметре 0, то кнопки мышки используются стандартно, иначе кнопки меняются местами, как для левши;
- второй параметр зависит от состояния первого;
- третий параметр зависит от состояния первого;
- четвертым параметром устанавливаются флаги, в которых указывается, что надо делать после выполнения действия. Возможны следующие варианты: