Главная страница
    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.011 c
15-1148165161
ArtemESC
2006-05-21 02:46
2006.06.18
Число со степенью двойки.


15-1148546247
_Hawk_
2006-05-25 12:37
2006.06.18
Как преобразовать текст?


3-1145347315
Jet
2006-04-18 12:01
2006.06.18
Индексы idx + Delphi


15-1148230125
RUNaum
2006-05-21 20:48
2006.06.18
psql и че-то не допирает...


1-1147515408
sinus
2006-05-13 14:16
2006.06.18
Кнопка на таскбаре





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский