Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
Долька   (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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.012 c
4-1119358502
AndreyProg
2005-06-21 16:55
2005.08.14
Сохранить текущую тему оформления WinXP в файл.theme


4-1118732495
Evg12
2005-06-14 11:01
2005.08.14
COM port


3-1120541834
paule
2005-07-05 09:37
2005.08.14
Отображение результата запроса ADOQuery в DBGrid


4-1119519704
ORMADA
2005-06-23 13:41
2005.08.14
CreateProcess трабл


11-1104254184
miek
2004-12-28 20:16
2005.08.14
KOL: свежие глюки





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