Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 FindWindowEx - по приколу или где ?  [new]
HOME_X
Member

Откуда:
Сообщений: 2455
Доброго дня господа !

Хочу в операцинке
1. найти окно
2. найти Control
3. переустановить значение Control

Имею код
procedure TForm1.Button1Click(Sender: TObject);
var
  H,C,N,M: HWND;
  K: Boolean;
  S: String;
begin
  K := False;
  H := FindWindow ('TForm1', 'MyWindow');
  if K then Memo1.Lines.Add(IntToHex(H,2));
  M:=FindWindowEx(H,N,'TEdit','Edit1');
  //C:=FindWindowEx(H,N,'TButton','Button1');
  S:='MyText';
  if M<>0 then SendMessage(M,WM_SetText,0,Integer(S));
  //If C<>0 then SendMessage (C,BM_CLICK, 0, 0);
  //If H<>0 then SendMessage (H,WM_CLOSE, 0, 0)
end;


Все работает, но есть вопрос строка
if K then Memo1.Lines.Add(IntToHex(H,2));
Абсолютно не нужна
Абсолютно заремирована, но без нее не поиска Control-a
Поясните причину такого поведения

Заранее благодарен !
12 фев 20, 09:57    [22078013]     Ответить | Цитировать Сообщить модератору
 Re: FindWindowEx - по приколу или где ?  [new]
Василий 2
Member

Откуда:
Сообщений: 961
N - входной параметр
12 фев 20, 10:00    [22078018]     Ответить | Цитировать Сообщить модератору
 Re: FindWindowEx - по приколу или где ?  [new]
HOME_X
Member

Откуда:
Сообщений: 2455
Василий 2
N - входной параметр

Хотите сказать не инициализирован N параметр ?
Согласен - исправил !

А какое отношение имеет строка
if K then Memo1.Lines.Add(IntToHex(H,2));

Она не имеет касательства к N

Спасибо
12 фев 20, 10:17    [22078028]     Ответить | Цитировать Сообщить модератору
 Re: FindWindowEx - по приколу или где ?  [new]
x1ca4064
Member

Откуда:
Сообщений: 1055
HOME_X

  S:='MyText';
  if M<>0 then SendMessage(M,WM_SetText,0,Integer(S));



Заранее благодарен !

Попробуйте заменить Integer(S) на Integer(@S[1])
12 фев 20, 10:50    [22078054]     Ответить | Цитировать Сообщить модератору
 Re: FindWindowEx - по приколу или где ?  [new]
HOME_X
Member

Откуда:
Сообщений: 2455
x1ca4064,

Инициализация Т - целяком решила проблему.

Возник попутный вопрос
Возможно ли перехватить события "найденной" формы

Т.е.
Хочу в операцинке
1. найти окно
2. найти Control
3. переустановить значение Control
4. найти Button
5. при его нажатии выполнить событие основной формы из которой велся поиск ?

N:=0;
H := FindWindow ('TForm1', 'MyWindow');
C:=FindWindowEx(H,N,'TButton','Button1');
--- переопределить событие повешенное на Button1
на событие повешенное на Button10 другой формы другого приложения Delphi
или выставить очередность выполнения
If C<>0 then SendMessage (C,BM_CLICK, 0, 0); - нажал кнопку
12 фев 20, 13:19    [22078243]     Ответить | Цитировать Сообщить модератору
 Re: FindWindowEx - по приколу или где ?  [new]
alekcvp
Member

Откуда:
Сообщений: 1849
HOME_X

А какое отношение имеет строка
if K then Memo1.Lines.Add(IntToHex(H,2));
Она не имеет касательства к N

После неё в регистрах оставались значения, которые использовались как значение N. Случайность.
12 фев 20, 14:33    [22078384]     Ответить | Цитировать Сообщить модератору
 Re: FindWindowEx - по приколу или где ?  [new]
ёёёёё
Member

Откуда:
Сообщений: 1976
HOME_X
x1ca4064,

Инициализация Т - целяком решила проблему.

Возник попутный вопрос
Возможно ли перехватить события "найденной" формы

Т.е.
Хочу в операцинке
1. найти окно
2. найти Control
3. переустановить значение Control
4. найти Button
5. при его нажатии выполнить событие основной формы из которой велся поиск ?

N:=0;
H := FindWindow ('TForm1', 'MyWindow');
C:=FindWindowEx(H,N,'TButton','Button1');
--- переопределить событие повешенное на Button1
на событие повешенное на Button10 другой формы другого приложения Delphi
или выставить очередность выполнения
If C<>0 then SendMessage (C,BM_CLICK, 0, 0); - нажал кнопку


Нельзя: приложения в разных адресных пространствах. :)

Разве что приложения специально заточены под такое. Например, ты сообщишь другому приложению значение дескриптора какого-либо своего окна, у которого оконная процедура станет вызывать твой код, если получит соотвт. сообщение от другого приложения.
13 фев 20, 00:35    [22078905]     Ответить | Цитировать Сообщить модератору
 Re: FindWindowEx - по приколу или где ?  [new]
Василий 2
Member

Откуда:
Сообщений: 961
Сильно не вникал в хотелку, но теории вроде бы можно хуками. Правда, скилл-левел автора, кажется, маловат для такого. Надо качать профу
13 фев 20, 10:30    [22079022]     Ответить | Цитировать Сообщить модератору
 Re: FindWindowEx - по приколу или где ?  [new]
alekcvp
Member

Откуда:
Сообщений: 1849
ёёёёё

Нельзя: приложения в разных адресных пространствах. :)

Можно, через инъекции, например. Но ТСу надо быть готовым узнать много нового :)
С его текущим подходом рандомного программирования у него вряд-ли это получится.

Сообщение было отредактировано: 13 фев 20, 11:59
13 фев 20, 11:57    [22079117]     Ответить | Цитировать Сообщить модератору
 Re: FindWindowEx - по приколу или где ?  [new]
HOME_X
Member

Откуда:
Сообщений: 2455
Принято - спасибо за советы и уделенное время господа !

Еще вопрос
- может ли окно, (визуально наблюдается, имеет заголовок, Contol-ы и Button-ы)
иметь особый статус и игнорировать код функции FindWindowEx.

Выражаюсь точнее функции FindWindow и FindWindowEx, а также утилита MS SPY++
не видят окно, хотя оно присутствует визуально.


Спасибо
13 фев 20, 13:34    [22079225]     Ответить | Цитировать Сообщить модератору
 Re: FindWindowEx - по приколу или где ?  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
HOME_X
Выражаюсь точнее функции FindWindow и FindWindowEx, а также утилита MS SPY++
не видят окно, хотя оно присутствует визуально.
Значит это не окно, а рисунок. qt так делало
13 фев 20, 15:51    [22079357]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить