13

Извините за смутное название, но это трудно объяснить, так что потерпите меня, пожалуйста.

Я использую Windows Vista на работе для веб-разработки, и иногда, когда я нажимаю или нажимаю Alt-Tab в фоновом окне, окно фокусируется, но не выводится на передний план.

Чтобы вывести окно на передний план, я должен нажать на границу приложений (когда появится курсор изменения размера), и окно затем переместится на передний план.

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

Я надеюсь, что я полностью объяснил проблему (и вы ее поняли) и был бы признателен за любые конструктивные ответы или комментарии для решения этой проблемы.

Пример: если я перейду Alt-Tab из Google Chrome в Блокнот и эта проблема возникнет случайно, Google Chrome останется перед Блокнотом, однако я смогу печатать текст в Блокноте, пока окно находится за Google Chrome. Нажатие на область содержимого Блокнота не выведет его на передний план, а щелчок на границе окна.

Видеоэкзамен

http://vimeo.com/19388998

В этом видео я переключился с Google Chome на UltraEdit, и хром остался в шрифте, но, как вы можете видеть, я все еще могу печатать в UltraEdit.

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

7 ответов7

6

В случае с Chrome это известная проблема: поведение окна Chrome всегда сверху

Быстрое решение этой проблемы - выбрать Chrome Window и дважды нажать F11.

3

На что это похоже?

Существует только одно поведение, близкое к этой проблеме, и это будет поведение « Всегда сверху» .
Какой-то фрагмент кода, возможно, из самой программы, может изменять свойство вашего окна ...

Как установить окно "Всегда сверху"?

Как создать форму, которая всегда остается сверху, показывает нам, что SetWindowPos вызывается со вторым параметром, установленным в HWND_TOPMOST, это немедленно помещает его сверху и сохраняет его таким образом.

После быстрого поиска Google этот результат показывает, что User32.dll является владельцем этой функции.

Кто устанавливает мое окно "Всегда сверху"?

Теперь, когда мы знаем, какая функция вызывается, мы захотим узнать, когда вызывается эта функция. Это потребует от нас создания трассировок стека и их анализа, в то время как Windows Performance Toolkit может это сделать, мы можем быть очень рады, что Rohitab Batra написал потрясающий Api Monitor.

Извините, но это тяжелая домашняя работа:

  • Загрузите API Monitor и установите его.
  • Откройте API Monitor как администратор, если у вас 64-битная версия, вам нужно сделать это дважды.
  • Убедитесь, что ничего не проверено в API Capture Filter на левой стороне.
  • Там же измените Все модули в верхней части этого диалога на User32.dll.
  • Идти к

    Windows Application UI Development > Windows and Messages > Windows
    

    а потом

    User32.dll > SetWindowPos
    

Теперь вам захочется подключить некоторые процессы. Слово предостережения: сортируйте по PID и не подключайтесь к winlogon.exe или к чему-либо с более низким PID, чем это, если вы это сделаете, вы либо повесите, либо сломаете свою систему. Вы можете столкнуться с таким поведением и с другими процессами, но это похоже на метод проб и ошибок, чтобы увидеть, какие из них вы можете подключить. Так:

  • Сортируйте по PID и перехватывайте все, что новее, чем winlogon.exe .
  • Если все идет хорошо, вы можете просмотреть темы в диалоге Hooked Process .
  • Посмотрите на вызов API, который выглядит следующим образом:

    SetWindowPos (0x000000000002043c, HWND_BOTTOM | 0x00000000fffffffe, 0, 0, 0, 0,
    SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE)

Вызов SetWindowPos с HWND_BOTTOM | 0x00000000fffffffe (-2 + 1 = -1 = HWND_TOPMOST) - это то, к чему мы стремимся, и процесс, который выполняет этот вызов, - это тот, который вы должны винить в своей проблеме.

Я сдаюсь... Как я могу исправить мою проблему "Всегда сверху"?

Боевой огонь с огнем, мы собираемся установить все окна в HWND_NOTOPMOST.

Yikes, программирование! Но это также легко можно сделать с помощью сценариев ...

Итак, очень простая домашняя работа:

  • Загрузите AutoIt v3.

  • Создайте файл ByeByeTopMost.au3, который содержит:

    While 1
        $var = WinList()
    
        For $i = 1 to $var[0][0]
            WinSetOnTop($var[$i][1], "", 0)
        Next
    
        Sleep(5000)
    WEnd
    
  • Поместите его в папку запуска и запустите или перезагрузите компьютер.

Или, если вам совсем не нравится домашнее задание, скачайте этот zip-файл, который я сделал.

Повеселись... :-)

PS: Вы не можете использовать функцию "Всегда сверху" в этом последнем случае. Либо устранение неполадок, либо обходной путь ... ;-)

2

Чтобы отключить это, вы должны нажать

ALT + Пробел + C

После нажатия этих кнопок браузер Google Chrome закроется автоматически. Затем снова запустите браузер Google Chrome.

Проблема будет решена навсегда :)

1

Есть эта проблема тоже и найти способ обойти это. Я установил программное обеспечение "Всегда сверху".

И я использую его в Chrome для Windows, который изменил состояние свойства alwaysontop .

0

У меня была такая же проблема, и мне удалось ее исправить, зайдя в "Пуск" в меню "Пуск", и после входа в Windows снова уважал панель инструментов. Казалось, что это влияет на все окна, и хотя хром может быть причиной, он определенно влияет на всю систему Windows, что предполагает возможного виновника в самой Windows. Создание этого поста после моей первой попытки решить эту проблему после пяти лет работы с Chrome в Windows XP и 7.

0

Одним из быстрых решений является двойное нажатие на кнопку «Показать рабочий стол» в правой части панели задач в Windows 7/8/8.1.

-3

Откройте Chrome и нажмите ALT + Пробел + C

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .