Fungsi CoAllowSetForegroundWindow (objbase.h)
Fungsi ini melewati hak istimewa latar depan (hak istimewa untuk mengatur jendela latar depan) dari satu proses ke proses lainnya. Proses yang memiliki hak istimewa latar depan dapat memanggil fungsi ini untuk meneruskan hak istimewa tersebut ke proses server COM lokal. Perhatikan bahwa memanggil CoAllowSetForegroundWindow hanya menganugerahkan hak istimewa; itu tidak mengatur jendela latar depan itu sendiri. Latar depan dan fokus hanya diambil dari aplikasi klien ketika server COM target memanggil SetForegroundWindow atau API lain yang melakukannya secara tidak langsung.
Sintaks
HRESULT CoAllowSetForegroundWindow(
[in] IUnknown *pUnk,
[in] LPVOID lpvReserved
);
Parameter
[in] pUnk
Penunjuk ke antarmuka IUnknown pada proksi server COM target.
[in] lpvReserved
Parameter ini dicadangkan dan harus NULL.
Nilai kembali
Fungsi ini dapat mengembalikan nilai berikut.
Menampilkan kode | Deskripsi |
---|---|
|
Metode berhasil. |
|
Parameter lpvReserved bukan NULL. |
|
Parameter pUnk tidak mendukung kontrol jendela latar depan. |
|
Proses panggilan saat ini tidak memiliki hak istimewa latar depan. |
Keterangan
Sistem membatasi proses mana yang dapat memanggil fungsi SetForegroundWindow dan AllowSetForegroundWindow untuk mengatur jendela latar depan. Akibatnya, aplikasi diblokir untuk mencuri fokus dari aplikasi lain bahkan ketika pengguna berinteraksi dengannya. Gunakan CoAllowSetForegroundWindow untuk meneruskan hak istimewa latar depan dari proses yang memilikinya ke proses yang belum memilikinya. Ini dapat dilakukan secara transitif: meneruskan hak istimewa dari satu proses ke proses lain, dan kemudian ke proses lainnya, dan sebagainya.
CoAllowSetForegroundWindow memungkinkan pengguna yang memiliki antarmuka kustom untuk mendapatkan perilaku yang sama yang terjadi untuk antarmuka OLE di mana perubahan jendela diharapkan (terutama terkait dengan penautan dan penyematan).
Di balik layar, antarmuka IForegroundTransfer digunakan untuk menghasilkan jendela latar depan di antara proses. Proksi standar yang disediakan COM sudah mengimplementasikan IForegroundTransfer, sehingga Anda tidak perlu melakukan pekerjaan tambahan jika Anda menggunakan proksi standar. Cukup panggil CoAllowSetForegroundWindow untuk mentransfer hak istimewa latar depan ke objek COM yang tidak diproses.
Contoh
Contoh berikut menunjukkan bagaimana proses klien dapat membuat server COM lokal, memanggil CoAllowSetForegroundWindow untuk mentransfer hak istimewa latar depan, lalu memanggil fungsi di server COM yang pada gilirannya secara langsung atau tidak langsung memanggil SetForegroundWindow.
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();
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 2000 Professional [hanya aplikasi desktop] |
Server minimum yang didukung | Windows 2000 Server [hanya aplikasi desktop] |
Target Platform | Windows |
Header | objbase.h |
Pustaka | Ole32.lib |
DLL | Ole32.dll |
Set API | ext-ms-win-com-ole32-l1-1-1 (diperkenalkan dalam Windows 8.1) |