Здравствуйте, Grisly, Вы писали:
G>Здравствуйте! В общем у меня следующая проблема.. Необходимо средствами winapi активировать какой-либо элемент меню приложения MS Office, к примеру, в MS Powerpoint. Причем, элемент меню появляется в следствие установленного приложения, функциональности которого нет в объектной модели MS Office. Акселератора для требуемого мной элемента меню нет.
G>Задача сводится к тому, чтобы сперва отправить приложению alt+p — разворачивается меню, и далее имитировать нажатие на клавишу С.
Как через сообщения SendMessage имитировать нажатие незнаю.
Вот кусок кода доступа к меню через COM, может поможет чемто.
В нем имитируется нажатие File->SendTo->Skype.
Код конечно корявинький тут тупо идет перебор всех итемов меню и сравнивается
с искомым(может можно как то там фаинд использовать для ускорения)
Код на TestComplete, но думаю разберешся.
MsPower = Sys.GetOleObject("PowerPoint.Application");
Doc = MsPower.Presentations.Add();
MsPower.Visible = true;
var menu_file = MsPower.CommandBars("Menu Bar").Controls(1);
var count_file = menu_file.accChildCount;
var br = 0;
var count = 0;
while ( count < menu_file.accChildCount )
{
count++;
if ( menu_file.Controls(count).Caption == "Sen&d To" )
{
var sendto = menu_file.Controls(count);
var i = 0;
while ( i < sendto.accChildCount )
{
i++;
var s = sendto.Controls(i).Caption;
if ( s == "Skype" )
{
sendto.Controls(i).Execute();
br = 1;
break;
}
}
}
if ( br == 1 ) break;
}