Форум: "WinAPI";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];
ВнизКак по хэндлу получить список файлов рабочего стола в 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c