Как вывести окно на передний план после события DDE?

StackOverflow https://stackoverflow.com/questions/621751

  •  05-07-2019
  •  | 
  •  

Вопрос

В случае DDE моя программа загружает файл и должна появиться на переднем плане. Я использовал

show;

Кажется, это работает только тогда, когда я спрятал окно.

Итак, я добавил

bringtofront;

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

Я даже попробовал некоторые хакерские штуки вроде

windowstate:=wsminimized;
windowstate:=wsnormal;

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

Это было полезно?

Решение

Вы пробовали SetForegroundWindow и / или SetActiveWindow? См. Также информацию MSDN по этой теме.

Другие советы

SetForegroundWindow не всегда будет работать. На самом деле, в наши дни это вряд ли сработает, потому что приложения не должны захватывать фокус, они могут только отдать его. MS в течение лет пыталась предотвратить кражу приложениями фокуса ввода. Прочитайте комментарии к этой записи блога от Раймонда Чена для некоторой истории.

Итак, если вы сами являетесь приложением переднего плана, вы можете установить SetForegroundWindow в другое приложение, и все будет замечательно. Если вы не используете приложение на переднем плане, вероятнее всего, единственное, что может произойти, - кнопка панели задач начнет мигать.

Просто, чтобы добавить некоторую путаницу, точное поведение зависит от версии Windows, поэтому то, что происходит, зависит от того, какой тип Windows вы используете - они долго возились с этим: -).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top