У меня такая ситуация. У меня есть дескриптор окна приложения. Мне нужно активировать его. Я пробовал все эти функции, но не всегда работал. (Большую часть времени он не работает в первый раз, и мне придется вручную щелкнуть по нему, чтобы активировать его. Вторая попытка продолжается, он отлично работает) Причина, по которой Я делаю это потому, что у меня есть код, написанный в событии Form.Activate формы, которую мне нужно выполнить. Приложение представляет собой приложение с одним экземпляром. Когда создается новый экземпляр, он сначала проверяет существование какого-либо другого процесса. Если найден, дескриптор старого процесса передается этим функциям, чтобы пользователь мог работать с старой формой. Приложение вызывается из другого приложения C. [DllImport ("user32.dll")] public static extern int ShowWindow (IntPtr hWnd, int nCmdShow);Необходимо активировать окно
[DllImport("user32.dll")]
public static extern int SetForegroundWindow(IntPtr hWnd);
[DllImport("user32")]
public static extern bool PostMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam);
+1 Конечно, гуру Windows Raymond Chen [говорит, что это может заставить ваше приложение замораживаться] (http://stackoverflow.com/a/8081858/15639) – MarkJ
Где вы берете mainThreadId и что это значит? Благодаря! –