Я создаю приложение, которое должно проверить реакцию какого-либо процесса.
System.Diagnostics.Responding
не работает должным образом.Поэтому я пытаюсь найти решение, используя Windows API.
Я уже пробовал SendMessageTimeOut так:
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(
IntPtr hWnd,
uint msg,
UIntPtr wParam,
IntPtr lParam,
uint flags,
uint timeout,
out IntPtr pdwResult);
public static bool IsResponding(Process process)
{
IntPtr hProcess = IntPtr.Zero;
try
{
hProcess = OpenProcess(
ProcessAccessFlags.QueryInformation | ProcessAccessFlags.DuplicateHandle | ProcessAccessFlags.Synchronize,
false,
(uint)process.Id
);
if (hProcess == IntPtr.Zero)
return false;
IntPtr hResult = SendMessageTimeout(hProcess, 13, UIntPtr.Zero, IntPtr.Zero, SMTO_ABORTIFHUNG, 2000, out IntPtr pdwResult);
return hResult != IntPtr.Zero;
}
catch
{
return false;
}
finally
{
if (hProcess != IntPtr.Zero)
CloseHandle(hProcess);
}
}
Другая попытка была с IsHungAppWindow.
[DllImport("user32.dll", CallingConvention = CallingConvention.Winapi, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsHungAppWindow(IntPtr hwnd);
Я действительно не знаю, почему мне всегда возвращается, что приложение не отвечает.
Мои PInvokes работают нормально, я думаю, не бросать в любое время.И OpenProcess тоже работают.
Я создал приложение WPF, которое может отвечать, а не отвечать каждые 15 секунд.Диспетчер задач может получить Нет ответа должным образом, но мое приложение нет.
Что я сделал не так?Все, что я прочитал о совете мне использовать эти две функции.