Я думаю, что вы используете неправильное значение из вызова GetWindowThreadProcessId
, если вы посмотрите документацию здесь , вы увидите, что вторым параметром является идентификатор процесса (как вымы назвали его), но идентификатор потока находится в возвращаемом значении.
Другими словами, я думаю, что ваш код должен быть таким (непроверенным):
public static bool GetInfo(unit hwnd, out GUITHREADINFO lpgui)
{
uint lpdwProcessId;
uint threadId = GetWindowThreadProcessId(hwnd, out lpdwProcessId);
lpgui = new GUITHREADINFO();
lpgui.cbSize = Marshal.SizeOf(lpgui);
return GetGUIThreadInfo(threadId, ref lpgui);
}