public static ProcessThread GetUIThread()
{
if (pWow.MainWindowHandle == null) return null;
int id = GetWindowThreadProcessId(pWow.MainWindowHandle, IntPtr.Zero);
foreach (ProcessThread pt in pWow.Threads)
if (pt.Id == id) return pt;
return null;
}
public static void Suspend()
{
var pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)GetUIThread().Id);
Wow64SuspendThread(pOpenThread);
}
public static void Resume()
{
var pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)GetUIThread().Id);
ResumeThread(pOpenThread);
}
[DllImport("kernel32.dll")]
static extern uint Wow64SuspendThread(IntPtr hThread);
[DllImport("kernel32.dll")]
static extern int ResumeThread(IntPtr hThread);
[Flags]
public enum ThreadAccess : int
{
TERMINATE = (0x0001),
SUSPEND_RESUME = (0x0002),
GET_CONTEXT = (0x000

,
SET_CONTEXT = (0x0010),
SET_INFORMATION = (0x0020),
QUERY_INFORMATION = (0x0040),
SET_THREAD_TOKEN = (0x0080),
IMPERSONATE = (0x0100),
DIRECT_IMPERSONATION = (0x0200)
}