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

Вниз

Получение списка выделенных файлов   Найти похожие ветки 

 
Долька   (2005-05-04 07:18) [0]

Уважаемые мастера, подскажите пожалуйста, как можно получить список выделенных фалов в windows explorer в обычной TMemo?


 
Долька   (2005-05-04 14:49) [1]

ЭЭЭ... Не за что


 
Marser ©   (2005-05-04 15:48) [2]

С помощью findwindow и findwindowex находим окошко класса SysListView32, с которым и работаем:
LVM_GETSELECTEDCOUNT
LVM_GETSELECTIONMARK
LVM_GETITEMTEXT
LVM_GETITEMSTATE
И т.д... Подробности в хелпе.


 
easy ©   (2005-05-04 16:34) [3]

function PrintEnumProc(Wnd: HWND; LParam: LPARAM): BOOL; stdcall;
const
 MaxTextSize = 1024;
var
 PrText: array[0..MaxTextSize] of char;
 i, count,state: integer;
 vBuffer: array[0..255] of Char;
 vProcessId: DWORD;
 vProcess: THandle;
 vPointer: Pointer;
 vNumberOfBytesRead: Cardinal;
 vItem: TLVItem;
begin
 Result := True;
 windows.GetClassName(Wnd, PrText, MaxTextSize);
 if PrText = "SysListView32" then begin
   count := SendMessage(Wnd, LVM_GETITEMCOUNT, 0, 0);
   GetWindowThreadProcessId(Wnd, @vProcessId);
   vProcess := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, vProcessId);
   vPointer := VirtualAllocEx(vProcess, nil, 4096, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
   try
     for I := 0 to count - 1 do begin
       state:=SendMessage(Wnd, LVM_GETITEMSTATE, I, LVIS_SELECTED);
       if state=LVIS_SELECTED then begin
       with vItem do begin
         mask := LVIF_TEXT;
         iItem := I;
         iSubItem := 0;
         cchTextMax := SizeOf(vBuffer);
         pszText := Pointer(Cardinal(vPointer) + SizeOf(TLVItem));
       end;
       WriteProcessMemory(vProcess, vPointer, @vItem, SizeOf(TLVItem), vNumberOfBytesRead);
       SendMessage(Wnd, LVM_GETITEM, I, integer(vPointer));
       ReadProcessMemory(vProcess, Pointer(Cardinal(vPointer) + SizeOf(TLVItem)),
           @vBuffer[0], SizeOf(vBuffer), vNumberOfBytesRead);
       TMemo(Pointer(LParam)^).Lines.Add(vBuffer);
       end;
     end;
   finally
     VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE);
     CloseHandle(vProcess)
   end;
   Result := false;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 W: HWND;
begin
 Memo1.Clear;
 W := FindWindow("ExploreWClass", nil);
 if W = 0 then
   raise Exception.Create("Explorer window not found");
 EnumChildWindows(W, @PrintEnumProc, LPARAM(@memo1));
end;


 
PixNoFix   (2005-06-13 09:31) [4]

Кто использует этот код на забудте добавить вот эту библиотеку.. я 2 дня глумился :) пока не нашёл что за TLVItem такой
CommCtrl

Вопрос такой!
Как можно заменить ExplorerWClass - Проводник, на Обычный Экплорер... который вызывается, когда тыкаешь на "Мой компьютер, диск c:\, ну и т.д."



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

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

Наверх




Память: 0.48 MB
Время: 0.03 c
14-1122098346
Igorek
2005-07-23 09:59
2005.08.14
Обратить байт - соревнование :)


1-1122010862
Товарищ
2005-07-22 09:41
2005.08.14
Всем привет кто нить знает как привязать so библиотеку к apache ?


3-1120620544
k2
2005-07-06 07:29
2005.08.14
Создание уникального идентификатора в Mssql


1-1122312837
Зм1й
2005-07-25 21:33
2005.08.14
Массивы


4-1118339471
Spectre_s
2005-06-09 21:51
2005.08.14
Создание пользователя Windows через Delphi