Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Название темы включает слова - "Помогите", "Спасите", "Срочно"
Название темы не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте >>>правила <<< и заново правильно создайте тему.
 
Опции темы
Старый 06.10.2008, 17:53   #21
rpy3uH
добрый няша
СуперМодератор
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,808
По умолчанию

а что собственно должна делать программа? (лучше рассказать что должны делать обе)
rpy3uH вне форума
Старый 06.10.2008, 18:16   #22
s_chechel
Новичок
Джуниор
 
Регистрация: 03.10.2008
Сообщений: 2
По умолчанию

Абсолютно все рассказывать пока неимеет смысла, в кратце опишу.
Чужая программа:
В ней есть основное окно и куча дочерних которые Hiden. На дочерних окошечках есть кнопки, которые вызывают следующее дочернее.
Теперь по очереди.
1. Окно1: при нажатии кнопки - show окно2.
2. Окно2: нажимаем кнопку - show окно3 (это похоже уже на другую программу).
3. Окно3: - жмем кнопку, происходят действия, в результате show окно4.
4. На окне 4 жмем ОК, оно закрывается.
5. Закрываем окно3.
6. Окно 2 обновляется.
7. переходим к пункту 2.
Это все при работе в ручную мышкой. Так же можно жать на энтэр если табом перейти на нужную кнопку.

Вот этот нехитрый алгоритм я и хочу сделать в другой программе.

Но вот проблема. Если я програмно нажимаю на окне1 на кнопку, то пока физически не нажму на одну из кнопок на окне2 или не закрою его - программа стоит. Та же проблема и с окном2.

А вот т о чем я ищу и нажимаю, может комуто пригодится. Что интерестно работает только на одной кнопке в этой программе, на остальных клин и все.
Цитата:
procedure ClickOnForm(wind:PChar; caption: string); //имя формы;имя кнопки
var
wnd: HWND;
TheChildHandle: HWND;
caption1: string;
begin
wnd :=findwindow(nil,wind);
SetLength(caption1, GetWindowtextLength(wnd));
GetWindowText(wnd, @caption1[1], length(caption1) + 1);
TheChildHandle := FindWindowEx(wnd, 0, nil, PChar(caption));
SendMessage(TheChildHandle,BM_CLICK , 0, 0);
// SendMessage(TheChildHandle,WM_LButt onDown, 1, 1);
// SendMessage(TheChildHandle, WM_LButtonUP, 1, 1);
end;

Последний раз редактировалось s_chechel; 07.10.2008 в 13:28. Причина: add procedure
s_chechel вне форума
Старый 09.03.2010, 06:49   #23
Vorono
Новичок
Джуниор
 
Регистрация: 09.03.2010
Сообщений: 1
По умолчанию

Цитата:
Сообщение от unnamed Посмотреть сообщение
Раз у вас уже есть хэндл (назовём его hMain) "Главной формы", то остаётся "добраться" до нужной кнопки. Сделать это можно так:

Напишем рекурсивную функцию, которая будет обходить наше "оконное дерево", ища кнопку с именем "Кнопка N3". Вид функции:
HWND Walk(HWND Current,char * Name);

Где-нибудь в программе делаем вызов target=Walk(hMain,"Кнопка N3").
Код:

HWND Walk(HWND Current,char * name)
{
  HWND temp;
  temp=GetWindow(Current,GW_CHILD); // находим первое дочернее окно
  while (temp!=NULL) // проверяем, а есть ли оно вообще
  {
     char WindowText[1024];
     GetWindowText(temp,WindowText,1023); // получаем его название
     if (!strcmp(name,WindowText)) return temp; // проверяем, искомая ли это кнопка, если да, то возвращаем её хэндл

     HWND result=Walk(temp,name); // если это была не она, то обходим её дочерние объекты

     if (result!=NULL) return result; // если при этом искомый объект был найден, возвращаем хэндл на него

     temp=GetWindow(temp,GW_HWNDNEXT) // иначе - проверяем следующий объект, дочерний для Current
  }
  return NULL; // объект не найден
}
Если в окне на который указывет хэндл hMain есть объект с именем "Кнопка N3", эта функция вернёт его хэндл, иначе - NULL.

Если обект найден, то на него осталось только нажать:
SendMessage(target,WM_LBUUTONDOWN,0 ,0);
И "отжать" его:
SendMessage(target,WM_LBUUTONUP,0,0 );

.
Был бы премного благодарен за пример на Дельфи!
Vorono вне форума
Старый 09.03.2010, 09:00   #24
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Не ну вы вообще запраздничались, господа обсуждающие!
Одна тема - один автор. Хотим задать вопрос: создавай ноую тему, а не порти чужую.
Закрыто!
I'm learning to live...
Stilet вне форума
Закрытая тема

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу нажать на кнопку 'Отправить' с помощью IdHTTP Dron_kss Работа с сетью в Delphi 3 17.04.2009 13:34
Нажать кнопку Dron_kss Работа с сетью в Delphi 1 28.03.2009 18:33
Программно нажать кнопку DeDoK Общие вопросы Delphi 2 04.05.2008 21:46
Нажать кнопку Teen4jump Работа с сетью в Delphi 11 29.02.2008 09:33
Как программно нажать Ctrl + V ffo Win Api 11 29.07.2007 17:58