2011-01-25 2 views
4

Редактировать 1: На самом деле мне было только нужно избегать мерцания, вызванного закрытием документа Word и открытием другого. Но сейчас, похоже, такой подход невозможен.Запретить обновление всего экрана

Приветствуем, возможно ли предотвратить обновление всего экрана (а не только рабочего стола)? Вопрос основан на this one. Что я хочу сделать, так это то, что в моей надстройке Word заблокировать все обновления экрана, когда я закрываю документ Word и открываю другой, и повторно активировать обновление, когда закончите.

Идея будет:

  1. Получить изображение на весь экран, (как?)
  2. Показать самое верхнее окно, чтобы показать изображение на экране, снятое на шаге 1, чтобы охватить весь экран;
  3. Выполняйте мою работу и закройте самое верхнее окно, когда закончите.

Возможно ли это? Или у вас есть другие идеи? Благодаря!

+2

Вы понимаете, что это очень плохая идея, я надеюсь. –

+8

Слово предупреждения: такое поведение приложения (что еще хуже, надстройка для приложения для текстовой обработки) можно рассматривать как пограничное вредоносное ПО («захватывает элементы управления другими приложениями и/или оконным менеджером?». приложения «Проверить».). Я верю, что ваши намерения чисты, но в первый раз, когда это происходит со мной как с пользователем, я буду параноидальным до максимума и вверх по оружию («я установил эту надстройку и теперь это мешает экрану обновляться, что это пытается скрыть от меня ?! »), если этот переход не является отправной точкой вашей надстройки. – Piskvor

+2

Сначала откройте новый документ. Как только он появится, закройте старый документ. Не нужно вообще блокировать экран. –

ответ

0

для предотвращения обновления экрана:

SendMessage(GetDesktopWindow, WM_SETREDRAW, 0, 0); 

для повторного включения обновления экрана:

SendMessage(GetDesktopWindow, WM_SETREDRAW, 1, 0); 
+1

А как насчет всех приложений, которые также являются окнами верхнего уровня? –

+3

А если ваша надстройка выходит из строя между первым и вторым сообщениями? (Конечно, * ваш * код никогда не сбой. Ну, что, если Word выйдет из строя, взяв с собой надстройку?) Будет ли это требовать входа в систему, перезагрузки или еще более радикального действия для исправления? (не троллинг, просто любопытно) – Piskvor

+0

Спасибо glob, похоже, он может отключить окраску рабочего стола, но это вызовет ошибку, и картина не может быть восстановлена ​​с помощью второй строки кода, которую вы предоставили. Может быть, этот метод может привести к непредсказуемым проблемам ... –

7

не делать.

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

The Old New Thing (Raymond Chen) имеет несколько очень хорошие посты в этом, варьируя от LockWindowUpdate, до locking gadges in place и других user-hostile features.

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

Заблокировать что угодно для целей, как «чтобы он выглядел красиво» - даже в течение очень короткого периода времени - это полный нет-нет.

Ваш запрос - это только первый шаг к страшному системно-модальному диалогу «Вы уверены, что хотите сделать это плохо на своем компьютере?» с кнопками Yes и No, где Yes - это кнопка по умолчанию, в которой пользователь вводит длинный сюжет, нажимая пробел.

--jeroen

+3

+1 «да, давайте отключим пользовательский интерфейс здесь только для seco - Word столкнулся с проблемой и должен Мы сожалеем о неудобствах. @Edwin: пользовательский интерфейс отключен, и процесс, который должен был повторно включить его, больше не существует. Что теперь? (и не говорите, что «пользователи Windows используются для перезагрузки», это уже не 1998 год) – Piskvor

Смежные вопросы