Форум программистов, компьютерный форум, киберфорум
Delphi: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/75: Рейтинг темы: голосов - 75, средняя оценка - 4.60
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661

FindWindowEx Button и Edit другого приложения

09.12.2012, 00:12. Показов 14424. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Тема довольно заезжена, чего только не наслушался и что FindWindowEx кривой ...
Но вот не могу найти Button или Edit в окне запущенного приложения Delphi
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
  Form1: TForm1;
  hNewCaption: String;
  hOldCaption: String;
  ParentWnd: HWND;
  ChildWnd:HWND;
   ParentWnd := FindWindow(nil, PAnsiChar(hOldCaption));
 if(ParentWnd = 0) then   
      begin  ShowMessage('Окно не найдено'); exit; end;
  ChildWnd:=FindWindowEx(ParentWnd, 0,'Button','');
// ChildWnd:=FindWindowEx(ParentWnd, 0,'Edit',nil);
    if(ChildWnd <> 0)  then {возвращает всегда 0!!!!}
      SendMessage(ChildWnd, BM_CLICK, 0, 0)
    else  ShowMessage('But â Proba не найден!');
несмотря на то что на некоторых сайтах разбирают и более сложные схемы поиска хэндлов окон элементов управления. Но все основано на возврате хэндла FindWindowEx
а у меня он почему-то возвращает 0 ,несмотря на то что окно приложения находится
ParentWnd <>0 и в тестовом окне Proba есть и TEdit и TButton
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.12.2012, 00:12
Ответы с готовыми решениями:

Как вставить текст в Edit'ы другого приложения?
Не подскажите, как можно в Edit'ы другого приложения (не Delphi'ского) вставить текст?

Как передать данные в поле Edit другого приложения?
Подскажите пожалуйста как можно передать нужные данные в поле Edit другого приложения (не моего, исходников нет, просто исполняемый...

Вывести в Edit текст другого Edit
вот из этих двух процедур procedure TForm1.Edit1Change(Sender: TObject); begin a:=Edit1.Text; end; procedure...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33184 / 21482 / 8231
Регистрация: 22.10.2011
Сообщений: 36,853
Записей в блоге: 12
09.12.2012, 00:24
Если приложение написано на Дельфи, то класс кнопки - 'TButton', вот и ищи:
Delphi
1
ChildWnd:=FindWindowEx(ParentWnd, 0,'TButton', nil);
, прекрасно находит кнопку, проверил специально.
1
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
09.12.2012, 07:47  [ТС]
и я сделал эти изменения но ничего не получил
ни при вызове из оболочки ни при вызове exe с этим кодом
TEdit в окне Proba единственное и называется Edit1
TButton - тоже и называется But
Delphi
1
2
ChildWnd:=FindWindowEx(ParentWnd, 0,'TEdit',nil);//возвращает 0
ChildWnd:=FindWindowEx(ParentWnd, 0,'TButton',nil);//возвращает 0
Да, кстати как правильно описывать дескрипторы
Delphi
1
 ChildWnd: HWND;
или
Delphi
1
ChildWnd: THandle;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33184 / 21482 / 8231
Регистрация: 22.10.2011
Сообщений: 36,853
Записей в блоге: 12
09.12.2012, 11:40
Я уж не знаю, что ты там сделал, но вот такой код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.Button18Click(Sender: TObject);
var
  hOldCaption : string;
  ParentWnd, ChildWnd : HWND;
begin
   hOldCaption := 'MyTestForm';
 
   ParentWnd := FindWindow(nil, PChar(hOldCaption));
   if(ParentWnd = 0) then
   begin
      ShowMessage('Окно не найдено'); exit;
   end;
   ChildWnd:=FindWindowEx(ParentWnd, 0,'TButton', nil);
   if ChildWnd <> 0 then
      SendMessage(ChildWnd, BM_CLICK, 0, 0)
   else
      ShowMessage('But в Proba не найден!');
end;
Прекрасно находит и нажимает кнопку вот в таком приложении:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
   Edit1.Text := 'Clicked!!!';
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
   Caption := 'MyTestForm';
end;
 
end.
1
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
09.12.2012, 21:07  [ТС]
Понял свою ошибку. Вы окно формы искали по Caption
я же по имени приложения. Например, приложение Proba.exe заголовок формы Form1
Cамое интересное как при вводе имени окна Proba так и Form1 findwindow возвращает ненулевой
дескриптор, т.е. якобы окно действительно найдено. Но в 1 случае findwindowex возвращает 0, т.е
не работает а во 2-м случае не 0, и работает.
Вывод. Окно вызываем только по Caption независимо от среды где создано. Так?

Добавлено через 4 часа 29 минут
Есть еще вопрос по этой теме.
Что будет если программа с окном кот.надо обнаружить (Прог.1)будет запущена не на компьютере где
программа Прог2 с FindWindow а на сетевом адресе?
Найдет ли хендл FindWindow ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.12.2012, 21:07
Помогаю со студенческими работами здесь

Edit и Button
У меня есть поле edit и кнопка . Как при вводе в поле edit и нажатии на кнопку изменять размер снежинки? (поле IDC_EDIT7 и кнопка...

Edit and button
Люди помогите создать прогу для выевление процента edit и button!! срочно=)

Button.Enabled и Edit
Здравствуйте, помогите начинающему, ни как не может дойти, есть 11 Edit'ов из низ 9 штук активируются Чек-боксом, как сделать чтобы Button...

Edit и button Memo
нужно создать программу используя Edit Memo button помогите!

Edit & button
Ребят подскажите как сделать чтобы если в edlin нет текста при нажатие на button выводил сообщение в memo чтобы ввели текст.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru