Как программно переместить панель задач Windows (дубль два)

Прежде всего, я знаю, что в SO есть вопрос с аналогичной формулировкой, но на него не ответили должным образом, и большая часть обсуждения вокруг него сводилась к тому, что «вы не должны этого делать».

Итак, давайте начнем с основ. Зачем это нужно.

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

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

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

Есть ли способ добиться этого? В настоящее время я использую С#, но это не является определенным требованием, я могу легко добиться преобразования из С++ или vb, и p/invokes не страшны.

Операционная система - виндовс 7.

[Редактировать: я уже пробовал SHAppBarMessage с SETPOS, он не работает в Windows 7. Я пробовал PIN-коды MoveWindow и SetWindowPos, также не работают в Windows 7 на панели задач. В других окнах работает нормально. И я уверен, что у меня правильный дескриптор, потому что, если я использую ShowWindow pinvoke, чтобы скрыть его, он действительно скроется, хотя я не могу освободить неиспользуемое пространство для чего-либо еще. Эти методы работали на XP, поэтому это так расстраивает.]

Большое спасибо за ваше время, Жоао Коррейя


person Joao Correia    schedule 21.09.2010    source источник
comment
извините за бессовестный / удар, но я все еще в тупике по этому поводу. Я даже рассматриваю другой подход. Полностью скрыть панель задач после того, как я обнаружу поворот, и снова показать ее при повороте назад. НО. Несмотря на то, что я могу скрыть панель задач и кнопку «Пуск», я не могу освободить место для области рабочего стола. Он всегда считает панель задач присутствующей и не позволяет окнам увеличивать пространство.   -  person Joao Correia    schedule 04.10.2010
comment
Привет, просто хотел сообщить вам, что это можно сделать, я опубликовал решение в пакетном режиме и vbscript, поэтому С# тоже должен быть возможен, см. stackoverflow.com/ вопросы/12435503/   -  person peter    schedule 21.01.2013


Ответы (1)


Пробовали ли вы FindWindow() с Shell_TrayWnd в качестве класса, а затем использовать SetWindowPos для открытия окна?

Не уверен, как Windows воспримет это.

Также есть специальный API для работы с AppBar (что такое панель задач), проверьте:

http://bytes.com/topic/c-sharp/answers/247701-moving-windows-takbar

person Lloyd    schedule 21.09.2010
comment
Да, я пробовал FindWindow, и аргумент, который вы предлагаете, игнорируется системой. Если я использую его в любом другом окне, он работает. Панель задач его игнорирует. Что касается предложенной ссылки, я пробовал именно этот код. Он работает на XP, но не работает на 7, поэтому мне нужен этот вопрос. - person Joao Correia; 21.09.2010
comment
Ааа, вижу, интересно. - person Lloyd; 21.09.2010