Windows - gerenciando o desktop |
Top Previous Next |
|
// Este primeiro exemplo veio do livro 365 dicas de Delphi: ========================================================================== uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CommCtrl;
// Este eu testei e FUNCIONA só no Win9x
type TForm1 = class(TForm) Label1: TLabel; ListBox1: TListBox; Button1: TButton; Button2: TButton; Button3: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private DskList : hWnd; public { Public declarations } end;
PInfo = ^TInfo; TInfo = packed record Text: array[0..255] of Char; Item: TLVItem; end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject); var NumItens : Integer; Info : PInfo; i : Integer; Handle : THandle; begin DskList := FindWindowEx(GetDesktopWindow,0,'Progman','Program Manager'); DskList := FindWindowEx(DskList,0,'ShellDLL_DefView',nil); DskList := FindWindowEx(DskList,0,'SysListView32',nil); NumItens := ListView_GetItemCount(DskList); Label1.Caption := 'Número de itens - '+IntToStr(NumItens); Handle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, Sizeof(TInfo), ''); if Handle = 0 then Abort; Info := MapViewOfFile(Handle, FILE_MAP_WRITE, 0, 0, Sizeof(TInfo)); try with Info^ do begin Item.pszText := Text; Item.cchTextMax := 255; Item.mask := LVIF_TEXT; for i := 0 to NumItens - 1 do begin Item.iItem := i; Item.iSubItem := 0; ListView_GetItem(DskList, Item); Listbox1.Items.Add(String(Item.pszText)); end; end; finally UnmapViewOfFile(Info); end; end;
procedure TForm1.Button1Click(Sender: TObject); begin ListView_SetTextBkColor(DskList, $ffffffff); end;
procedure TForm1.Button2Click(Sender: TObject); begin ListView_SetTextBkColor(DskList, clNavy); end;
procedure TForm1.Button3Click(Sender: TObject); begin ListView_Arrange(DskList,LVA_ALIGNTOP); end;
===================================================================
...manage desktop icons ?
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;
SendMessage(GetDesktopListViewHandle,LVM_ALIGN,LVA_ALIGNLEFT,0);
For more LVM_ messages see win32.hlp
-------------------------------------------------------------------
TESTADO: Para pegar quantos itens tem no Desktop:
uses commctrl;
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); var Item: TagLVITEMA; // LV_ITEM; I, Total: Integer; H: HWND; P: TPoint; begin H := GetDesktopListViewHandle; Total := ListView_GetItemCount(H)-1; { // for I := 0 to Total-1 do // begin // Item.iItem := I; // Item. // ListView_GetItem( H, Item); I := 10; repeat I:= ListView_GetNextItem(H, I, LVNI_ALL); ListView_GetItemText(H, I, 0, P, 255); Memo1.Lines.Add( P ); Inc(I); until I = 12; // end; } // SendMessage( HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0 ); // Isto força um F5 no Desktop
Memo1.Lines.Add( 'Numero de items: ' + IntToStr(ListView_GetItemCount(H))); // ListView_SetTextBkColor(H, ColorToRGB( clBlack )); // ListView_SetItemPosition(H, 10, 200, 200); // SendMessage( HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0 ); // Isto força um F5 no Desktop for I := 0 to Total-1 do begin ListView_GetItemPosition(H, I, P); Memo1.Lines.Add( 'x: ' + IntToStr(P.x) + ' y:' + IntToStr(P.y)); end; end; -------------------------------------------------------------------
|