| imho.ws |
![]() |
|
|
|
# 2 |
|
Full Member
Регистрация: 19.07.2003
Адрес: Israel
Сообщения: 924
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
что то типа етого:
CButton* btn=(CButton*)GetDlgItem(BUTTON_ID); btn->SetFocus() Насколько я помню, все контролы наследуют от CDialog, так что если не знаеш тип контрола: CDialog* dlg=(CDialog*)GetDlgItem(BUTTON_ID); dlg->SetFocus()
__________________
Столько дел, что и работой занятся некогда... |
|
|
|
|
# 5 |
|
Junior Member
Регистрация: 20.06.2003
Адрес: Israel
Сообщения: 106
![]() |
Кроме того, что я спрашивал как я могу узнать ИД кнопки, а как установить фокус это был второстепенный вопрос. Зная хендел кнопки не так сложно (мне так кажется) установить ей фокус каки нибудь SendMessage or PostMessage.
|
|
|
|
|
# 6 |
|
Member
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245
![]() ![]() |
Если ты хочешь найти кнопку в чужой апликации(не важно на чем написанной) и знаешь хендл формы то последовательность действий примерно такая:
(поиск по надписи на кнопке) полчаешь хендл первого ребенка формы 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 |
|
|
|
|
# 8 |
|
Member
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245
![]() ![]() |
Не обязательно. Для установки фокуса можно просто собщение заслать:
::PostMessage(pMainDlg->hCaptWnd ,WM_SETFOCUS,NULL,NULL); В большенстве случаев будет работать. Но чтобы из чужой апликации получить окно которое в фокусе придеться приатачиться. Посмотри в MSDN функции SetFocus и GetFocus.
__________________
Best Regards |
|
|
|
|
# 9 |
|
Junior Member
Регистрация: 20.06.2003
Адрес: Israel
Сообщения: 106
![]() |
Ок. Но ведь есть же программы которые, эмулируют нажатие кнопки в чужих апликациях, значит и тут придумать, что-нибудь можно(кроме твоего первого решения). Например если мое предложение потеряет фокус и передаст его окну с нужным мне элементом, теоретически оно продолжить работать. Т.е. если я после того как сфокусирую ввод на нужном мне окне, мое преложение продолжит посылать сообщения таким образом позволит мне сфокусироваться на нужном мне элементе. Так вот и вопрос, что это за сообщение и как оно посылается?:atention:
|
|
|
|
|
# 10 |
|
Member
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245
![]() ![]() |
Что ты хочешь сделать? Если хочешь просто установить фокус то тогда просто засылай WM_SETFOCUS, если хочешь сэмулировать нажатие мыши то посылай пару WM_LBUTTONDOWN и WM_LBUTTONUP или используй функцию mouse_event или SendInput.
__________________
Best Regards |
|
|
|
|
# 14 |
|
Member
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245
![]() ![]() |
Нет. Если ты хочешь установить фокус на кнопку тебе придеться сначала определить хендл этой кнопки. Я не знаю такого сообщения (стандартного по крайней мере) которое ты можешь заслать форме а уже форма зафокусит кнопку. Хотя могут быть варианты, все зависит от программы с которой та собираешься работать. Например могут быть сообщения пользователя обработчик которых в форме устанавливает фокус на кнопку, или дефолтные кнопки на которые устанавливется фокус при активации приложения и т.п. Короче, нужно каждый конекретный случай рассматривать.
Мне по работе приходиться заниматься определением и опознанием контролов в чужих программах, можешь мне поверить что совсем универсального метода нет, и каждую аппликацию приходиться исследовать особо.
__________________
Best Regards |
|
|