Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Cannon1
2 / 2 / 2
Регистрация: 29.09.2012
Сообщений: 407
1

Определить окно в другой программе

21.04.2017, 18:16. Просмотров 208. Ответов 10
Метки нет (Все метки)

Здравствуйте,

почему не работает этот код, не определяет окно открытого блокнота ?

Delphi
1
2
3
4
if FindWindow(nil, 'Безымянный - Блокнот') <> 0 then
  ShowMessage('Окно найдено')
else
  ShowMessage('Окно НЕнайдено');
У меня делфи XE2, есть ещё примеры?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2017, 18:16
Ответы с готовыми решениями:

Ошибочно вылетает окно в программе
подскажите в чем может быть проблема. сделала небольшую программку, запускаю...

Подключаемся к другой программе
Мне нужно програмно, подключиться с другой программе, и ее дочерним окнам,...

Подключение к другой программе
Добрый вечер! Хотел бы узнать как написать такую штуку: есть программа ,есть...

Нажатие кнопок в другой программе
Как сделать, чтобы нажимать кнопки в другой программе и вставлять текст в поле...

Как обратиться к другой программе?
Как в делфи обратиться к полю ввода другой программы?

10
TFullControl
405 / 326 / 192
Регистрация: 20.10.2016
Сообщений: 1,035
21.04.2017, 19:05 2
Работает! Длииинное тире "—", а не "-"
1
GoodWeather
142 / 141 / 59
Регистрация: 28.02.2017
Сообщений: 858
21.04.2017, 20:17 3
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button1Click(Sender: TObject);
var Wnd: HWND; WndName: String;
begin
WndName:='Безымянный — Блокнот';
Wnd:=FindWindow(nil, PChar(WndName));
if (Wnd<>0) then
  ShowMessage('[OK] Окно найдено:  #'+IntToHex(Wnd, 8))
else
  ShowMessage('[Fail] Окно не найдено');
end;
Добавлено через 22 минуты
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
function EnumWindows_SearchWndByName(Wnd: HWND; var lParam: LPARAM): BOOL; stdcall;
const SearchWndName = ' Блокнот';
var WndCaptionLength: Integer; WndCaption: String;
begin
Result:=True;
SetLength(WndCaption, MAX_PATH);
WndCaptionLength:=GetWindowText(Wnd, PChar(WndCaption), Length(WndCaption));
if (0<WndCaptionLength) then
    begin
    SetLength(WndCaption, WndCaptionLength);
    if 1<Pos(SearchWndName, WndCaption) then
        begin
        lParam:=Wnd;
        Result:=False;
        end;
    end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var Wnd: HWND;
begin
Wnd:=0;
EnumWindows(@EnumWindows_SearchWndByName, LPARAM(@Wnd));
if (Wnd<>0) then
  ShowMessage('[OK] Окно найдено:  #'+IntToHex(Wnd, 8))
else
  ShowMessage('[Fail] Окно не найдено');
end;
1
Cannon1
2 / 2 / 2
Регистрация: 29.09.2012
Сообщений: 407
22.04.2017, 08:40  [ТС] 4
Большое спасибо,
с окном разобрались, теперь у меня ещё несколько вопросов по работе с другим окном программы.

Как открыть дочернее окно другой программы?
Вот главное окно находит по имени класса:
Delphi
1
2
3
4
5
6
7
var
H : HWND;
begin
H := FindWindow ('WindowsForms10.Window.8.app.0.378734a', nil);
If H <> 0 then ShowMessage ('окно найдено!')
else ShowMessage ('окно НЕнайдено!') ;
end;
Как мне открыть дочернее окно с именем класса #32770 ?

С меня плюсики в репутацию!
0
TFullControl
405 / 326 / 192
Регистрация: 20.10.2016
Сообщений: 1,035
22.04.2017, 10:21 5
Delphi
1
2
H := FindWindow ('WindowsForms10.Window.8.app.0.378734a', nil);
H2:= FindWindowEx(H, 0, '#32770', '')
0
Cannon1
2 / 2 / 2
Регистрация: 29.09.2012
Сообщений: 407
22.04.2017, 10:54  [ТС] 6
А как открыть то его, как передать сообщение чтобы оно открылось?

так не работает
Delphi
1
2
3
4
5
6
7
8
procedure TForm1.Button6Click(Sender: TObject);
var
H, H2 : HWND;
begin
 H := FindWindow ('WindowsForms10.Window.8.app.0.378734a', nil);
 H2:= FindWindowEx(H, 0, '#32770', 'Открыть');
 SendMessage(H2,SW_SHOW,0,0);
end;
окно по этим параметрам находит...
0
GoodWeather
142 / 141 / 59
Регистрация: 28.02.2017
Сообщений: 858
22.04.2017, 16:32 7
...или EnumChildWindows()...

Что значит "открыть"/"открылось"??

Добавлено через 3 минуты
а... На ней типа написано слово "Открыть"... Видимо вам надо нажать?
Какое ещё SW_SHOW? Этож видимость/невидимость окна.
Сообщение может быть об событиях от мыши или просто об нажатии кнопки.

Добавлено через 3 минуты
Соответственно либо BM_CLICK, либо WM_LBUTTONDOWN+WM_LBUTTONUP.
0
Cannon1
2 / 2 / 2
Регистрация: 29.09.2012
Сообщений: 407
22.04.2017, 16:42  [ТС] 8
'#32770', - это диалоговое окно "открыть".

Кнопка открытия диалогового окна находится на главном окне, на С++ компоненте toolStrip1, и программа
Microsoft.Spy++ не видит эту кнопку, по этому я не знаю как сделать клик по кнопке "открыть" .
0
Cannon1
2 / 2 / 2
Регистрация: 29.09.2012
Сообщений: 407
22.04.2017, 16:56  [ТС] 9
Вот другая программа, написана не на делфи. Надо кликнуть на кнопку(Открыть), показал красной стрелкой,
и тогда откроется диалоговое окно "Открыть". Эта кнопка лежит на компоненте toolStrip1, больше Microsoft.Spy++
определить ничего не может, по этому не понятно как к ней обратиться, или может есть другой метод открыть диалоговое окно к активной программе...
0
Миниатюры
Определить окно в другой программе  
GoodWeather
142 / 141 / 59
Регистрация: 28.02.2017
Сообщений: 858
22.04.2017, 17:53 10
Надо не "открыть", а "кликнуть" то бишь "нажать". А что после этого чужая программа делает это уже не важно, это её проблемы/задачи.

Это может быть не кнопка, а панель типа ToolBar. На таких панелях нету реальных окон, а тока фальшивые-нарисованные.
Надо брать Spy++, ставить отлов всех сообщений окна, тыкнуть на кнопку, и потом разбираться что же конкретно там происходило.
0
Cannon1
2 / 2 / 2
Регистрация: 29.09.2012
Сообщений: 407
22.04.2017, 18:14  [ТС] 11
Ну вот, больше информации я найти не могу...
Кнопка определяется как toolStrip1, больше инфы не показывает...

Правда я не знаю как сделать в Spy++ отлов всех сообщений окна.
0
Миниатюры
Определить окно в другой программе  
22.04.2017, 18:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2017, 18:14

Передача данных другой программе
Привет, всем хотел начать делать свой небольшой мп3 плеер, и столкулся с одной...

Присвоение иконки к другой программе
Здравствуйте у меня такой вопрос как заменить иконку другой программы допустим...

Нажать кнопку в другой программе
Здравствуйте! Имеется эмулятор приставки PS2 - PCSX2 del Написал...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru