У меня есть два приложения, первое - полное приложение DirectX, написанное на C ++, второе приложение - на C # и воспроизводящее флэш-видео, AVI, PDF и т. Д. С использованием ActiveX COM-объектов.Первое приложение затем захватывает содержимое этого приложения на c # и отображает его в трехмерной среде в виде текстуры.Все это работает как задумано, и у меня есть код в приложении DirectX, позволяющий мне отправлять события клавиш и мыши в приложение c # через SendMessage и PostMessage.
Моя проблема заключается в первоначальном запуске.У меня есть приложение c # для запуска без активации, используя:
protected override bool ShowWithoutActivation
{
get { return true; }
}
, что эквивалентно SW_SHOWNOACTIVATE в вызове CreateProcess.Приложение запускается нормально и хорошо отрисовывается на текстуре приложения c ++.Однако, самый первый щелчок мыши заставляет приложение c # украсть фокус, и таким образом отбрасывает мой контекст DirectX.Кто-нибудь знает, почему это происходит, или если есть какой-то способ обойти это?
Если я запускаю приложение c # и никогда не нажимаю на него, приложение c ++ при запуске все еще работает как задумано, только при запуске черезкод:
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
ZeroMemory(&pi, sizeof(pi));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESIZE;
si.wShowWindow = SW_SHOWNORMAL;
si.dwXSize = 400;
si.dwYSize = 400;
if(!::CreateProcess(program, arguments, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
return false;
}
else
{
// use EnumWindows to conforim the app is open and get its HANDLE
}
Заранее спасибо за любую помощь, Уэйн