Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить ListView_GetItem на x64 ! для других процессов 
:(
    Опции темы
psgpsg
Дата 16.8.2006, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 15.8.2006

Репутация: нет
Всего: нет



W2003 SE x64 SP1

Пытаюсь выполнить ListView_GetItem в другом процессе, например, в Проводнике

Есть код :
....
Код

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls,
  Commctrl,
  uProcessMemMgr;
....
Const
E_GENERAL_ERROR = -10001;
E_NO = -2;
E_OK = 0;
MaxTextSize = 1024;

type
  PTLVItem = PLVItem;

function getItemListView (wHandle: HWND; indxItem : integer; var res : integer) : string;
Var
  item:    TLVItem;
  count:    Integer;
  MMLV: TProcessMemMgr;
  PrLVText: PChar;
  PrLVItem : PTLVItem;

Begin

  res := E_ILLEGAL_PARAMETER;
  result := '';

  if (wHandle = 0) then
    exit;
  count := ListView_GetItemCount(wHandle); 
  if ((indxItem < 0) Or (indxItem >= count)) then
    exit;

  res := E_OK;

  MMLV := CreateProcessMemMgrForWnd(wHandle);
  try
    PrLVItem := MMLV.AllocMem(SizeOf(TLVItem));
    PrLVText := MMLV.AllocMem(MaxTextSize);

    // i want the data from item#0
    item.iSubItem := 0;
    item.mask := LVIF_TEXT;
    item.cchTextMax := MaxTextSize;
    item.pszText := PrLVText;
    item.iItem := indxItem;

      MMLV.Write(item, PrLVItem, SizeOf(TLVItem));
      if (Not (ListView_GetItem(wHandle, PrLVItem^))) then
        res := E_GENERAL_ERROR
      else
        result := MMLV.ReadStr(PrLVText);

  finally
    MMLV.Free;
  end;
End;


procedure TForm1.Button1Click(Sender: TObject);
Var
  res : integer;
  s : string;
  wHandle:    HWND;

Begin

  wHandle := .....; // здесь задан Handle ListView
  s := getItemListView (wHandle, 0, res);
  if (res = E_OK) then
    ShowMessage('s = ' + getItemListView (wHandle, 0, res));


end;

.....
Ф-ция 
ListView_GetItem(wHandle, PrLVItem^) - возвращает False

PS
Если использовать ListView_GetItem( для определения Item в самом приложении - то все ОК.

Этот код нормально работает на 32-разрядной Винде, а вот на 64 - нет.
Предполагаю, что проблема в uProcessMemMgr.... (исходник взят http://come.to/delphi-bits)

М.б. кто-то сможет помочь ?

PM MAIL   Вверх
Yanis
Дата 16.8.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Не глядел глубоко, но может дело в константе MemMgrMemSize?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
psgpsg
Дата 16.8.2006, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 15.8.2006

Репутация: нет
Всего: нет



Подскажите, пллз, а на что надо изменить значение этой константы (16*1024)? 

Я попробовал (от фонаря..) изменить на 16*1024 *1024 - не помогло..



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0560 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.