Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2011, 17:54   #1
jihot
Начинающий кодер
Пользователь
 
Аватар для jihot
 
Регистрация: 26.01.2010
Сообщений: 72
Восклицание Получить содержимое чужого окна, возможно?

Здравствуйте.

Скажите, возможно получить содержимое чужого окна?
поясню, в окне есть listbox(вроде как), и мне надо получить всё, что в нём находится..(скрин окна прикреплю)

Юзал поиск, но не нашёл , что нужно..

Помогите.



p.s. в окне есть кнопка получить список учетных записей. после чего качает с сервера сам список. может будит проще как-то узнать его адрес...
with love ^.^

Последний раз редактировалось jihot; 22.07.2011 в 17:59.
jihot вне форума Ответить с цитированием
Старый 22.07.2011, 18:03   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

хм взять сниффер и посмотреть откуда берётся сервер.
Если HTTP соединение о HTTPAnalyzer лучше нет. УКзнаешь и сервер и запос который составляет ПО для сервера.

Поищи в блоге GunSmoker'а... там была статья какполучать данные с экрана. Да и вообще блог - кладец ценнной информации.

Ещё у него есть блог переводов статей, тоже очень полезно читать.
Человек_Борща вне форума Ответить с цитированием
Старый 22.07.2011, 21:40   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в окне есть listbox
Это скорее ListView...
Хотя уверен что SpyXX поведает о совсем другом классе.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.07.2011, 22:30   #4
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
По умолчанию

Цитата:
Сообщение от jihot Посмотреть сообщение
Здравствуйте.

Скажите, возможно получить содержимое чужого окна?
поясню, в окне есть listbox(вроде как), и мне надо получить всё, что в нём находится..(скрин окна прикреплю)

Юзал поиск, но не нашёл , что нужно..

Помогите.



p.s. в окне есть кнопка получить список учетных записей. после чего качает с сервера сам список. может будит проще как-то узнать его адрес...
могу помочь - ввоскрес. превая половина дня, нужен будет тим вивер и дельфи
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума Ответить с цитированием
Старый 23.07.2011, 00:51   #5
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Судя по твоим скринам это ListView.

Пример считывания с чужого листа ListView в свой TStringGrid.
1. К проекту добавить юнит:
uses
CommCtrl;

2. Вставь в форму TStringGrid

3. Перенести этот код к себе в проект
Код:
procedure GetListViewGrid(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;

4. Использовать так:
ALVHandle: это дескриптор листа которого нужно захватить, надеюсь ты умеешь дескрипторы контролов ловить.
AColumnCount: количество столбцов
AItemCount: количество строк если поставить значение 0 то прочитает все строки.
ADataGrid: это твой грид на твоей форме в котором будут отображаться строки с чужого ListView.
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
GetListViewGridData(ALVHandle, 10, 0, StringGrid1);
end;

Последний раз редактировалось Aliens_wolfs; 23.07.2011 в 01:19.
Aliens_wolfs вне форума Ответить с цитированием
Старый 23.07.2011, 09:16   #6
jihot
Начинающий кодер
Пользователь
 
Аватар для jihot
 
Регистрация: 26.01.2010
Сообщений: 72
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это скорее ListView...
Хотя уверен что SpyXX поведает о совсем другом классе.
Вы были правы..
TVirtualStringTree
with love ^.^

Последний раз редактировалось jihot; 23.07.2011 в 12:49.
jihot вне форума Ответить с цитированием
Старый 23.07.2011, 15:34   #7
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Попробуйте код который я предложил, может получится извлечь данные.

Последний раз редактировалось Aliens_wolfs; 23.07.2011 в 15:51.
Aliens_wolfs вне форума Ответить с цитированием
Старый 23.07.2011, 16:12   #8
jihot
Начинающий кодер
Пользователь
 
Аватар для jihot
 
Регистрация: 26.01.2010
Сообщений: 72
По умолчанию

не работает(
with love ^.^
jihot вне форума Ответить с цитированием
Старый 23.07.2011, 16:15   #9
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

С LisView у меня четко работает, значит в интернете поищите. Как программа называется с которой хотите данные извлечь?

Последний раз редактировалось Aliens_wolfs; 23.07.2011 в 16:21.
Aliens_wolfs вне форума Ответить с цитированием
Старый 23.07.2011, 16:33   #10
jihot
Начинающий кодер
Пользователь
 
Аватар для jihot
 
Регистрация: 26.01.2010
Сообщений: 72
По умолчанию

если я правильно понял, как сказал Stilet, надо отправлять сообщение окну со списком. и получать список в своей программе..буду пробовать
with love ^.^
jihot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Udp Socket. Возможно ли отправить сообщение от чужого ip-адреса? Denutrror Работа с сетью в Delphi 6 19.06.2011 21:34
Заменить содержимое чужого окна jhonyxakep Win Api 1 10.05.2011 01:45
Сворачивание чужого окна artemavd Общие вопросы Delphi 2 27.04.2010 07:45
VirtualStringTree чужого окна akaTemporary Общие вопросы Delphi 0 29.01.2010 14:32
Нужно получить все компоненты чужого окна по дескриптору 3lander Win Api 12 28.11.2007 20:41