Я считаю, что ваш вызов EnumThreadWindows должен работать нормально, проблема, похоже, в
uint ThreadID = GetThreadID(MainHWND);
звонок; похоже, что вы пытаетесь передать дескриптор окна туда, и это не совсем то, что он ожидает от вас, подробнее здесь: http://msdn.microsoft.com/en-us/library/ms683233(VS.85).aspx
Я пытался изменить строку выше на следующий код:
[DllImport("kernel32.dll")]
static extern uint GetCurrentThreadId();
<...>
uint ThreadID = GetCurrentThreadId();
и остальная часть вашего кода работала нормально для меня
Также, если вы хотите получить идентификатор потока для данного обработчика окна, приведенный ниже код может дать вам представление о том, как это сделать:
[DllImport("user32.dll")]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId);
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
public static uint GetThreadIdForForegroundWindow()
{
IntPtr hwnd = GetForegroundWindow();
return (hwnd!=IntPtr.Zero) ? GetWindowThreadProcessId(hwnd, IntPtr.Zero) : 0;
}
<...>
uint ThreadID = GetThreadIdForForegroundWindow();
привет