Форум: "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.45 MB
Время: 0.012 c