Главная страница
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.024 c
4-1118683551
ZSergey
2005-06-13 21:25
2005.08.14
Как перехватить запуск программы в проводнике?


1-1122346020
Knop
2005-07-26 06:47
2005.08.14
Поиск в файле (быстрый)


1-1122256529
Скроллер
2005-07-25 05:55
2005.08.14
Как сделать чтобы координаты не зависили от линеек прокрутки ?


1-1122280286
Sheverev
2005-07-25 12:31
2005.08.14
Создание кнопки ОБЗОР...


14-1121852199
Andy BitOff
2005-07-20 13:36
2005.08.14
Оказывается вчера был праздник.