Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.18;
Скачать: CL | DM;

Вниз

Как по хэндлу получить список файлов рабочего стола в TListBox?   Найти похожие ветки 

 
Volf_555 ©   (2006-03-19 13:06) [0]

Для получения хэндла рабочего стола использую следующую функцию:

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;

Как теперь получить список файлов на рабочем столе по хэндлу?
PS: И где можно прочитать статьи по работе с окнами после получения их хэндла?


 
API ©   (2006-03-19 13:08) [1]

C:\Documents and Settings\<UserName>\Рабочий стол


 
Volf_555 ©   (2006-03-19 13:12) [2]


> API ©   (19.03.06 13:08) [1]
> C:\Documents and Settings\<UserName>\Рабочий стол

Меня интересует работа через handle окна


 
Andrey.Ru   (2006-03-19 21:33) [3]

Вот тебе через АПИ

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls, CommCtrl;

type
 TForm1 = class(TForm)
   Button1: TButton;
   ListBox1: TListBox;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 MeLW : HWND;
 its, bufs : Pointer;

implementation

{$R *.dfm}
//------------------------------------------------------------------------------
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
   Hw : HWND;
   hh, c : integer;
   it : TLVItem;
   buf : array [0..32] of char;
   pid, bw : Cardinal;
 begin
   MeLW := GetDesktopListViewHandle;
   hh := SendMessage(MeLW, LVM_GETITEMCOUNT, 0, 0);
   GetWindowThreadProcessId(MeLW, pid);
   Hw := OpenProcess(PROCESS_VM_OPERATION or
                     PROCESS_VM_READ or
                     PROCESS_VM_WRITE or
                     PROCESS_QUERY_INFORMATION,
                     false,
                     pid);
   its := PLVItem(VirtualAllocEx(Hw, nil, sizeof(TLVItem), MEM_COMMIT, PAGE_READWRITE));
   bufs := pchar(VirtualAllocEx(Hw, nil, 512, MEM_COMMIT, PAGE_READWRITE));
   it.cchTextMax := 32;
   it.iSubItem:=1;
   it.pszText:=bufs;
   WriteProcessMemory(Hw, its, @it, sizeof(TLVItem), bw);
   for c:=0 to hh-1 do
     begin
       SendMessage(MeLw, LVM_GETITEMTEXT, c, lparam(its));
       ReadProcessMemory(Hw, bufs, @buf, 32, bw);
       ListBox1.Items.Add(buf);
     end;
   VirtualFreeEx(hw, its, 0, MEM_RELEASE);
   VirtualFreeEx(hw, bufs, 0, MEM_RELEASE);
 end;
//------------------------------------------------------------------------------
end.


 
Volf_555 ©   (2006-03-20 20:39) [4]

Выскакивают следующие ошибки при компиляции:

[Error] Unit1.pas(48): Undeclared identifier: "MeLW"
[Error] Unit1.pas(57): Undeclared identifier: "its"
[Error] Unit1.pas(58): Undeclared identifier: "bufs"

Так как MeLW, its и bufs нигде не объявлены


 
Volf_555 ©   (2006-03-20 21:52) [5]

Извиняюсь - они объявлены как глобальные... не заметил сразу...

Но результат работы программы всё-равно не тот, который нужен, так как результатом работы программы есть вывод на экран размеров всех файлов на рабочем столе в килобайтах!

А мне нужны сами файлы (имена их)


 
VirEx ©   (2006-03-20 22:21) [6]

>  [5] Volf_555 ©   (20.03.06 21:52)
> Извиняюсь - они объявлены как глобальные... не заметил сразу...
>
> Но результат работы программы всё-равно не тот, который
> нужен, так как результатом работы программы есть вывод на
> экран размеров всех файлов на рабочем столе в килобайтах!
>
>
> А мне нужны сами файлы (имена их)


тогда C:\Documents and Settings\<UserName>\Рабочий стол
получай инфу от ярлыков, затем по инфе получай размер файла


 
Volf_555 ©   (2006-03-20 23:33) [7]

Аналогичный ответ уже был на получение файлов с рабочего стола

> Volf_555 ©   (19.03.06 13:12) [2]
>
> > API ©   (19.03.06 13:08) [1]
> > C:\Documents and Settings\<UserName>\Рабочий стол
>
> Меня интересует работа через handle окна



Страницы: 1 вся ветка

Текущий архив: 2006.06.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
15-1148465605
Игорь Шевченко
2006-05-24 14:13
2006.06.18
Любителям изящной словесности


4-1142930111
Arazel
2006-03-21 11:35
2006.06.18
Не могу создать TabControl, WinApi


2-1148990281
Setor
2006-05-30 15:58
2006.06.18
Как связать переменную с опр. кнопкой, зная Name этой кнопки?


15-1148360190
БарЛог
2006-05-23 08:56
2006.06.18
И это - Москва!


2-1148980427
Spot-up
2006-05-30 13:13
2006.06.18
Немодальная форма