Freigeben über


CoAllowSetForegroundWindow-Funktion (objbase.h)

Diese Funktion übergibt die Vordergrundberechtigung (die Berechtigung zum Festlegen des Vordergrundfensters) von einem Prozess an einen anderen. Der Prozess mit den Vordergrundberechtigungen kann diese Funktion aufrufen, um diese Berechtigung an einen lokalen COM-Serverprozess zu übergeben. Beachten Sie, dass der Aufruf von CoAllowSetForegroundWindow nur die Berechtigung gewährt. Das Vordergrundfenster selbst wird nicht festgelegt. Vordergrund und Fokus werden nur von der Clientanwendung entfernt, wenn der COM-Zielserver entweder SetForegroundWindow oder eine andere API aufruft, die dies indirekt tut.

Syntax

HRESULT CoAllowSetForegroundWindow(
  [in] IUnknown *pUnk,
  [in] LPVOID   lpvReserved
);

Parameter

[in] pUnk

Ein Zeiger auf die IUnknown-Schnittstelle auf dem Proxy des COM-Zielservers.

[in] lpvReserved

Dieser Parameter ist reserviert und muss NULL sein.

Rückgabewert

Diese Funktion kann die folgenden Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Die Methode war erfolgreich.
E_INVALIDARG
Der lpvReserved-Parameter ist nicht NULL.
E_NOINTERFACE
Der pUnk-Parameter unterstützt keine Vordergrundfenstersteuerung.
E_ACCESSDENIED
Der aufrufende Prozess verfügt derzeit nicht über die Vordergrundberechtigung.

Hinweise

Das System schränkt ein, welche Prozesse die Funktionen SetForegroundWindow und AllowSetForegroundWindow aufrufen können, um das Vordergrundfenster festzulegen. Daher wird eine Anwendung daran gehindert, den Fokus einer anderen Anwendung zu stehlen, selbst wenn der Benutzer mit ihr interagiert. Verwenden Sie CoAllowSetForegroundWindow , um die Vordergrundberechtigungen von einem Prozess zu übergeben, der sie besitzt, an einen Prozess, der noch nicht über sie verfügt. Dies kann transitiv erfolgen: Übergeben der Berechtigungen von einem Prozess an einen anderen und dann an einen anderen usw.

CoAllowSetForegroundWindow ermöglicht es einem Benutzer, der über eine benutzerdefinierte Schnittstelle verfügt, das gleiche Verhalten wie für OLE-Schnittstellen zu erhalten, bei denen eine Änderung des Fensters erwartet wird (in erster Linie verknüpft mit Dem Verknüpfen und Einbetten).

Im Hintergrund wird die IForegroundTransfer-Schnittstelle verwendet, um das Vordergrundfenster zwischen Prozessen zu erzeugen. Ein standardmäßig von COM bereitgestellter Proxy implementiert bereits IForegroundTransfer, sodass Sie keine zusätzlichen Aufgaben ausführen müssen, wenn Sie einen Standardproxy verwenden. Rufen Sie einfach CoAllowSetForegroundWindow auf, um die Vordergrundberechtigung auf ein beliebiges COM-Objekt außerhalb des Prozesses zu übertragen.

Beispiele

Im folgenden Beispiel wird veranschaulicht, wie ein Clientprozess einen lokalen COM-Server erstellen, CoAllowSetForegroundWindow aufrufen kann, um die Vordergrundberechtigungen zu übertragen, und dann eine Funktion auf dem COM-Server aufrufen kann, die wiederum direkt oder indirekt SetForegroundWindow aufruft.

Microsoft::WRL::ComPtr<IExampleInterface> exampleLocalServer;

ThrowIfFailed(::CoCreateInstance(CLSID_ExampleLocalServer,
	nullptr, CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&exampleLocalServer)));

// You can adapt to success or failure, but don't automatically throw. Don’t make the
// opening of a window dependent on successfully passing privilege (and taking foreground),
// because the window will signal to the user that it is ready to take focus.
HRESULT hr = ::CoAllowSetForegroundWindow(exampleLocalServer.Get(), nullptr);

// Call an example method that itself calls ::SetForegroundWindow(HWND).
hr = exampleLocalServer->FunctionThatSetsForegroundWindow();

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile objbase.h
Bibliothek Ole32.lib
DLL Ole32.dll
APIs ext-ms-win-com-ole32-l1-1-1 (eingeführt in Windows 8.1)

Weitere Informationen

IForegroundTransfer