/// <summary> /// Returns the state of Focus Assist if available on this computer. Returns <see cref="FocusAssistState.FAILED"/> otherwise. /// </summary> /// <returns></returns> public static FocusAssistState GetFocusAssistState() { try { // Focus Assist: Windows 10 build >= 17083 WNF_STATE_NAME WNF_SHEL_QUIETHOURS_ACTIVE_PROFILE_CHANGED = new WNF_STATE_NAME(0xA3BF1C75, 0xD83063E); uint nBufferSize = (uint)Marshal.SizeOf(typeof(IntPtr)); IntPtr pStateName = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(WNF_STATE_NAME))); Marshal.StructureToPtr(WNF_SHEL_QUIETHOURS_ACTIVE_PROFILE_CHANGED, pStateName, false); bool success = NtQueryWnfStateData(pStateName, IntPtr.Zero, IntPtr.Zero, out uint nChangeStamp, out IntPtr pBuffer, ref nBufferSize) == 0; Marshal.FreeHGlobal(pStateName); if (success) { return((FocusAssistState)pBuffer); } } catch { } return(FocusAssistState.FAILED); }
internal static extern int NtQueryWnfStateData([In] ref WNF_STATE_NAME StateName, IntPtr TypeId, IntPtr ExplicitScope, out uint ChangeStamp, [Out] IntPtr Buffer, ref uint BufferSize);
//internal static extern int NtUpdateWnfStateData(ref WNF_STATE_NAME StateName, IntPtr Buffer, uint Length, ref WNF_TYPE_ID TypeId, IntPtr ExplicitScope, uint MatchingChangeStamp, uint CheckStamp); internal static extern int NtUpdateWnfStateData(ref WNF_STATE_NAME StateName, IntPtr Buffer, uint Length, IntPtr TypeId, IntPtr ExplicitScope, uint MatchingChangeStamp, uint CheckStamp);