|
Навигация
|
Главная » Windows Работаем с рабочим столомИсточник: pcnext Darkmaster Привет! Сегодня мы будем работать с тем, что постоянно видим на экране своего монитора, а именно со своим рабочим столом. Не буду сильно болтать о том о сем а сразу же начну с полезных примеров. Для начала давайте разберемся как можно обновить рабочий стол. Я знаю целых два способа для этого. Вот первый из них:procedure TForm1.Button1Click(Sender: TObject); begin SendMessage(FindWindow('Progman', 'Program Manager'), WM_COMMAND, $A065, 0); end; Вот второй способ: procedure TForm1.Button1Click(Sender: TObject); var hDesktop: HWND; begin hDesktop := FindWindowEx(FindWindowEx( FindWindow('Progman', 'Program Manager'), 0, 'SHELLDLL_DefView', ''), 0, 'SysListView32', ''); PostMessage(hDesktop, WM_KEYDOWN, VK_F5, 0); PostMessage(hDesktop, WM_KEYUP, VK_F5, 1 shl 31); end; Теперь давайте разберемся как можно при помощи Делфи установить на рабочий стол свои собственные обои. При этом надо учитывать, что картинка должна быть в формате bmp. Вот как это делается: SystemParametersInfo(SPI_SetDeskWallpaper,0,Pchar('обоина'),SPIF_UPDATEINIFILE); В данном примере естественно вместо слова обоина нужно вписать путь к bmp-шке. Теперь давайте вызовим окно завершения работы Windows. Вот код: SendMessage (FindWindow ('Progman', 'Program Manager'), WM_CLOSE, 0, 0); Теперь давайте разберемся как можно выровнять иконки по левую сторону рабочего стола. Для начала нам нужно получить дескриптор рабочего стола, который является обычным ListView. Вот получение его: function GetDesktopListViewHandle: THandle; var S: String; begin Result := FindWindow('ProgMan', nil); Result := GetWindow(Result, GW_CHILD); Result := GetWindow(Result, GW_CHILD); SetLength(S, 40); GetClassName(Result, PChar(S), 39); if PChar(S) <> 'SysListView32' then Result := 0; end; Теперь можно работать с этим дескриптором при помощи API: SendMessage(GetDesktopListViewHandle,LVM_ALIGN,LVA_ALIGNLEFT,0); Вот эта строка и выравнивает иконки по левому краю. Сейчас я научу вас скрывать/показывать иконки которые расположены на рабочем столе. Делается это вот каким способом, для начала мы создадим процедуру, а потом запустим ее с разными параметрами, вот эта процедура: procedure ShowDesktop(const YesNo : boolean); var h : THandle; begin h := FindWindow('ProgMan', nil); h := GetWindow(h, GW_CHILD); if YesNo = True then ShowWindow(h, SW_SHOW) else ShowWindow(h, SW_HIDE); end; Теперь нам надо вызвать нашу процедуру. Если вы хотите скрыть иконки на рабочем столе то вызовете: ShowDesktop(false); Если вам надо показать иконки то: ShowDesktop(true); Теперь две функции не очень на прямую относящиеся к рабочему столу, но описать их мне хочется здесь и сейчас. Первая это зачем парится со всеми иконками когда можно просто отключить монитор: SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0); Если хотите включить монитор то вместо 0 ставьте 1. Ну, и наконец в этой статье мы вызывали окно завршения работы Windows. Давайте теперь просто перезагрузим нашу систему: ExitWindows(EW_RESTARTWINDOWS, 0 ); Можно вместо EW_RESTARTWINDOWS писать: EW_RESTARTWINDOWS EW_REBOOTSYSTEM EW_EXITANDEXECAPP Вот и все, что я хотел сегодня вам рассказать. ESET NOD32: Часто задаваемые вопросы. Почему Office 2013 несовместим с Windows XP и Windows Vista?. Вышла новая версия ABCL 1.1.0 - реализации языка программирования Common Lisp. Adobe Shadow - удаленный просмотр, проверка и отладка web-сайтов в Android и iOS. Страшно далеки скрипты от народа.... Главная » Windows |
© 2024 Team.Furia.Ru.
Частичное копирование материалов разрешено. |