imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 23.07.2003, 00:34     # 1
Izzyy
Junior Member
 
Аватар для Izzyy
 
Регистрация: 20.06.2003
Адрес: Israel
Сообщения: 106

Izzyy Путь к славе только начался
Unhappy Еще немного о WinApi

Как с помощью ф-ций виндовс найти конрол на форме с заранее найденым хендлом этой формы, а потом сфокусировать ввод на контроле который мы нашли.
Izzyy вне форума  
Старый 23.07.2003, 01:35     # 2
joker99
Full Member
 
Аватар для joker99
 
Регистрация: 19.07.2003
Адрес: Israel
Сообщения: 924

joker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форуме
что то типа етого:

CButton* btn=(CButton*)GetDlgItem(BUTTON_ID);
btn->SetFocus()

Насколько я помню, все контролы наследуют от CDialog, так что если не знаеш тип контрола:

CDialog* dlg=(CDialog*)GetDlgItem(BUTTON_ID);
dlg->SetFocus()
__________________
Столько дел, что и работой занятся некогда...
joker99 вне форума  
Старый 23.07.2003, 09:43     # 3
alexey_ma
Member
 
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245

alexey_ma Нимб уже пробиваетсяalexey_ma Нимб уже пробивается
Kонтролы наследуют от CWnd.
__________________
Best Regards
alexey_ma вне форума  
Старый 23.07.2003, 19:24     # 4
Izzyy
Junior Member
 
Аватар для Izzyy
 
Регистрация: 20.06.2003
Адрес: Israel
Сообщения: 106

Izzyy Путь к славе только начался
Unhappy

Ок, а если речь идет о Дельфи?
Izzyy вне форума  
Старый 23.07.2003, 19:31     # 5
Izzyy
Junior Member
 
Аватар для Izzyy
 
Регистрация: 20.06.2003
Адрес: Israel
Сообщения: 106

Izzyy Путь к славе только начался
Lightbulb

Кроме того, что я спрашивал как я могу узнать ИД кнопки, а как установить фокус это был второстепенный вопрос. Зная хендел кнопки не так сложно (мне так кажется) установить ей фокус каки нибудь SendMessage or PostMessage.
Izzyy вне форума  
Старый 23.07.2003, 20:51     # 6
alexey_ma
Member
 
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245

alexey_ma Нимб уже пробиваетсяalexey_ma Нимб уже пробивается
Если ты хочешь найти кнопку в чужой апликации(не важно на чем написанной) и знаешь хендл формы то последовательность действий примерно такая:
(поиск по надписи на кнопке)
полчаешь хендл первого ребенка формы
HWND hChild = ::GetWindow(hParentWnd, GW_CHILD);
получаешь заголовок кнопки
char strCapt[255];
::GetWindowText(hChild,strCapt,254);
если это тот текст который тебе нужен то можешь ставить на этот хендл фокус.
если нет то идешь на следушего ребенка формы
hChild=::GetWindow(hChild,GW_HWNDNEXT);
опять проверяешь заголовок, и так пока не найдешь нужную тебе кнопку.

С фокусом все не так просто. Дело в том что,функция SetFocus(HWND hWnd) работает только для окон твоего потока. Если ты хочешь установить фокус на окно в в чужой апликации то сначала нужно присоединиться к очереди сообщений. Примерно так :

DWORD Tid=0;
DWORD MyTid=0;
Tid= ::GetWindowThreadProcessId(hWnd,NULL);
MyTid= ::GetWindowThreadProcessId(AfxGetApp()->m_pMainWnd->m_hWnd,NULL);
::AttachThreadInput(MyTid,Tid,TRUE);
::SetFocus(hWnd);
::AttachThreadInput(MyTid,Tid,FALSE);

где (AfxGetApp()->m_pMainWnd->m_hWnd --- твое окно.
hWnd --- найденное тобой окно на которое нужно установить фокус.
__________________
Best Regards
alexey_ma вне форума  
Старый 24.07.2003, 00:16     # 7
Izzyy
Junior Member
 
Аватар для Izzyy
 
Регистрация: 20.06.2003
Адрес: Israel
Сообщения: 106

Izzyy Путь к славе только начался
Cool

Это обязательно? А в чем проблема послать сообщение чужой форме, которое установит фокус на кнопке?
Izzyy вне форума  
Старый 24.07.2003, 10:06     # 8
alexey_ma
Member
 
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245

alexey_ma Нимб уже пробиваетсяalexey_ma Нимб уже пробивается
Не обязательно. Для установки фокуса можно просто собщение заслать:
::PostMessage(pMainDlg->hCaptWnd ,WM_SETFOCUS,NULL,NULL);
В большенстве случаев будет работать.
Но чтобы из чужой апликации получить окно которое в фокусе придеться приатачиться. Посмотри в MSDN функции SetFocus и GetFocus.
__________________
Best Regards
alexey_ma вне форума  
Старый 24.07.2003, 22:22     # 9
Izzyy
Junior Member
 
Аватар для Izzyy
 
Регистрация: 20.06.2003
Адрес: Israel
Сообщения: 106

Izzyy Путь к славе только начался
Cool

Ок. Но ведь есть же программы которые, эмулируют нажатие кнопки в чужих апликациях, значит и тут придумать, что-нибудь можно(кроме твоего первого решения). Например если мое предложение потеряет фокус и передаст его окну с нужным мне элементом, теоретически оно продолжить работать. Т.е. если я после того как сфокусирую ввод на нужном мне окне, мое преложение продолжит посылать сообщения таким образом позволит мне сфокусироваться на нужном мне элементе. Так вот и вопрос, что это за сообщение и как оно посылается?:atention:
Izzyy вне форума  
Старый 25.07.2003, 17:16     # 10
alexey_ma
Member
 
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245

alexey_ma Нимб уже пробиваетсяalexey_ma Нимб уже пробивается
Что ты хочешь сделать? Если хочешь просто установить фокус то тогда просто засылай WM_SETFOCUS, если хочешь сэмулировать нажатие мыши то посылай пару WM_LBUTTONDOWN и WM_LBUTTONUP или используй функцию mouse_event или SendInput.
__________________
Best Regards
alexey_ma вне форума  
Старый 25.07.2003, 17:23     # 11
georgebukki
::VIP::
 
Аватар для georgebukki
 
Регистрация: 16.03.2002
Адрес: Jerusalem
Сообщения: 1 132

georgebukki Имеются все основания чтобы гордиться собойgeorgebukki Имеются все основания чтобы гордиться собойgeorgebukki Имеются все основания чтобы гордиться собойgeorgebukki Имеются все основания чтобы гордиться собойgeorgebukki Имеются все основания чтобы гордиться собойgeorgebukki Имеются все основания чтобы гордиться собойgeorgebukki Имеются все основания чтобы гордиться собойgeorgebukki Имеются все основания чтобы гордиться собойgeorgebukki Имеются все основания чтобы гордиться собойgeorgebukki Имеются все основания чтобы гордиться собойgeorgebukki Имеются все основания чтобы гордиться собой
Если надо: Справочник по WinApi
Вложения
Тип файла: rar Справочник по win32api.rar (259.9 Кбайт, 18 просмотров - Кто скачивал? )
__________________
Не яйца красят человека,
а человек яйца.
georgebukki вне форума  
Старый 25.07.2003, 17:37     # 12
alexey_ma
Member
 
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245

alexey_ma Нимб уже пробиваетсяalexey_ma Нимб уже пробивается
Отстойный это справочник. Неполный и слишком кроткие не совсем точные описания . Лучше msdn нету ничего.
__________________
Best Regards
alexey_ma вне форума  
Старый 25.07.2003, 21:06     # 13
Izzyy
Junior Member
 
Аватар для Izzyy
 
Регистрация: 20.06.2003
Адрес: Israel
Сообщения: 106

Izzyy Путь к славе только начался
Exclamation

секундочку, то что я написал, так можно делать или нет?
в смысле посылки сообщения и т.д.?
Izzyy вне форума  
Старый 25.07.2003, 21:59     # 14
alexey_ma
Member
 
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245

alexey_ma Нимб уже пробиваетсяalexey_ma Нимб уже пробивается
Нет. Если ты хочешь установить фокус на кнопку тебе придеться сначала определить хендл этой кнопки. Я не знаю такого сообщения (стандартного по крайней мере) которое ты можешь заслать форме а уже форма зафокусит кнопку. Хотя могут быть варианты, все зависит от программы с которой та собираешься работать. Например могут быть сообщения пользователя обработчик которых в форме устанавливает фокус на кнопку, или дефолтные кнопки на которые устанавливется фокус при активации приложения и т.п. Короче, нужно каждый конекретный случай рассматривать.
Мне по работе приходиться заниматься определением и опознанием контролов в чужих программах, можешь мне поверить что совсем универсального метода нет, и каждую аппликацию приходиться исследовать особо.
__________________
Best Regards
alexey_ma вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 02:42.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.