Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];

Вниз

Работа с чужим окном   Найти похожие ветки 

 
Vadims   (2002-07-31 01:32) [0]

Здравствуйте!
По долгу службы я работаю с административным ПО, которое заносит библиотечные карточки в электронную картотеку. При этом приходится бродить по куче окон этого ПО. Я решил автоматизировать этот процесс, написав прогу, которая принимает данные в своей единственной форме и «разносит» их по окнам оригинальной программы. И все было бы ОК, если бы мне не надо было сэмулировать либо двойной клик на компоненте, либо нажатие F4 на нем же.
Я знаю практически все об окне и компоненте: хэндл окна (wnBip: HWND), хендл компонента (cmTy: HWND), координатный прямоугольник(R: TRect), который занимает этот компонент в окне. Но при отправке сообщения WM_LBUTTONDBCLK ничего не происходит, хотя при работе с самой программой должно появляться еще одно окно. Как я понимаю, моя программа должна выполнить.
1. Привязать мышь к окну wnBip - SetCapture(wnBip);
2. Отправить сообщение WM_LBUTTONDBCLK компоненту cmTyp с координатами внутри компонента;
3. Восстановить мышь - ReleaseCapture.
Как правильно оформить пункт 2: кому посылать это сообщение - окну или компоненту? Как указать координаты - абсолютно или относительно (и относительно чего - окна или компонента?).
И вообще, правильно ли я мыслю, насчет посылки двойного клика чужому компоненту в чужое окно?
Что касается с отправкой сообщения нажатия F4, то тут такая заковыка.
С нажатием Down проблем нет - пишу SendMessage(cmTyp, WM_KEYDOWN, VK_DOWN, 0) (cmTyp - хэндл компонента) где и действие выполняется. А вот SendMessage(cmTyp, WM_KEYDOWN, VK_F4, 0) не работает из-за, насколько я понял, последнего параметра. Но каким он должен быть для F4 я не понимаю, сколько бы хэлп не читал и сколько бы не экмперементировал. Объясните мне это.
Тип этого контрола WinSight определяет как Centura:ChildTable. В Делфи аналогом ему скорее всего является TstringGrid с фиксированным левым столбцом.
Буду признателен за советы. Если можно, пишите их на vadims@mksat.net


 
Song   (2002-07-31 09:47) [1]

В Вашем случае легче будет воспользоваться keybd_event/mouse_event.
Любые WM_* сообщения не зависят ни от координат, ни от положении или состоянии мыши, они посылаются на дескриптор, который нужно сначала правильно найти, тогда всё работать будет.
Компонент - это понятие только на момент разработки программы. В готовых приложениях есть только окна. кнопка - окно, чекбокс - тоже окно и т.д. поэтому нажатие нужно посылать окну-кнопке (это чтобы понятно было), а не тому окну, которое Вы подразумеваете под формой.


 
Eugen Honeker   (2002-07-31 14:39) [2]

Программа имеет наверника меню или ?
если да, то можно просто с какимнибудь
"resource editor" посмотреть какие
id"s в меню.
а потом просто послать комманду
sendmessage(hwnd, WM_COMMAND, menu-id, 0)
на главное(hwnd) окно.


я таким образом написал remote-control для
windows mediaplayer.

извиняюсь за плохой русский :)


 
Vadims   (2002-07-31 20:10) [3]

Спасибо, Song!
Ваш совет помог. Если кто интересуется, привожу фрагмент кода, правда, может, он не оптимизирован в смысле схемы переключения между своим-чужим окном, зато работает.
Hide;
h := GetForegroundWindow();
SetForegroundWindow(wnBip);
ShowWindow(wnBip, SW_SHOWNORMAL);
keybd_event(VK_F4, 0, 0, 0);
SetForegroundWindow(h);
ShowWindow(h, SW_SHOWNORMAL);
Show;



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
14-61278
ded_di
2002-08-22 17:50
2002.09.19
Господа, помогите с алгоритмом.


6-61243
HAspiring
2002-07-15 16:51
2002.09.19
Как разорвать соединение


1-61170
delpher_gray
2002-09-06 12:58
2002.09.19
Canvas, сжатие изображения


7-61323
Kr_Alex
2002-07-10 16:06
2002.09.19
Завершение Win


4-61362
antonK
2002-07-24 12:51
2002.09.19
запуск DOS программы в Win95. окно не закрывается!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский