Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.07.2011, 12:05
Ghennadiy Ghennadiy вне форума
Прохожий
 
Регистрация: 25.08.2009
Сообщения: 17
Репутация: 10
Сообщение Хелп с SysListView32

Очень нужен рабочий пример чтения этого компонента в чужом приложении по хэндлу окна и запись в свой listbox! help help help!
Ответить с цитированием
  #2  
Старый 28.07.2011, 13:01
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

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  
Старый 28.07.2011, 14:28
Ghennadiy Ghennadiy вне форума
Прохожий
 
Регистрация: 25.08.2009
Сообщения: 17
Репутация: 10
Сообщение

прошу прощения, перепутал со StringGrid....и можно плиз такие исходники не кидать
Код:
'Я    Bgь>Ѓ^с˜ – <pDoSysListView32.pasgь> dClassesИCТп '
Ответить с цитированием
  #4  
Старый 28.07.2011, 14:40
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

исходника никто и не кидал, это выложен скомпилированый модуль, чтобы не напрягать пользователей изучением принципа его работы, а дать время почитать книжку по Delphi и изучить что такое dcu файл, который содержит в себе функцию:
Код:
procedure FillSysListView32(hListView: THandle; AStrings: TStrings);
т.е. передав ей переменую типа TStringList и пробежавшись по всем ее Strings можно хоть в Excel загнать.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 28.07.2011, 14:50
Ghennadiy Ghennadiy вне форума
Прохожий
 
Регистрация: 25.08.2009
Сообщения: 17
Репутация: 10
Сообщение

тогда выложу исходник за тебя
Код:
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  
Старый 28.07.2011, 15:16
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

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;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:55.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter