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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2007, 00:54   #1
Legos
Новичок
Джуниор
 
Регистрация: 16.10.2007
Сообщений: 2
По умолчанию Изменение SysListView32 в другом приложении

Дан хэндл списка в некотором приложении.
Необходимо добавить в этот список строчки с определёнными значениями.
Причём список этот типа SysListView32.

Вот кусок кода на Delphi:
Код:
procedure AddSomeString(AHandle:THandle);
var
vItem: TLVItem;
vPointer,vPointerText:Pointer;
vProcessId: DWORD;
vProcess: THandle;
vBuffer: array[0..255] of Char;
begin
  GetWindowThreadProcessId(AHandle, @vProcessId);
  vProcess := OpenProcess(PROCESS_ALL_ACCESS, False, vProcessId);
  vPointer := VirtualAllocEx(vProcess, nil, 4096, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
  vPointerText := VirtualAllocEx(vProcess, nil,4096,MEM_RESERVE or MEM_COMMIT,PAGE_READWRITE);
    vBuffer:='someText';
    with vItem do begin
      mask := HDI_TEXT;
      iItem := 0;
      iSubItem := 0;
      cchTextMax := SizeOf(vBuffer);
      pszText := (vPointerText);
    end;
    WriteProcessMemory(vProcess, vPointer, @vItem, SizeOf(TLVItem), nil);
    WriteProcessMemory(vProcess, vPointerText, @vBuffer, SizeOf(vBuffer), nil);
    SendMessage(AHandle, LVM_INSERTITEM, 0, lparam(vPointer));
end;
Этот код добавляет пустую строку в список.
Каким образом можно заполнить ячейки этой строки "нужным" текстом ?
Legos вне форума Ответить с цитированием
Старый 16.10.2007, 02:29   #2
Legos
Новичок
Джуниор
 
Регистрация: 16.10.2007
Сообщений: 2
По умолчанию

Проблема частично устранена, теперь после записи в память "чужой" программы данные можно считать, но в самой программе эти данные не отображаются.
Код:
procedure AddSomeString(AHandle:THandle);
var
vItem: TLVItem;
vPointer,vPointerText:Pointer;
vProcessId: DWORD;
vProcess: THandle;
vBuffer: array[0..255] of Char;
begin
  GetWindowThreadProcessId(AHandle, @vProcessId);
  vProcess := OpenProcess(PROCESS_ALL_ACCESS, False, vProcessId);
  vPointer := VirtualAllocEx(vProcess, nil, 4096, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
  vBuffer:='999999999';
    with vItem do begin
      mask := HDI_TEXT;
      iItem := 0;
      iSubItem := 0;
      cchTextMax := SizeOf(vBuffer);
      pszText := VirtualAllocEx(vProcess, nil,256,MEM_RESERVE or MEM_COMMIT,PAGE_READWRITE);
      pchar(pszText):=vBuffer;
    end;
    WriteProcessMemory(vProcess, vPointer, @vItem, SizeOf(TLVItem), vNumberOfBytesRead);
    SendMessage(AHandle, LVM_INSERTITEM, 0, lparam(vPointer));
    ReadProcessMemory(vProcess, vPointer, @vItem, SizeOf(TLVItem), vNumberOfBytesRead);
    ShowMessage(vItem.pszText);
end;
Естественно, каким образом сделать так, чтобы в "чужой" программе были видны изменения списка ?

Последний раз редактировалось Legos; 16.10.2007 в 02:31.
Legos вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли подсчитать FPS в другом процессе? Minimus Win Api 7 26.08.2008 02:08
Ссылка на ячейку в другом листе... Shavminator Microsoft Office Excel 3 23.07.2008 16:52
Не запускается на другом компе nevo БД в Delphi 1 22.05.2008 14:05
Отследить нажатие одной кнопки в другом приложении... ActiveX Win Api 4 04.04.2008 23:05
Выделенный текст в другом приложении Nez Win Api 9 09.04.2007 01:52