Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› Узнать размеры мессаджбокс...
Посл.ответ Сообщение

Ранг: 24.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 04 августа 2006 02:06
· Личное сообщение · #1

Народ, такой вопрос, не знаю разбирался он уже или нет, по форуму трафик не позволяет много лазить.
Вопрос такой: требуется узнать размеры мессаджбокса у другой программы.Какой функцией это можно реализовать на делфи?




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 04 августа 2006 02:15
· Личное сообщение · #2

Смотря какой месажбокс - собственный проги или виндовый. И как узнать оамзмер - после появления на экране или что? И делфи здесь непричём, API здесь юзать надо

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 24.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 04 августа 2006 02:22
· Личное сообщение · #3

Я хочу написать на делфи маленькую прогу, которая будет нажимать на кнопочку в другой проге(тоже делфийской), на другой проге после нажатия вылетает мессаджбокс, и мне надо узнать его размеры и передать вмою прогу. Вот так.
С помощью какой API это можно реализовать?
Я где-то видел вот такую фунцию, она возвращает размер рабочей области окна (уже без заголовка, меню и т.д.) в глобальных экранных координатах.

procedure GetClientRect(Wnd: HWnd; var Rect: TRect);

Интересно она подойдет?




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 04 августа 2006 02:30
· Личное сообщение · #4

Electrod
Да, этой апи как раз и надо пользоваться. Но сначала хэндл окошка месаджа надо найти через FindWindow. Тока тормознуто получится без хуков или перехвата апи, т.к. тебе придётся периодически по таймеры проверять окна. Хотя хз, как те удобнее делай

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 24.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 04 августа 2006 02:41
· Личное сообщение · #5

Ок, пасибо, пойду разбираться.




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 04 августа 2006 08:23
· Личное сообщение · #6

Electrod
Ты не тот подход решил юзать. Сперва определяешь хэндл окошка, затем хэндл нужной тебе кнопки на нем (FindWindowEx), затем шлешь кнопке сообщение BM_CLICK (SendMessage).




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 04 августа 2006 08:36
· Личное сообщение · #7

Ну и для верности можно находить окно не по FindWindow? а по EnumWindows.



Ранг: 22.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 04 августа 2006 12:24
· Личное сообщение · #8

я когда-то хайдил мессадже-бокс для лингво, вот код, авось пригодится ;)
{
CWnd* pWnd = NULL;
pWnd = FindWindow(_T("LV8_MainWindow"), _T("ABBYY Lingvo"));
if (pWnd)
{
CString strCaption;
CWnd pWndMesgBox;

gp_MsgBoxWnd.m_hWnd = NULL;
EnumWindows(EnumChildProc, NULL);
pWnd->EndModalState();
if (gp_MsgBoxWnd.m_hWnd)
{
gp_MsgBoxWnd.ShowWindow(SW_HIDE);
gp_MsgBoxWnd.DestroyWindow();
}
else
{
pWnd->ShowOwnedPopups(FALSE);
}
}
}

BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
{
TCHAR cur_caption[100];
::GetWindowText(hwnd, cur_caption, 100);
if (cur_caption == g_ABBYYCaption)
{
gp_MsgBoxWnd.Attach(hwnd);
return FALSE;
}

return TRUE;
}



Ранг: 24.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 04 августа 2006 14:58
· Личное сообщение · #9

Ara
Спасибо! в принципе я как - то и собиралсез поиск окна по FindWindow и посылке ему SendMessage на tab и Ок.
HoBleen
На счет этого подумаю.
Myk
Спасибо за код, думаю пригодится.
Всем огромный сенкс, только меня больше интересует функция определения размера месаджбокса чужой проги и возврата этих размеров в мою прогу.
К то нить что нибудь знает про эту функцию GetClientRect(Wnd: HWnd; var Rect: TRect), или может еще какие есть?



Ранг: 12.2 (новичок)
Активность: 0=0
Статус: Участник

Создано: 04 августа 2006 16:07
· Личное сообщение · #10

MSDN знает 100%. Вот, например:
GetWindowRect
The GetWindowRect function retrieves the dimensions of the bounding rectangle of the specified window. The dimensions are given in screen coordinates that are relative to the upper-left corner of the screen




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 04 августа 2006 22:34 · Поправил: Rascal
· Личное сообщение · #11

Electrod
Лень не есть хорошо - все данные для реализации цели тебе даны. Ищи описания и примеры использования. MSDN в этом плане рулит

[ADDED]
Знаете, чем мне ещё не нравится делфи с вб? Человек, написавший пару программ с компонентами и функциями языка считатет, что он куль программер и куль кракер и ща он забацает и прот, и кракми и тулзу крутутю, а потом начинает спрашивать, а какой функцией делфи или васика выключить компьютер, скрыть окно, подвинуть окно, узнать размеры и т.д. и т.п. Причём им надо в итоге не просто названия функций API, они не могут найти ничего по ним и понять ничего не могут, а всё самим написать, дать пример кода с комментариями и статью написать мля. Это всё IMHO, потому как просто утомило

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 24.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 04 августа 2006 22:56 · Поправил: Electrod
· Личное сообщение · #12

Rascal
Спасибо! Я тут более менее разобрался.! =)
С помощью этой функции вроде как я понял можно узнавать не размеры сомого мессаджбокса, а расстояния слева, справа.
Вот пример:

begin
WindowName:=PChar(Form1.Edit1.Text);
Wd := FindWindow(nil, WindowName);

GetWindowRect(Wd,R);

Form1.Label1.Caption:=IntToStr(R.Left)+ '-'+
IntToStr(R.Top) + '-'+
IntToStr(R.Right) ;
end;

Теперь при разных мессаджбоксах (разной длины) - разные цифры! так что работает!=)
Всем спасибо!!!


[ADDED]
Rascal
А я и не просил - дайте мне функцию ,кусок кода, а еще лучше чей-нить опен сорс!
Я лишь хотел узнать название функции(API) и подойдет ли GetClientRect и GetWinRect! и сидел потом разбирался!!!
Я конечно понимаю, что крутой программер должен знать название всех Api наизусть и что они делают =), но я и не говорил что я крутой программер.


IMHO так дела тоже не делаются!




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 04 августа 2006 23:23
· Личное сообщение · #13

Electrod
Если ты вычтешь из bottom top получишь высоту, а из right вычтешь left получишь ширину. Вот и вся история, делов то.

Ну вообще я не только тебя, я обощил виденные здесь сообщения.
Electrod пишет:
Я лишь хотел узнать название функции(API) и подойдет ли GetClientRect и GetWinRect! и сидел потом разбирался!

Вообще как обычно делается - получаем ответ, в котором указана функция, разгребаем тонны литературы и находим ответ. Литертура прежде всего это MSDN и доки с средой разработки, если она не от МС, и интернет конечно, пишем прогу, смотрим на резалт. Если не компилится - один вопрос, если не те данные возвращает - другой. Если Не нашёл, пишешь что не нашёл. Но по базовым апи инвы ПОЛНО, не поверю, что не нашёл ни описания ни примера.

Electrod пишет:
Я конечно понимаю, что крутой программер должен знать название всех Api наизусть и что они делают =)

Не, крутые программисты знают ровно столько апи, сколько им нужно для работы. Все апи врядли кто знает. Просто нужно уметь искать то, что надо. Это очень полезное и важное свойство и способность программиста. Развивай её, и будешь приближаться к крутым

Electrod пишет:
IMHO так дела тоже не делаются!

Не понял о чём

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 24.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 05 августа 2006 00:56
· Личное сообщение · #14

Rascal

Спасибо за вычисление высоты и ширины, мне это пригодится, но пока не особо надо.Мне лишь надо было узнать, что размер мессаджбокса изменился. =)
Про апи ,я нашел инфу ,главное было узнать название. Прочитал - вроде оно.Но примеров небыло, вот долго и копался!

Насчет "IMHO так дела тоже не делаются!" не обращай внимание- бред написал =)))
В общем спасибо всем еще раз!!!


 eXeL@B —› Программирование —› Узнать размеры мессаджбокс...
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати