Я разрабатываю надстройку для офисного слова, используя vsto. Я пытаюсь вывести окно слова в уменьшенном размере, перенося его на передний план. Я пытаюсь использовать функцию winapi SwitchToThisWindow
, SetForegroundWindow
, SetWindowPos
, как это
if (handlePtr != IntPtr.Zero)
{
Win32API.SwitchToThisWindow(handlePtr, true);
//Win32API.ShowWindow(handlePtr, Win32API.SW_MAXIMIZE);
////Win32API.SetForegroundWindow(handlePtr);
//Win32API.SetWindowPos(handlePtr, Win32API.HWND_TOP, 0, 0, 0, 0, Win32API.SWP_NOMOVE | Win32API.SWP_NOSIZE | Win32API.SWP_SHOWWINDOW);
}
и Application.Activate()
, он работает так же, как и любая другая подобная функция, и только заставляет его мигать на панели задач, а не выводить его на передний план.
Есть ли способ исправить это? Я также пытаюсь отправить клавиши «alt + tab», но я не знаю, как направить окно текстового процесса.
MainWindowHandle
может легко вызвать проблемы: он может больше не быть действительным, например. если первый документ закрыт, или вы получаете неправильное окно, если открыто несколько документов. Лучше использовать свойствоWindow.Hwnd
, например. черезApplication.ActiveDocument.Window[1].Hwnd
илиApplication.ActiveWindow
. - person Dirk Vollmar   schedule 13.01.2017WordApplication.Activate(); WordApplication.Visible = true; WordApplication.ActiveDocument.Activate(); IntPtr winfrom = IntPtr.Zero; if (GetNEClientRunningState(out winfrom)) { Win32API.SwitchToThisWindow(winfrom, true); System.Threading.Thread.Sleep(30); SendKeys.SendWait("%{TAB}"); }
- person asa9891   schedule 17.01.2017Application.ActiveDocument.Window[1].Hwnd
иApplication.ActiveWindow
. Приносим извинения за неудобства! Это мой кодIntPtr handlePtr = new IntPtr(WordApplication.ActiveDocument.Windows[1].Hwnd);Win32API.SwitchToThisWindow(handlePtr, true);Win32API.ShowWindow(handlePtr, Win32API.SW_MAXIMIZE);Win32API.SetForegroundWindow(handlePtr)
- person asa9891   schedule 17.01.2017