Рабочий стол
Code: |
procedure TForm1.Button1Click(Sender: TObject); var Picture: TPicture; Desktop: TCanvas; X, Y: Integer; begin // Objekte erstellen // create objects Picture := TPicture.Create; Desktop := TCanvas.Create;
// Bild laden // load bitmap Picture.LoadFromFile('bitmap1.bmp');
// Geratekontex vom Desktop ermitteln // get DC of desktop Desktop.Handle := GetWindowDC(0);
// Position des Bildes // position of bitmap X := 100; Y := 100;
// Bild zeichnen // draw bitmap Desktop.Draw(X, Y, Picture.Graphic);
// Geratekontex freigeben ReleaseDC(0, Desktop.Handle);
// Objekte freigeben // release objects Picture.Free; Desktop.Free; end;
|
- Подробности
- Родительская категория: Windows
- Категория: Рабочий стол
Для начала необходимо получить дескриптор рабочего стола, который представляет из себя обычный ListView.
- Подробности
- Родительская категория: Windows
- Категория: Рабочий стол
Как получить и изменить координаты иконок на столе? |
Previous Top Next |
Code: |
uses CommCtrl, IPCThrd; (from your Delphi\Demos\Ipcdemos directory)
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;
procedure TForm1.Button1Click(Sender: TObject); type PInfo = ^TInfo; TInfo = packed record infoPoint: TPoint; infoText: array[0..255] of Char; infoItem: TLVItem; infoFindInfo: TLVFindInfo; end; var r : TRect; hWnd : THandle; i, iCount : Integer;
Info: PInfo; SharedMem: TSharedMem; begin hWnd := GetDesktopWindow(); GetWindowRect(hWnd,r); Memo.Lines.Add('Bottom: ' + IntToStr(r.Bottom)); Memo.Lines.Add('Right: ' + IntToStr(r.Right));
hWnd := GetDesktopListViewHandle; iCount := ListView_GetItemCount(hWnd); Memo.Lines.Add('# Icons: ' + IntToStr(iCount));
SharedMem := TSharedMem.Create('', SizeOf(TInfo)); Info := SharedMem.Buffer;
with Info^ do try infoItem.pszText := infoText; infoItem.cchTextMax := 255; infoItem.mask := LVIF_TEXT; try begin for i := 0 to iCount - 1 do begin infoItem.iItem := i; try ListView_GetItem(hWnd, infoItem); ListView_GetItemPosition(hWnd, I, infoPoint); Memo.Lines.Add('Icon: ' + infoText); Memo.Lines.Add(' X: ' + IntToStr(infoPoint.X)); Memo.Lines.Add(' Y: ' + IntToStr(infoPoint.Y)); except end; end; end; finally end; finally SharedMem.Free; end; end; |
- Подробности
- Родительская категория: Windows
- Категория: Рабочий стол
Code: |
procedure RefreshDesktop; {©Drkb v.3}
var c1 : cardinal; begin c1:=FindWindowEx(FindWindowEx(FindWindow('Progman','Program Manager'),,'SHELLDLL_DefView',''),0,'SysListView32',''); PostMessage(c1,WM_KEYDOWN,VK_F5,0); PostMessage(c1,WM_KEYUP,VK_F5,1 shl 31); end; |
- Подробности
- Родительская категория: Windows
- Категория: Рабочий стол
Code: |
function IsActiveDeskTopOn: Boolean; var h: hWnd; begin h := FindWindow('Progman', nil); h := FindWindowEx(h, 0, 'SHELLDLL_DefView', nil); h := FindWindowEx(h, 0, 'Internet Explorer_Server', nil); Result := h <> 0; end; |
- Подробности
- Родительская категория: Windows
- Категория: Рабочий стол
Code: |
ShellExecute(Application.Handle, 'open', 'desk.cpl', nil, nil, sw_ShowNormal); |
Автор: Nomadic
- Подробности
- Родительская категория: Windows
- Категория: Рабочий стол
Code: |
procedure TForm1.Button1Click(Sender: TObject); begin // скрыть иконки ShowWindow(FindWindow(nil,'Program Manager'),SW_HIDE); end;
procedure TForm1.Button2Click(Sender: TObject); begin // показать иконки ShowWindow(FindWindow(nil,'Program Manager'),SW_SHOW); end; |
- Подробности
- Родительская категория: Windows
- Категория: Рабочий стол
Для этого воспользуемся 'Rundll32.exe' и запустим её в 'shellexecute'. Не забудьте добавить 'shellapi' в Ваш список uses.
- Подробности
- Родительская категория: Windows
- Категория: Рабочий стол
Code: |
uses ComObj, ShlObj, ActiveX;
procedure EnableActiveDesktop(bValue: Boolean); const CLSID_ActiveDesktop: TGUID = (D1: $75048700; D2: $EF1F; D3: $11D0; D4: ($98, $88, $00, $60, $97, $DE, $AC, $F9)); var MyObject: IUnknown; ActiveDesk: IActiveDesktop; twpoComponentOpt: TComponentsOpt; begin MyObject := CreateComObject(CLSID_ActiveDesktop); ActiveDesk := MyObject as IActiveDesktop; with twpoComponentOpt do begin ZeroMemory(@twpoComponentOpt, SizeOf(TComponentsOpt)); dwSize := SizeOf(twpoComponentOpt); fEnableComponents := bValue; // fActiveDesktop := True; end; ActiveDesk.SetDesktopItemOptions(twpoComponentOpt, 0); ActiveDesk.ApplyChanges(AD_APPLY_ALL); end; |
- Подробности
- Родительская категория: Windows
- Категория: Рабочий стол
Рабочий стол перекрыт сверху компонентом ListView. Вам просто необходимо взять хэндл этого органа управления. Пример:
- Подробности
- Родительская категория: Windows
- Категория: Рабочий стол
В принципе, все настройки на фоновый рисунок хранятся в реестре. Поэтому надо сначала скопировать картинку в какое-нибудь место (лучше в каталог Виндов) на случай удаления или переноса исходного файла. Информация по обоям хранится в разделе HKEY_CURRENT_USER\Control Panel\Desktop в параметрах TileWallpaper (если 1 - рисунок размножен, 0 - в центре), Wallpaper - путь к файлу обоев (gif, bmp, jpg), WallpaperStyle - если 2, то обои будут растянуты (отсутствует в 95 винде).
ПОсле установки всех занчений обновляешь рабочий стои и наслаждаешься эффектом.
Автор ответа: Garik
- Подробности
- Родительская категория: Windows
- Категория: Рабочий стол
Страница 1 из 2