Files
TaskTracker/WindowWatcher/NativeMethods.cs
2026-02-27 00:11:42 -05:00

35 lines
1.0 KiB
C#

using System.Runtime.InteropServices;
using System.Text;
namespace WindowWatcher;
internal static partial class NativeMethods
{
[LibraryImport("user32.dll")]
internal static partial IntPtr GetForegroundWindow();
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
internal static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
[LibraryImport("user32.dll", SetLastError = true)]
internal static partial uint GetWindowThreadProcessId(IntPtr hWnd, out uint processId);
[StructLayout(LayoutKind.Sequential)]
internal struct LASTINPUTINFO
{
public uint cbSize;
public uint dwTime;
}
[DllImport("user32.dll")]
internal static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
internal static TimeSpan GetIdleTime()
{
var info = new LASTINPUTINFO { cbSize = (uint)Marshal.SizeOf<LASTINPUTINFO>() };
if (!GetLastInputInfo(ref info))
return TimeSpan.Zero;
return TimeSpan.FromMilliseconds(Environment.TickCount64 - info.dwTime);
}
}