Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-1145789890
Navi
2006-04-23 14:58
2006.06.18
Запрос на удаление записей


4-1143014316
EgorovAlex
2006-03-22 10:58
2006.06.18
Как улучшить поиск в LDAP? Есть такая конструкция, которая


15-1147874944
flad
2006-05-17 18:09
2006.06.18
как задать в командной строке "Wordpad file.txt" то что


1-1146845274
Grihan
2006-05-05 20:07
2006.06.18
String to Date


2-1148571234
Golik
2006-05-25 19:33
2006.06.18
Как сжать exe-шник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский