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




Вниз

Подскажите пожалуйста! 


Alex870   (2001-11-26 21:27) [0]

Привет всем! Помогите пожалуйста разобраться с такой задачей: Запущено приложение,имеющее элементы SPEEDBUTTON (у которых нет дескриптора), могу ли я из своей программы вызвать "Click" данного элемента. Есть так же главное меню, в котором команды этх кнопок дублируются, но к сожелению и оно дескриптора не имеет.Заранее всем спасибо!



ggsoft   (2001-11-26 22:00) [1]

Если забросишь на форму ActionList, закладка Standart палитры компонентов и свяжешь элементы меню и
SpeedButton-ы с соответствующими «акциями», тогда легко
можно вызвать ActionMenuFile1.Execute;.

С уважением, Евгений!



Alex870   (2001-11-26 22:07) [2]

Спасибо Евгений, но дело в том, что меню находится не на моем приложении.Если знаешь, как отправляются и принимаются сообщения от подобных элементов системой, напиши, буду очень признателен!
Alex870@newmail.ru



ggsoft   (2001-11-26 22:53) [3]

Нет, Alex870, к сожалению не знаю как послать, а от элементов меню сообщения посылаются в окно в виде WM_COMMAND, посмотри Help по WinAPI - формирование (из чего состоит) WPARAM и LPARAM, возможно SendMessageTimeout(...). Но обработает ли его окно - не знаю. Под W2K работает (по-моему) функция <SendThreadMessage(...)>, почему под W2K - описание в MSDN не нашел, хотя в литературе читал.

С уважением, Евгений!



Alex870   (2001-11-28 22:31) [4]

Привет Евгений, если ещё читаешь этот "чат". Самая главная проблема-это получить дескриптор, потом можно пользоваться и wm_command и другими функциями. Т.е. на счет wparam b lparam это всего лишь комманда и парамтр(параметры её), но в любо случае нужно знать хендл...
Если чё нароешь, пиши. Спасибо за ответ!
Алексей.



Donal   (2001-11-29 11:06) [5]

GetMenu (hWnd);



ggsoft   (2001-11-29 19:54) [6]

to Alex870.

Например, вот так, если с меню чужого окна.


procedure TForm2.N1Click(Sender: TObject);
var
hwndWindow: HWND;
hmnClassMenu, hmnSubMenu: HMENU;
dwDummy: DWORD;
begin
//получяем Handle нужного окна
hwndWindow := FindWindow("Some cool class", "And window name");
//если нашли его
if hwndWindow <> 0 then begin
//получить описатель меню класса, т. е. искомого окна
hmnClassMenu := GetMenu(hwndWindow);
//получить описатель первого подменю (например - 0 т. е. обычно "File")
hmnSubMenu := GetSubMenu(hmnClassMenu, 0{for example});
//послать сообщение окну. Почему не SendMessage(...)? А вдруг это общение окно будет очень долго обрабатывать и твое приложение "зависнет", так что в любом случае через 5 секунд продолжим работу.
SendMessageTimeout(hwndWindow,
WM_COMMAND,
//в старшем слове WPARAM - содержится ID меню.
//так и получим его из известного субменю("File")
MAKEWPARAM(0, GetMenuItemID(hmnSubMenu, 1{for example})),
0,
SMTO_ABORTIFHUNG,
5000,
dwDummy);
end
else ShowMessage("No requsted window found");
end;

Да только зачем все это - какой интерес.

С уважением, Евгений!

PS. Не проверял, но должно работать!




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




Наверх





Память: 0.73 MB
Время: 0.039 c
1-90250           raiv                  2002-01-09 15:02  2002.01.28  
Где можно скачать TeeChart Pro VCL для


3-90234           Быданцев Александр    2001-12-09 16:40  2002.01.28  
DB2


1-90272           GhostK                2002-01-09 07:40  2002.01.28  
Где можно найти????


4-90421           Evgeniy_S             2001-10-23 23:01  2002.01.28  
чужие окна


6-90343           Dmitry V. Averuanov   2001-11-05 14:26  2002.01.28  
Удаленное управление !