Мое приложение должно получить фокус, когда оно получило вызов внешним инструментом (через API), я знаю, что по умолчанию это значит, что он должен просто мигать на панели задач, но в этом случае это абсолютно не то поведение, которое я хочу. В этом случае я пытаюсь получить фокус с помощью «this.Activate()» (C#).Общие сведения о SystemParametersInfo SPI_SETFOREGROUNDLOCKTIMEOUT
Здесь используется ForeGroundLockTimeOut. Однако у меня возникла небольшая проблема с пониманием SystemParameterInfo SPI_SETFOREGROUNDLOCKTIMEOUT.
Я знаю, что он используется для установки ForeGroundLockTimeOut, который определяет, сколько времени вашему приложению придется ждать, пока он не получит требуемый фокус.
(для получения дополнительной информации переменной «Вал» является IntPtr, который установлен в 0)
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,val,SPIF_SENDWININICHANGE + SPIF_UPDATEINIFILE);
это один будет изменить ключ реестра, который обрабатывает тайм-аут (HKEY_CURRENT_USER \ Control Panel \ Desktop \ ForeGroundLockTimout) Поскольку это изменит поведение всех приложений, это действительно последнее средство для использования.
Теперь я подумал, что если я не обновляю раздел реестра. Так что я попытался это:
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, val, 0);
Однако это не меняет поведение моего приложения в любом случае, но
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,val,SPIF_SENDWININICHANGE);
делает.
Что я не понимаю, так это то, что это работает только для моего приложения, что абсолютно то, что я хочу, но я не понимаю. Почему мне нужно транслировать изменения, которые работают только для моего приложения, когда есть не было внесено никаких изменений в какой-либо раздел реестра или вообще, и почему это работает только для моего приложения.
Примечание. Если вы хотите протестировать это поведение, протестируйте его, когда Visual Studio не работает, хотя он работает (даже если это решение не загружено), он изменяет поведение приложения в получении фокуса в любом случае.
* В любом случае он изменяет поведение приложения в получении фокуса. * Вы даже [прочитали прекрасное руководство] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633539 (v = vs.85) .aspx)? * Система ограничивает, какие процессы могут устанавливать окно переднего плана. Процесс может установить окно переднего плана, только если выполняется одно из следующих условий: ... Процесс переднего плана отлаживается. * То, что вы пытаетесь сделать, напоминает мне об этом [http: //blogs.msdn. ком/б/oldnewthing/Архив/2011/03/10/10138969.aspx). –
Также напоминает мне об этом [http://blogs.msdn.com/b/oldnewthing/archive/2009/02/20/9435239.aspx). –
Да, я читал его, и я не пытаюсь сделать мое окно самым верхним, он работает в фоновом режиме большую часть времени, я хочу, чтобы он получал фокус, когда он вызывается через api (добавит это к вопросу) но он не должен быть максимальным, даже если он имеет фокус. – Visions