mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-12 18:27:23 +01:00
128 lines
4.5 KiB
C#
128 lines
4.5 KiB
C#
using System;
|
|
using System.Diagnostics;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
|
|
#pragma warning disable SA1600 // Elements should be documented
|
|
#pragma warning disable SA1602 // Enumeration items should be documented
|
|
|
|
namespace Dalamud
|
|
{
|
|
internal static class NativeFunctions
|
|
{
|
|
public enum FlashWindow : uint
|
|
{
|
|
/// <summary>
|
|
/// Stop flashing. The system restores the window to its original state.
|
|
/// </summary>
|
|
FLASHW_STOP = 0,
|
|
|
|
/// <summary>
|
|
/// Flash the window caption
|
|
/// </summary>
|
|
FLASHW_CAPTION = 1,
|
|
|
|
/// <summary>
|
|
/// Flash the taskbar button.
|
|
/// </summary>
|
|
FLASHW_TRAY = 2,
|
|
|
|
/// <summary>
|
|
/// Flash both the window caption and taskbar button.
|
|
/// This is equivalent to setting the FLASHW_CAPTION | FLASHW_TRAY flags.
|
|
/// </summary>
|
|
FLASHW_ALL = 3,
|
|
|
|
/// <summary>
|
|
/// Flash continuously, until the FLASHW_STOP flag is set.
|
|
/// </summary>
|
|
FLASHW_TIMER = 4,
|
|
|
|
/// <summary>
|
|
/// Flash continuously until the window comes to the foreground.
|
|
/// </summary>
|
|
FLASHW_TIMERNOFG = 12,
|
|
}
|
|
|
|
[Flags]
|
|
public enum ErrorModes : uint
|
|
{
|
|
SYSTEM_DEFAULT = 0x0,
|
|
SEM_FAILCRITICALERRORS = 0x0001,
|
|
SEM_NOALIGNMENTFAULTEXCEPT = 0x0004,
|
|
SEM_NOGPFAULTERRORBOX = 0x0002,
|
|
SEM_NOOPENFILEERRORBOX = 0x8000,
|
|
}
|
|
|
|
/// <summary>Returns true if the current application has focus, false otherwise.</summary>
|
|
/// <returns>If the current application is focused.</returns>
|
|
public static bool ApplicationIsActivated()
|
|
{
|
|
var activatedHandle = GetForegroundWindow();
|
|
if (activatedHandle == IntPtr.Zero)
|
|
{
|
|
return false; // No window is currently activated
|
|
}
|
|
|
|
var procId = Process.GetCurrentProcess().Id;
|
|
GetWindowThreadProcessId(activatedHandle, out var activeProcId);
|
|
|
|
return activeProcId == procId;
|
|
}
|
|
|
|
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
|
|
public static extern IntPtr GetForegroundWindow();
|
|
|
|
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
public static extern int GetWindowThreadProcessId(IntPtr handle, out int processId);
|
|
|
|
[DllImport("user32.dll")]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public static extern bool FlashWindowEx(ref FLASHWINFO pwfi);
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public static extern bool FreeLibrary(IntPtr hModule);
|
|
|
|
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
|
|
public static extern IntPtr GetModuleHandle(string lpModuleName);
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
[PreserveSig]
|
|
public static extern uint GetModuleFileName(
|
|
[In] IntPtr hModule,
|
|
[Out] StringBuilder lpFilename,
|
|
[In][MarshalAs(UnmanagedType.U4)] int nSize);
|
|
|
|
[DllImport("kernel32", SetLastError = true, CharSet = CharSet.Ansi)]
|
|
public static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)] string lpFileName);
|
|
|
|
[DllImport("kernel32.dll")]
|
|
public static extern IntPtr SetUnhandledExceptionFilter(IntPtr lpTopLevelExceptionFilter);
|
|
|
|
[DllImport("kernel32.dll")]
|
|
public static extern ErrorModes SetErrorMode(ErrorModes uMode);
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
public static extern bool DebugActiveProcess(uint dwProcessId);
|
|
|
|
#pragma warning disable SA1307 // Accessible fields should begin with upper-case letter
|
|
#pragma warning disable SA1121 // Use built-in type alias
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct FLASHWINFO
|
|
{
|
|
public UInt32 cbSize;
|
|
public IntPtr hwnd;
|
|
public FlashWindow dwFlags;
|
|
public UInt32 uCount;
|
|
public UInt32 dwTimeout;
|
|
}
|
|
|
|
#pragma warning restore SA1121 // Use built-in type alias
|
|
#pragma warning restore SA1307 // Accessible fields should begin with upper-case letter
|
|
}
|
|
}
|
|
|
|
#pragma warning restore SA1600 // Elements should be documented
|
|
#pragma warning restore SA1602 // Enumeration items should be documented
|