почему user32.dll GetTopWindow возвращает дескриптор чего-то с именем «MSCTFIME UI»? - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь держать свое приложение на вершине в окнах. Поэтому я вызываю этот код, чтобы установить мою программу поверх всего:

SetWindowPos(MyProgramHWND, HWND_TOPMOST, CENTER_ME_W, CENTER_ME_Y, windowSize.x, windowSize.y, SWP_SHOWWINDOW);

И это работает. Тем не менее, другая сторонняя программа решила украсть мою высшую позицию, поэтому мне нужно «держать» мою программу на вершине. Для этого я хотел бы проверить, находится ли моя программа на вершине или нет.

Итак, после поиска в Интернете я использую этот код для захвата HWND окна, которое предположительно находится сверху:

IntPtr TopHWND = GetTopWindow((IntPtr)null);

И, основываясь на том, что я читаю в Интернете, вызывает GetTopWindow ипропуск нулевого значения должен получить верхнее окно для всего рабочего стола.

Но то, что он возвращает, это какой-то странный hwnd для окна, которые оба возвращают GetWindowText и GetClassName: «MSCTFIME UI». Который, кажется, не является ни моей программой, ни другой программой, которая конкурирует со мной на высшем уровне. На самом деле, я даже не могу понять, что такое «MSCTFIME UI»!

Я попробовал все, чтобы выяснить, что такое «MSCTFIME UI», или если это родительское окно, которое каким-то образом содержитокно, которое я ищу. У него нулевые дочерние окна (согласно EnumChildWindows), поэтому он не является родителем или контейнером какого-либо рода. И я попытался найти его в GetProcessesByName, и не смог найти его. Я даже пытался найти его с помощью ProcessExplorer (это отдельное приложение, которое вы можете скачать бесплатно), и не смог найти его изо всех сил. Я буквально понятия не имею, что такое "MSCTFIME UI"! Даже в поисках Google его оказалось очень мало, и ни один из них не объяснил, что именно.

Кто-нибудь может объяснить, что такое «MSCTFIME UI» и почему его hwnd возвращается GetTopWindow ((IntPtr) null)?

Примечание: он всегда возвращает «MSCTFIME UI» как самое верхнее окно, независимо от того, помещаю ли я свое приложение сверху или если я ставлю другое приложение сверху, это не имеет значения. Во всех случаях он всегда возвращает «MSCTFIME UI» как самое верхнее окно.

...