Могу ли я активировать и скрыть HWND одновременно?

Я знаю, что дескриптор окна «HWND» может быть скрыт функцией ShowWindow (hwnd, SW_HIDE), эта функция деактивирует и скрывает окно.

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

-1

Решение

Не возможно иметь скрытый окно (SW_HIDE) то есть активный (также известный как сфокусированный). Это хорошая вещь, потому что если бы вы могли, это было бы огромным риском для безопасности. Пользователь может ввести свой пароль и непреднамеренно предоставить его скрытому окну, которое украло фокус. Не говоря уже о том, что было бы невероятно запутанно иметь невидимое окно, крадущее все входные события.

Теперь вы можете моделировать скрытое окно, либо свернув окно (SW_SHOWMINIMIZED) или уменьшив его размер, чтобы он был очень маленьким. Минимизированные окна могут все еще быть активным / сосредоточенным окном; их значки на панели задач будут изменены соответственно, чтобы проиллюстрировать это. Аналогично, Windows не заботится о том, насколько маленькое ваше окно на экране, оно все еще может быть активным / сфокусированным.

Некоторые старые приложения пытались симулировать скрытое окно, перемещая его в чрезвычайно большие положительные (или маленькие отрицательные) координаты, где предполагалось, что окно всегда будет вне экрана. Конечно, проблема с этим подходом сразу стала очевидной, как только Windows начала поддерживать несколько мониторов (примерно во время Windows 98) — эти «невидимые» окна начали появляться на дополнительных мониторах, которые пользователи размещали слева и справа от своих мониторов. основной экран. К сожалению.

Тем не менее, я не думаю, что любой из этих подходов является очень хорошим дизайном. В этот момент я обычно прошу людей объяснить Зачем они думают, что они должны сделать это. Подобные вопросы часто являются проявлением XY Проблема, где вы спрашиваете о своем воображаемом решении проблемы, а не о том, как решить проблему самостоятельно. Вы говорите, что

Я хочу получить данные из окна, но скрыть их одновременно

но я не уверен, что это значит. Что значит «получить данные из окна»? Вы можете «получать данные» из окна независимо от того, активно оно или нет. Если бы вы сказали нам, какие данные вы хотите получить, я мог бы предложить лучший подход для получения данных. Но, например, если вы хотите извлечь текст из элемента управления textbox в окне, вы можете отправить элемент управления textbox WM_GETTEXT сообщение. И есть аналогичные сообщения для других общих элементов управления.

Единственное время, когда вам нужно сфокусировать окно, это если вы пытаетесь вставить события мыши и клавиатуры в очередь ввода, используя что-то вроде SendInput с целью управления приложением программно. Это глупость, не в последнюю очередь из-за ее хрупкости. Даже если вам удалось сделать окно скрытым и активным, как вы хотите, ничто не мешает пользователю щелкнуть где-то еще, изменить сфокусированное окно и сломать все, что вы так тщательно настроили. Почти всегда есть лучший способ достичь автоматизации пользовательского интерфейса.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]