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 |
---|---|
|
Die Methode war erfolgreich. |
|
Der lpvReserved-Parameter ist nicht NULL. |
|
Der pUnk-Parameter unterstützt keine Vordergrundfenstersteuerung. |
|
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) |