Форум: "WinAPI";
Текущий архив: 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. Не проверял, но должно работать!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c