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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2009, 17:43   #1
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию FindWindow, окно с частицой (символомами)

Вообщем есть окно... Есть начальные символы (точнее они известны) окна.
Нужно сделать так... В случае если FindWindow находит окно где указанные символы есть, то показывает showmessage('ОК') что он нашел окно такое с начальными символами
Но дело в том что я не знаю как это сделать! (pos не поможет вроде как)

Помогайте

(начальные символы окна!)

Последний раз редактировалось zotox; 13.07.2009 в 17:59.
zotox вне форума Ответить с цитированием
Старый 13.07.2009, 17:54   #2
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Цитата:
Сообщение от zotox Посмотреть сообщение
Вообщем есть окно... Есть начальные символы (точнее они известны) окна.
Что за начальные символы?
Evgeniy26 вне форума Ответить с цитированием
Старый 13.07.2009, 17:57   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

начальные символы чего?
заголовка окна?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.07.2009, 17:58   #4
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
начальные символы чего?
заголовка окна?
да! ...
zotox вне форума Ответить с цитированием
Старый 13.07.2009, 18:03   #5
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Найти все окна , занести допустим в TStringList . Далее какраз с тем-же pos выполнить поиск , и снова FindWindow только с уже найденым заголовком окна.
Lime вне форума Ответить с цитированием
Старый 13.07.2009, 18:09   #6
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
Сообщение от Lime Посмотреть сообщение
Найти все окна , занести допустим в TStringList . Далее какраз с тем-же pos выполнить поиск , и снова FindWindow только с уже найденым заголовком окна.
А как найти все окна? Гуглил, не нашел
zotox вне форума Ответить с цитированием
Старый 13.07.2009, 18:13   #7
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Глянь пример.
Вложения
Тип файла: rar EnumWnd.rar (217.8 Кб, 23 просмотров)
Evgeniy26 вне форума Ответить с цитированием
Старый 13.07.2009, 18:14   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

EnumWindows в помощь
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.07.2009, 13:08   #9
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Код:
Function Find(S: String): HWnd;
Var
Wnd: HWnd;
Buff: Array[0..127] Of Char;
Begin
Find:=0;
Wnd:=GetWindow(Application.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(S,StrPas(Buff)) > 0 Then
Begin
Find:=Wnd;
Break;
End;
End;
Wnd:=GetWindow(Wnd,GW_HWndNext);
End;
End;

Procedure TForm1.Button1Click(Sender: TObject);
Begin
If Find('Delp') <> 0 Then
Begin
ShowMessage('Ok');
End;
End;
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 19.07.2009, 16:14   #10
DjDram
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 53
По умолчанию

Смотрю тут тоже api обсуждается а я вот не могу решить задачку нужно считать строку из памяти процесса запущенной программы.

RVA строки $0036D0C8 нужен ведь RVA не VA

Процедура выглядит следующим образом, для проверки значений заносил их в edit

procedure TForm1.Button1Click(Sender: TObject);
var
hProc, PID, numberRead : DWORD;
hWnd : THandle; // Хэндл окна чата
IpBuf : string; // буфер куда поместиться наше значение
ipBase: ^dword; // точка входа в памяти
begin
hWnd:=findwindow('TfChatClient',nil ); /// получаем хэндл окна программы
Edit1.Text:=inttostr(hWnd); // заносим в edit Handle
GetWindowThreadProcessId(hWnd, @PID); //получаем pid зная хэндл окошка интересующей нас программы
Edit2.Text:=inttostr(PID); // заносим в edit ID
hProc:=OpenProcess(PROCESS_VM_READ, False, PID); // подключаемся к процессу зная его ID
try
if hProc <> 0 then // условие проверки подключения к процессу
begin
Edit3.Text:=inttostr(hProc); // заносим в edit Process
ipbuf:=' '; // очищаем буфер
SetLength(ipbuf, 4); // устанавливаем длинну буфера
ipBase:=ptr($0036D0C8); // RVA слова в памяти
ReadProcessMemory(hProc, ipBase, Addr(ipbuf), 4, numberRead); // чтение из памяти строки
Edit4.Text:=PCHAR(ipbuf); // заносим в edit Buffer
end;
finally
CloseHandle(hProc); // отсоединяемся от процесса
end;
end;



В результате получилось следующее хэндл, pid process считываються идеально, а вот переменная ipbuf куда должно занестись значение выдыдаёт какуето ерунду, строка в кодировке ascll. что не так где ошибки?
DjDram вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FindWindow Comer_Jus Win Api 7 29.11.2008 10:17
FindWindow('TMainForm',nil) а дальше куча одноименных кнопок Стелс Win Api 17 01.11.2008 01:27
«Окно+символ». Создать класс, представляющий окно в текстовом режиме. RustreX Паскаль, Turbo Pascal, PascalABC.NET 1 11.11.2007 19:28
FindWindow не нашел окна, а ShellExecute возвращает ERROR_PATH_NOT_FOUND malor Win Api 2 19.07.2007 15:15
Вопрос про функцию FindWindow Dromok Общие вопросы Delphi 3 12.02.2007 23:00