|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Хелп с SysListView32
Очень нужен рабочий пример чтения этого компонента в чужом приложении по хэндлу окна и запись в свой listbox! help help help!
|
#2
|
||||
|
||||
http://narod.ru/disk/20260251001/DoS...iew32.dcu.html
Код:
uses DoSysListView32, var hListView: THandle; begin hListView:=FindWindow('Progman', 'Program Manager'); if hListView<>0 then begin hListView:=FindWindowEx(hListView, 0, 'SHELLDLL_DefView', nil); if hListView<>0 then hListView:=FindWindowEx(hListView, 0, 'SysListView32', 'FolderView'); end; if hListView<>0 then begin FillSysListView32(hListView, ListBox.Items); end; end; Пишу программы за еду. __________________ |
#3
|
|||
|
|||
прошу прощения, перепутал со StringGrid....и можно плиз такие исходники не кидать
Код:
'Я Bgь>Ѓ^с – <pDoSysListView32.pasgь> dClassesИCТп ' |
#4
|
||||
|
||||
исходника никто и не кидал, это выложен скомпилированый модуль, чтобы не напрягать пользователей изучением принципа его работы, а дать время почитать книжку по Delphi и изучить что такое dcu файл, который содержит в себе функцию:
Код:
procedure FillSysListView32(hListView: THandle; AStrings: TStrings); Пишу программы за еду. __________________ |
#5
|
|||
|
|||
тогда выложу исходник за тебя
Код:
procedure GetViewGrid(ALVHandle: HWND; AColumnCount, AItemCount: Integer; ADataGrid: TStringGrid); const cchTextMax=255; var hProcess: THandle; dwProcessID: DWORD; dwWriten: DWORD; LVItemCount: Integer; i, j, nTextLength: Integer; // pLVItem: ^LV_ITEM; LVItem: LV_ITEM; pszText: PChar; svText: ShortString; begin if ALVHandle = 0 then Exit; // Получаем количество строк LVItemCount := ListView_GetItemCount(ALVHandle); if AItemCount > LVItemCount then exit; if AItemCount > 0 then LVItemCount:=AItemCount; //Получаем ID процесса, которому принадлежит найденное окно dwProcessID := 0; GetWindowThreadProcessId(ALVHandle, @dwProcessID); if dwProcessID = 0 then ExitProcess(GetLastError); // Открываем процесс hProcess := 0; hProcess := OpenProcess(PROCESS_ALL_ACCESS, True, dwProcessID); if hProcess = 0 then ExitProcess(GetLastError); // Выделяем в нем память под текстовый буффер pszText := VirtualAllocEx(hProcess, nil, cchTextMax, MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE); // Выделяем в нем память под структуру LVITEM pLVItem := VirtualAllocEx(hProcess, nil, SizeOf(LV_ITEM), MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE); //Устанавливаем колич строк и столбцов в TStringGrid ADataGrid.RowCount := LVItemCount ; ADataGrid.ColCount := AColumnCount ; // Заполняем структуру ZeroMemory(@LVItem, SizeOf(LV_ITEM)); LVItem.mask := LVIF_TEXT; LVItem.pszText := pszText; LVItem.cchTextMax := cchTextMax; //Считываем строки for i := 0 to LVItemCount - 1 do begin LVItem.iSubItem := 0; // Пишем ее в память удаленного процесса if not WriteProcessMemory(hProcess, pLVItem, @LVItem, SizeOf(LV_ITEM), dwWriten) then Exit; nTextLength := SendMessage(ALVHandle, LVM_GETITEMTEXT, i, Integer(pLVItem)); // Читаем результат ZeroMemory(@svText, cchTextMax); ReadProcessMemory(hProcess, LVItem.pszText, @svText[1], nTextLength, dwWriten); //заполняем строки TStringGrid ADataGrid.Cells[1, i + 1] := StrPas(PChar(@svText[1])); //Считываем столбцы for j := 0 to AColumnCount - 1 do begin LVItem.iSubItem := j; // Пишем ее в память удаленного процесса if not WriteProcessMemory(hProcess, pLVItem, @LVItem, SizeOf(LV_ITEM), dwWriten) then Exit; nTextLength := SendMessage(ALVHandle, LVM_GETITEMTEXT,i, Integer(pLVItem)); // Читаем результат ZeroMemory(@svText, cchTextMax); ReadProcessMemory(hProcess, LVItem.pszText, @svText[1], nTextLength, dwWriten); //заполняем столбцы TStringGrid ADataGrid.Cells[j + 1, i + 1] := StrPas(PChar(@svText[1])); end; end; // Освобождаем ранее выделенную память VirtualFreeEx(hProcess, pszText, 0, MEM_RELEASE); VirtualFreeEx(hProcess, pLVItem, 0, MEM_RELEASE); // Закрываем описатель процесса CloseHandle(hProcess); end; но у меня не получаеться в нем разобраться, может кто нить поможет скомпилировать нормальный рабочий код который читает syslistview32 и пишет все в StringGrid Спасибо |
#6
|
||||
|
||||
http://narod.ru/disk/20273687001/DoS...iew32.dcu.html
Код:
uses DoSysListView32, procedure TForm1.FormCreate(Sender: TObject); var hListView: THandle; // AStringList: TStringList; begin hListView:=FindWindow('Progman', 'Program Manager'); if hListView<>0 then begin hListView:=FindWindowEx(hListView, 0, 'SHELLDLL_DefView', nil); if hListView<>0 then hListView:=FindWindowEx(hListView, 0, 'SysListView32', 'FolderView'); end; if hListView<>0 then begin FillSysListView32(hListView, StringGrid1); // AStringList:=TStringList.Create; // FillSysListView32(hListView, AStringList); // AStringList.Free; end; end; Пишу программы за еду. __________________ |