Главная страница
    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.012 c
15-1148219271
NailMan
2006-05-21 17:47
2006.06.18
Воровство логотипов? Плагиат?


4-1143054881
DesWind
2006-03-22 22:14
2006.06.18
Создание панели задач


2-1149059536
Perf2k2
2006-05-31 11:12
2006.06.18
Необходимо как-то хранить глобальную переменную с ее значением


15-1148227168
php
2006-05-21 19:59
2006.06.18
Как сравнить даты в формате дд.мм.гггг в php?


2-1148896285
IAmDanil
2006-05-29 13:51
2006.06.18
Как загрузить текстовый файл из интернета в memo1.lines?





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