27 lines
1.3 KiB
C#
27 lines
1.3 KiB
C#
using System.Runtime.InteropServices;
|
|
|
|
namespace CursorLang.Interop;
|
|
|
|
/// <summary>
|
|
/// Право выводить окно на передний план.
|
|
/// </summary>
|
|
internal static class ForegroundPermissionNative
|
|
{
|
|
/// <summary>ASFW_ANY — право получает любой процесс.</summary>
|
|
private const uint AnyProcess = 0xFFFFFFFF;
|
|
|
|
/// <summary>
|
|
/// Уступает своё право вывести окно на передний план другим процессам.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Поменять окно переднего плана Windows разрешает не всякому: нужно быть
|
|
/// процессом, с которым пользователь работал последним. Давно запущенный
|
|
/// экземпляр приложения к таким не относится, и его окно всплывёт только
|
|
/// если правом поделится процесс, который пользователь запустил только что.
|
|
/// </remarks>
|
|
internal static void GrantToAnyProcess() => AllowSetForegroundWindow(AnyProcess);
|
|
|
|
[DllImport("user32.dll")]
|
|
private static extern bool AllowSetForegroundWindow(uint dwProcessId);
|
|
}
|