режим планшета: запретить максимальное использование приложения

#windows #delphi #tablet

#Windows #delphi #планшет

Вопрос:

У меня проблема в том, что я хочу включить одно приложение в другое.

В обычном режиме это работает без проблем. В Delphi (VCL) я удаляю рамку окна и устанавливаю панель контейнера основного приложения A в качестве родительского приложения B.

 using WinApi.Windows;
var
  A: TPanel;
  B: TWinProcInfo;

SetParent(B.HWND, A.Handle);

// remove title bar and window frame
aWindowStyle := GetWindowLong(B.HWND, GWL_STYLE);
SetWindowLong(B.HWND, GWL_STYLE, aWindowStyle and (not WS_CAPTION) and (not WS_THICKFRAME));

// set position/size inside A
SetWindowPos(B.HWND, 0, 0, 0, A.width, A.height, SWP_NOSIZE)
 

К сожалению, в режиме планшета, тем не менее, приложение B отображается развернутым, и теперь я также не могу перейти к основному приложению A, потому что оно является родительским для B (поэтому B накладывает A).

Но: не каждое приложение максимизируется в режиме планшета!

Если я установлю Application.MainFormOnTaskbar := False; демонстрационное приложение Delphi, это приложение можно свободно перемещать и изменять его размер даже в режиме планшета. Если я правильно понимаю документы, это устанавливает, какая форма подключена к значку панели задач.

Если значение MainFormOnTaskBar равно True, кнопка на панели задач представляет основную форму приложения и отображает ее заголовок. Если значение равно False, кнопка на панели задач представляет собой (скрытое) главное окно приложения и содержит заголовок приложения. Для использования эффектов Windows Vista или Windows 7 Aero, включая эскизы панели задач в реальном времени, динамические окна, Windows Flip и Windows Flip 3D, значение MainFormOnTaskBar должно иметь значение True.

Теперь моя проблема: как я могу сделать это для внешнего приложения? Потому что B не мой собственный (кстати, его UltraVNC).

Существует ли какой-либо winapi, подобный приведенному выше стилю, для достижения этой цели?

Комментарии:

1. Чтобы восстановить окно из его развернутого состояния, используйте ShowWindow( hWnd, SW_RESTORE ) .

2. @AmigoJack Нет, в режиме планшета это не так.