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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2010, 06:06   #31
xRamzeSx
Форумчанин
 
Регистрация: 24.01.2010
Сообщений: 151
По умолчанию

Окно игры - www.awplanet.com, процесс - portal, файл в папке на диске - awclient.

Последний раз редактировалось xRamzeSx; 17.09.2010 в 06:13.
xRamzeSx вне форума Ответить с цитированием
Старый 17.09.2010, 06:58   #32
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

http://delphiworld.narod.ru/base/fin..._part_cpt.html - Как найти окно по неполному названию
Код:
function FindWindowByText (var WindowT: String): HWND;
var
  Wnd: hWnd;
  buff: array[0..127] of Char;
begin
  Result := 0;
  Wnd := GetWindow(Form1.Handle, gw_HWndFirst);
  while Wnd <> 0 do
  begin
    if (Wnd <> Application.Handle) and
      IsWindowVisible(Wnd) and
      (GetWindow(Wnd, gw_Owner) = 0) and
      (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) then
    begin
      GetWindowText(Wnd, buff, sizeof(buff));
      if pos(WindowT, StrPas(buff)) > 0 then
      begin
        Result := Wnd;
        WindowT := buff;
        Break;
      end;
    end;
    Wnd := GetWindow(Wnd, gw_hWndNext);
  end;
end;
Caprion окна "www.awplanet.com Portal to Another World v 1.21".

Цитата:
процесс - portal
Это зачем?

Код:
файл в папке на диске - awclient
awclient.exe что-ли? Если да, то где вы в нем увидили $456B8C и с чего вы взяли, что это адрес нужных вам данных? Может вы через ArtMoney этот адрес узнали?
Sibedir вне форума Ответить с цитированием
Старый 17.09.2010, 07:34   #33
xRamzeSx
Форумчанин
 
Регистрация: 24.01.2010
Сообщений: 151
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
...где вы в нем увидили $456B8C и с чего вы взяли, что это адрес нужных вам данных? Может вы через ArtMoney этот адрес узнали?
Не важно, как я узнал этот адрес, мне нужно по нему значение узнать только и всё.
xRamzeSx вне форума Ответить с цитированием
Старый 17.09.2010, 07:48   #34
xRamzeSx
Форумчанин
 
Регистрация: 24.01.2010
Сообщений: 151
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
"www.awplanet.com Portal to Another World v 1.21"
Находит но при отображении, показывает:

Иногда, если зайти в игру под другим именем, показывает те же символы, но на конце только последняя буква ника.
xRamzeSx вне форума Ответить с цитированием
Старый 18.09.2010, 07:04   #35
xRamzeSx
Форумчанин
 
Регистрация: 24.01.2010
Сообщений: 151
По умолчанию

Люди, кто-нибудь знает, что сделать, чтобы функция отображала всю текстовую строку, а не только последний символ
xRamzeSx - ‰‰‰‰‰‰‰x
xRamzeSx вне форума Ответить с цитированием
Старый 18.09.2010, 08:34   #36
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Сори, меня опять отвлекли.

Цитата:
Не важно, как я узнал этот адрес, мне нужно по нему значение узнать только и всё.
А-а-а, ну понятно. А смысл был у нас спрашивать, если вы умнее остальных.
xRamzeSx, если я спрашиваю откуда этот адрес, то это наверное важно.
У меня например по этому адресу ($456B8C) сейчас нашлась строка comctl32.dll.
Смысл в том, что поиск значения в процессе по абсолютному адресу весьма сомнительное занятие. Мне кажется нужно искать значение по его смещению онтосительно адреса загрузки приложения.
А как
Цитата:
по нему значение узнать
мы уже разобрались.



P.S.: Не смешите народ, играя в Джеймса Бонда.
Sibedir вне форума Ответить с цитированием
Старый 18.09.2010, 08:56   #37
xRamzeSx
Форумчанин
 
Регистрация: 24.01.2010
Сообщений: 151
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
А смысл был у нас спрашивать, если вы умнее остальных.
Я не умнее всех остальных.
Цитата:
Сообщение от Sibedir Посмотреть сообщение
xRamzeSx, если я спрашиваю откуда этот адрес, то это наверное важно.
Я нашёл этот адрес так, как Вы и предпологали, через ArtMoney
Цитата:
Сообщение от Sibedir Посмотреть сообщение
P.S.: Не смешите народ, играя в Джеймса Бонда.
Я не собирался смешить народ...

PS: Вы можете помоч с отображением всей строки текста?
xRamzeSx вне форума Ответить с цитированием
Старый 18.09.2010, 12:19   #38
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Не обижайтесь, xRamzeSx. Я просто подумал, что вы один из тех умников, которые не знают как решить свою задачу, задают вопрос (не правильно, не полно, чёт там секретничают), не слушают, а потом еще и права качают. Не работает, мол, ваше решение, не умеете не беритесь.
Так что примите мои извинения.

Действительно, у меня артмани тот же адрес выдал. Я в этом не проффи и как устроено адресное пространство до конца не понял. Я думал, что при каждом запуске адрес должен был меняться. Но видимо я ошибался. Это, наверное, и есть уже то самое смещение.

Вот этот код у меня отлично сработал.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

function FindWindowByText (var WindowT: String): HWND;
var
  Wnd: hWnd;
  buff: array[0..127] of Char;
begin
  Result := 0;
  Wnd := GetWindow(Form1.Handle, gw_HWndFirst);
  while Wnd <> 0 do begin
    if (Wnd <> Application.Handle) and
      IsWindowVisible(Wnd) and
      (GetWindow(Wnd, gw_Owner) = 0) and
      (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) then
    begin
      GetWindowText(Wnd, buff, sizeof(buff));
      if pos(WindowT, StrPas(buff)) > 0 then begin
        Result := Wnd;
        WindowT := buff;
        Break;
      end;
    end;
    Wnd := GetWindow(Wnd, gw_hWndNext);
  end;
end;

function read_value (Address: Pointer; ASize: Cardinal; var AOut: Pointer): Cardinal;
var
  WindowH: DWORD;
  ThreadId: DWORD;
  ProcessId: DWORD;
  ProcessH: DWORD;
  s: String;
begin
  s := 'www.awplanet.com';

  WindowH := FindWindowByText (s);
  ThreadId := GetWindowThreadProcessId (WindowH, ProcessId);
  ProcessH := OpenProcess (PROCESS_VM_READ, False, ProcessId);

  ReadProcessMemory(ProcessH, Address, AOut, ASize, Result);

  CloseHandle (ProcessH);
end;

function Read_Integer (Address: Pointer; ASize: Cardinal): Integer;
var
  buf: PInteger;
begin
  GetMem (buf, ASize);
  if read_value (Address, ASize, Pointer(buf)) = ASize then
    Result := buf^
  else
    Result := 0;
end;

function Read_Real (Address: Pointer; ASize: Cardinal): Real;
var
  buf: ^Real;
begin
  GetMem (buf, ASize);
  if read_value (Address, ASize, Pointer(buf)) = ASize then
    Result := buf^
  else
    Result := 0;
end;

function Read_String (Address: Pointer; ASize: Cardinal): String;
var
  buf: String;
begin
  SetLength (buf, ASize);
  if read_value (Address, ASize, Pointer(buf)) = ASize then
    Result := buf
  else
    Result := '';
end;

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Edit1.Text := Read_String (Pointer ($00456B8C), 200);
end;

end.
Sibedir вне форума Ответить с цитированием
Старый 18.09.2010, 14:32   #39
xRamzeSx
Форумчанин
 
Регистрация: 24.01.2010
Сообщений: 151
По умолчанию

При использовании этого кода, у меня снова появляется:

PS: не могли бы Вы сделать скрин шот, подтверждающий, что у Вас всё работает?
xRamzeSx вне форума Ответить с цитированием
Старый 18.09.2010, 14:53   #40
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Вот
Безымянный.JPG

Если у вас D2010, то сделайте так
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  s: string;
begin
  s := PAnsiChar (Read_String (Pointer ($00456B8C), 200));
  Edit1.Text := s;
end;

Последний раз редактировалось Sibedir; 18.09.2010 в 14:59.
Sibedir вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан файл, содержащий текст, записанный строчными русскими буквами. Получить в др.файле тот же текст, develish151 Microsoft Office Word 4 05.05.2010 13:20
Натуральное число, в записи которого п цифр, называется числом Армстронга, если сумма его цифр, возведенн OTLi4HO Общие вопросы C/C++ 6 14.01.2009 19:48
Как узнать какой текст выделен в текст поле mogul82 JavaScript, Ajax 2 02.11.2008 16:32