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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2016, 21:49   #1
Darkil
Новичок
Джуниор
 
Регистрация: 02.01.2012
Сообщений: 1
Восклицание Handle окна или как выбирать между окнами

Помогите пожалуйста я уже весь мозг сломал
как мне сделать переход от окна к окно через ComboBox

Суть вот в чём, я запускаю программу она находит нужное мне окно, окон может быть много как только окно найдено автоматически я считываю значение из памяти имени, допустим персонажа и меняю название окна, на название его имени,
после чего я вывожу найденные окна которым уже присвоено имя из памяти в ComboBox ' sComboBox1.Items.Add(''+Nm+'') ;

Вот после этого мне нужно чтобы при выборе из списка 'ComboBox' имени персонажа и нажатии на кнопку я мог открыть процесс считывания памяти конкретно из этого окна

Заранее Спасибо

Нужно чтобы вот этот процесс применялся к выбранному окну в ComboBox
Код:
var
Client Window:HWND; //Handle клиента
  Processed:Integer;
  process:Integer; //Идентификатор объекта
  Window Name: integer;
  Client Window := FindWindow(nil, PChar('Окно которое выбрано по имени персонажа в ComboBox'));   //Находим Handle окна
GetWindowThreadProcessed(Client Window,@Processed); //Получаем И.П.
process := OpenProcess(PROCESS_ALL_ACCESS,False,Processed); //Открываем процесс с возможностью записи
Код определения окна и чтения из памяти имени персонажа
Код:
procedure TForm1.FormActivate(Sender: TObject);
    var
    Wd : HWnd;
  buf,Nm: array [0..255] of char;
  i: integer;
  PID: dword;
  lpBuffer:DWord;
  WNik: array[0..255] of widechar;
  s: WideString;
  NoB: SIZE_T;
  LvL,ClassID:Integer;
  Lvel,WClassID:DWord;
 
begin
   i:= 0;
    smemo2.Clear;         // Очистим список перед началом поисков
    Wd:=FindWindow(0,0);          // Найдем первое окно верхнего уровня любого класса
    While (Wd<>0) do              // Если такое окно существует
    Begin
        GetClassName(wd,@buf,100);    //Получаем класс окна (Чувствителен к регистру)
        if buf='Имя Окна Window' then  // Если наше
          begin
            GetWindowThreadProcessId(wd, @PID);
            hProcess:=OpenProcess(PROCESS_ALL_ACCESS, False, PID);
//-----читаю-память---------------------------------------------------------------
            ReadProcessMemory (hProcess, Pointer($00D6F84C), @lpBuffer, sizeof(lpBuffer), NoB);
            ReadProcessMemory (hProcess, Pointer(lpBuffer+$28), @lpBuffer, sizeof(lpBuffer), NoB);
            ReadProcessMemory (hProcess, Pointer(lpBuffer+$6E8), @lpBuffer, sizeof(lpBuffer), NoB);
            ReadProcessMemory (hProcess, Pointer(lpBuffer+StrToInt('$0')), @WNik, sizeof(WNik), NoB);
            s := WNik;
//------------------------------------------------------------------------------------
            //Делаем Заголовок окна по имени игрока
            setWindowText(Wd,(s));
            GetWindowText(Wd,Nm,255);       //получаем название окна
            smemo2.Lines.Add(s);       
            smemo2.Lines.Add('Class: '+buf);         // Добавим в список
            smemo2.Lines.Add('Window: '+Nm);
            smemo2.Lines.Add('HWnd: '+IntToStr(Wd));
             Form1.sComboBox1.Items.Add(''+Nm+'') ;// Вы вожу в ComboBox1
            inc(i);
            CloseHandle(hProcess);
            hProcess:= 0;
 
          end;
        Application.ProcessMessages;         // Дадим возможность поработать другим
        Wd:=GetNextWindow(Wd,GW_HWNDNEXT);   // Найдем следующее окно в системе.
 
    End;
    smemo2.Lines.Add('Найдено окон: '+inttostr(i));
 
end;

Последний раз редактировалось Stilet; 16.01.2016 в 09:42.
Darkil вне форума Ответить с цитированием
Старый 15.01.2016, 22:12   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Скажи честно: тебе этот код по телефону диктовали?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 16.01.2016, 00:52   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,882
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Скажи честно: тебе этот код по телефону диктовали?
Да не. Скорее на помойке нашел.
northener вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача сообщений между окнами. Как? Gudsaf Общие вопросы C/C++ 1 15.12.2012 22:39
Как определить Handle дочернего окна? Z3rique Общие вопросы Delphi 8 11.02.2011 00:15
Как узнать handle окна имея handle обного из его компонентов SeRhy Win Api 2 18.10.2009 19:31
Как имея handle окна узнать handle edit-a который находится в етом окне SeRhy Общие вопросы Delphi 1 20.07.2008 13:48
Как запретить переход между диалоговыми окнами. dnkR Общие вопросы Delphi 1 18.01.2007 06:59