Главная страница
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.134 c
4-1117616006
Yandexman
2005-06-01 12:53
2005.08.14
Как изменить фоновую картинку на рабочем столе.


1-1122460180
Dust
2005-07-27 14:29
2005.08.14
вызвать raise Exception


1-1122382746
chili
2005-07-26 16:59
2005.08.14
Помогите разобраться с потоком


14-1121798060
Керк
2005-07-19 22:34
2005.08.14
Вся правда о Гагарине


4-1118607992
NikNet
2005-06-13 00:26
2005.08.14
Установка и удаление Драйвера! Чет я запутался или что-то не то