HwndHost не отображает контент, когда включена Композиция рабочего стола
Я использую HwndHost для встраивания внешнего приложения в мое окно WPF. Я заметил, что на некоторых компьютерах с Windows 7, если выбрана Aero Theme и включена Композиция рабочего стола, внешнее приложение запускается, мигает на экране в течение доли секунды, а затем исчезает. Если я отключу Композицию рабочего стола или использую основную тему, приложение будет успешно встроено в окно WPF.
Это код, который я использую в классе, производном от HwndHost:
[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("USER32.DLL", SetLastError = true)]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
private const int GWL_STYLE = (-16);
private const int WS_CHILD = 0x40000000;
private const int WS_EX_APPWINDOW = 0x00040000;
[DllImport("user32.dll", SetLastError = true)]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
protected override HandleRef BuildWindowCore(HandleRef hwndParent)
{
while (Process.MainWindowHandle == IntPtr.Zero)
{
Process.Refresh();
System.Threading.Thread.Sleep(10);
}
SetLastError(0);
var ret = SetWindowLong(Process.MainWindowHandle, GWL_STYLE, WS_CHILD);
int e1 = Marshal.GetLastWin32Error();
SetParent(Process.MainWindowHandle, hwndParent.Handle);
int e2 = Marshal.GetLastWin32Error();
ShowWindow(Process.MainWindowHandle, 0);
int e3 = Marshal.GetLastWin32Error();
return new HandleRef(this, Process.MainWindowHandle);
}
Я не получаю никаких ошибок Windows, когда возникает проблема. Процесс начинается с другого окна, которое вводит его в мой класс. Я проверил с помощью диспетчера задач, и процесс запускается, но он не виден в моем окне WPF. Какие-нибудь мысли?
1 ответ
Посмотрите на пространство имен надстройки системы, чтобы узнать, как вы можете использовать собственный HWIND_PTR в качестве элемента управления. Вам не нужно использовать всю библиотеку, чтобы сделать работу.
https://docs.microsoft.com/en-us/dotnet/framework/wpf/app-development/wpf-add-ins-overview