Как сделать окно приложения всегда активным
Конфигурация компьютера | |
Процессор: Pentium(R) Dual-Core CPU E5200 @ 2.50GHz | |
Материнская плата: Gigabyte G31M-S2L | |
Память: DDR2 4GB | |
HDD: Samsung 500GB + WD 1TB | |
Видеокарта: NVIDIA GeForce 9600GT | |
Блок питания: 400W | |
Монитор: Asus VW222U (22") | |
ОС: W7Uх64 SP1 | |
Индекс производительности Windows: 4,9 проц |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.
Конфигурация компьютера | |
Процессор: Pentium(R) Dual-Core CPU E5200 @ 2.50GHz | |
Материнская плата: Gigabyte G31M-S2L | |
Память: DDR2 4GB | |
HDD: Samsung 500GB + WD 1TB | |
Видеокарта: NVIDIA GeForce 9600GT | |
Блок питания: 400W | |
Монитор: Asus VW222U (22") | |
ОС: W7Uх64 SP1 | |
Индекс производительности Windows: 4,9 проц |
Prof, активное окно — то, которое обладает фокусом, то, в которое идёт ввод.
Разворачивайте виртуальную машину, разворачивайте на ней приложение и там делайте его активным.
Проблема такова: необходимо сделать окно ПОСТОЯННО активным с фокусом ввода клавиатуры.
Решение, думаю, только с помощью API функций
Накопал теоретическое решение на дельфе (привожу в оригинале):
h:=FindWindow(nil,'Супер-пупер прога');
if h<>0 then begin
SetForeGroundWindow(h);
ShowWindow(h, SW_SHOW);
SetActiveWindow(h);
end;
Все круто, кроме одного: после этих телодвижений "Супер-пупер прога" больше не сворачивается кнопкой "Свернуть".
Как раз мне это и надо, но на VFP.
Подскажите полный код для VFP, плиз.
Вторая проблема: выставить игнорирование нажатия клавиш, с помощью которых окно становится неактивным (Alt+Tab, leftWin, rightWin).
У меня VFP9sp1, XPsp2
Загибаюсь
Накопал теоретическое решение на дельфе (привожу в оригинале):
h:=FindWindow(nil,'Супер-пупер прога');
if h<>0 then begin
SetForeGroundWindow(h);
ShowWindow(h, SW_SHOW);
SetActiveWindow(h);
end;
Честно признаюсь, что не очень-то понимаю, как SW_SHOW - Activates the window and displays it in its current size and position.) может тебе помочь, да и SW_SHOWMAXIMIZED - Activates the window and displays it as a maximized window. или SW_MAXIMIZE - Maximizes the specified window. вроде как "разовая акция".
В первом приближении можно попробовать и "соверщенно стандартными средствами". т.е. как-нить так:
Если твой вопрос из разряда: Как предотвратить запуск нескольких экземпляров VFP приложения на одном рабочем месте, имеющих один и тот же заголовок главного окна, то что-нибудь типа:
Исправлено: MichaelD, 03.08.06 02:50
Если версия до VFP6 включительно, то определение HWND окна примерно так
Для версий от VFP7 и старше это не требуется, поскольку и у основного окна FoxPro и у любой формы можно прочитать значение HWND напрямую.
Если прога на базе основного окна FoxPro
Если прога на базе As Top-Level формы, то
Ну, а далее уже работаешь с остальными функциями по найденному HWND
Может не прваидьно высказал проблему, но окно программы должно не только постоянно быть на экране (AlwaysOnTop = .T. проблему не решает - окно остается всегда на экране, но фокус клавиатуры пропадает ), окно должно быть АКТИВНЫМ с фокусом клавиатуры при попытках переключения окна, например по нажатию Alt+Tab, leftWin, rightWin. Чтобы умники не могли выйти из окна программы (человеческий фактор).
окно должно быть АКТИВНЫМ с фокусом клавиатуры при попытках переключения окна, например по нажатию Alt+Tab, leftWin, rightWin. Чтобы умники не могли выйти из окна программыСурово. Лучше тогда ДОС А вообще таймер пару раз в секунду с проверкой активного окна и принудительной активизацией требуемого, если активно не оно, что-то вроде GetActiveWindow|/SetActiveWindow
Ну, батенька и запросы Это вам не ДОС Это многозадачная система и интерфейс в ней блокировать нельзя
Думаю, что не терминал, а сканер.
------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Исправлено: Влад Колосов, 03.08.06 11:55
Именно терминал
Все думал как его обозвать
а задача и стоит в том чтоб уйти из под ДОСа
Пытаюсь сделать так:
свойство thisform.init:
declare integer ShowWindow in Win32API integer, integer
declare integer SetActiveWindow in Win32API integer
fHWND=thisform.HWND
thisform.timer1.interval=1000 &&(1 сек)
далее по таймеру:
timer1.timer:
ShowWindow(fHWND,sw_shownormal)
(Функция ShowWindow устанавливает состояние показа определяемого окна
SW_SHOWNORMAL - Активизирует и показывает окно. Если окно свернуто или развернуто, система восстанавливает его в первоначальном размере и позиции. Прикладная программа должна установить этот флажок при отображении окна впервые.)
При нажатии right/leftWIN окно становится неактивным и перекрывается ПУСКом, при повторном нажатии right/leftWIN возвращается в исходное состояние с фокусом. По Alt+Tab переключается на другую задачу, оставаясь на екране по AlwaysOnTop=.t.).
Данный код проблему не решает
Исправлено: m-viktor, 03.08.06 12:50
А если это терминал, то просто в настроцках подключения указывается конкретная запускаемая программа и юзер больше ничего не видит. Как обычно, задачу надо описывать, а свой вариант ее решения.
_screen.AlwaysOnTop =.t.
у скрина убирай все
рамку, хедер
распахивай при старте на весь экран
винды будет не видно
и никуда не кликнут
1. тогда каким образом в XP выставить невозможность запуска пользователем других програм
2. помоему проблема переключения задач не исчезнет (Alt+Tab)
и не будет никакого пуска > 1. тогда каким образом в XP выставить невозможность запуска пользователем других програм
через политики (policy)
коль через API вариантов рещения пока нет попробую через политики,
но хотелось бы найти решение не затрагивая настроек винды
чтоб не было дополнительной подстройки системы после установки приложения
настройка политики запуска и проч. не выход.
Исправлено: m-viktor, 03.08.06 15:04
странно
а Вы желаете, чтобы лис сам лапу на винду наложил?
и сказал, что он главный? я бы на месте админа подвешивал бы за выступающие части тела программеров, программы которых мешают нормальному функционированию операционки.
Может Вам просто отказаться от многозадачности?
В чем тогда смысл перехода на Win?
Плохую идею хорошим кодом не исправишь. Надо пользоваться вещами по их назначению и обучать пользователей тому же.
------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
у него все правильно
бывают задачи когда .
посмотрите банкоматы
они все на винде, но Вы ее не увидете
есть еще оч. много чего
к примеру терминалы рентген контроля в аэропортах
там тоже приложение под нт4 работает и до винды юзеру не добраться
"A good example is a debugger when it hits a breakpoint."
Добавлено
не работает, причем честно об этом говорит (
Сначала нужно вызвать
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)0, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);
Зтем можно вызывать SetForegroundWindow.
Но это несовсем корректная техника. Для того и изменили поведение функции SetForegroundWindow, чтобы некоторые не доставали своими выскакивающими табличками.
сначала сворачиваем нашу прогу
Application.Minimize;
если "сворачивали в трей", то
if not IsWindowVisible(Application.Handle) then
ShowWindow(Application.Handle, SW_SHOW);
ну и восстанавливаем.
Application.Restore;
а уже при ресторе окно вылазит вперёд
кстати, если кто-то предложит лучший метод (без Minimize), буду очень благодарен
Что значит что с ним что без него?
Функция SystemParametersInfo вообще отработала корректно или ты не проверял на предмет ошибки?
Так вот если не проверял то проверь. Это делается с помощью GetLastError если функция SystemParametersInfo вернёт тебе ноль.
Если же функция отработала успешно, то вызови её же но с параметром SPI_GETFOREGROUNDLOCKTIMEOUT и убедись что она возвратит ноль.
После корректного вызова этой функции и установки свойства SETFOREGROUNDLOCKTIMEOUT в ноль система будет сразу делать окно активным с помощью SetForegroundWindow. Система не будет вызывать функцию FlashWindowEx.
я не знаю, какие у вас винды, а уменя WinXp.
под Win2000 всё точно так же.
Да, такая ситуация тоже возможна и она является штатной. Если текущий foreground-процесс вызвал функцию LockSetForegroundWindow.
Согласен что нужно. Но это просто один из вариантов как всё-таки сделать своё окно поверх всех, даже тогда когда никто этого нехочет и всеми средствами препятствует этому. Появится активное системное модальное окно, а после его закрытия уже делай основым то из своих окно которое необходимо.
На некорректные параметры такую ошибку система не выдаст. С параметрами у него судя по всему всё в порядке. А вот поотключать все лишние запущенные приложения попробовать стоит. Фалит из-за одного из них.
Windows 10 предлагает гибкий инструмент работы с окнами для тех, кто работает в нескольких окнах одновременно. При этом функция доступна независимо от того, какой у вас монитор и сколько их вы используете. Неважно также, какие характеристики у вашего ПК или ноутбука. Работа с окнами доступна бесплатно и включается парой нажатий на клавиатуру. Единственным ограничением является количество окон на один экран — это 4 окна при условии, что вы доверили ОС определить их расположение. В ручном же режиме подобных окон можно открыть в несколько раз больше (но нужно ли?).
Для примера, окна трех приложений можно расположить таким образом:
Чтобы воспользоваться данным функционалом, сперва необходимо запустить все необходимые приложения в любом порядке. Рекомендуем открывать не более четырех окон.
После этого вам необходимо сделать окно активным, просто нажав на него. Теперь с помощью комбинации клавиши Win и клавиш-стрелок выбрать направление, в котором окно должно «прилипнуть».
Для примера: комбинация «Win + ←» расположила окно слева на всю высоту экрана.
Если хотите, чтобы окно заняло четверть рабочего стола, то комбинация «Win + ↓» или «Win + ↑» разместит окно снизу или сверху соответственно.
Следующий пример был получен сначала нажатием «Win + →», а затем «Win + ↓», что «прилепило» окно снизу и справа соответственно.
Такими же комбинациями можно настроить оптимальное расположение и размер остальных окон, переключаясь между ними. Все окна можно расположить в том порядке, который вам необходим.
Если у вас есть еще один монитор, вы можете таким же образом расположить окна в нем, расширив работу до 8 окон одновременно. Вероятно, такой способ кому-то покажется нагруженным и непрактичным, но тем, кто не хочет постоянно переключаться между окнами, он будет в самый раз.
Работа с рабочими столами
Работа с виртуальными рабочими столами повысит продуктивность и расширит понятие многозадачности при работе в Windows 10. Этот инструмент позволит увеличить кол-во окон, в которых можно работать одновременно, и отделить одну группу окон от другой. Например, если в одной группе окон вы работаете с текстом, а в другой — с фото. Как уже говорилось ранее, завышенных требований к характеристикам вашего ПК нет, платить за это тоже не надо.
Как только вам необходимо дополнительное пространство — новый рабочий стол для работы с необходимыми приложениями или даже играми, — нажмите комбинацию «Win + Tab».
Вы увидите менеджер работы с окнами и рабочими столами.
В верхнем левом углу, в блоке рабочих столов, вы можете создать необходимое количество рабочих столов.
Создав рабочий стол, вы получаете виртуальное пространство, аналогичное вашему основному рабочему столу, но только без запущенных в нем окон. Также вы можете переключаться на окна предыдущего рабочего стола, чтобы не загромождать рабочее пространство.
Если вам необходимо переключиться на предыдущий или следующий рабочий стол, воспользуйтесь комбинациями «Ctrl+Win+←» или «Ctrl+Win+→» соответственно. Переключение происходит почти мгновенно, нет необходимости ждать загрузки.
Виртуальные рабочие столы имеют общий буфер обмена, которым вы можете воспользоваться для того, чтобы скопировать и перенести информацию на любой из ваших рабочих столов.
Используя полученный опыт использования «многооконности» и «мультизадачности», вы можете приумножить скорость и удобство работы в приложениях. Это применимо к работе, общению, играм, разработке и так далее.
Если вам потребовалось закрепить какое-то окно поверх всех других окон в Windows, а в настройках программы, которой принадлежит это окно такого параметра нет, к сожалению, системных средств для этого действия также нет. Но вы можете поместить окно «всегда сверху» с помощью нескольких бесплатных утилит.
В этой статье несколько способов закрепить окно программы поверх всех окон Windows 10, 8.1 или Windows 7 с помощью бесплатных программ, которые позволят выполнять это сочетанием клавиш, с помощью меню в области уведомлений и другими методами.
Как сделать программу или окно всегда поверх всех окон с помощью AutoHotKey
AutoHotKey — популярная программа, позволяющая создать скрипты для собственных горячих клавиш в различных программах или в Windows в целом. С помощью неё можно создать и сочетание клавиш, которое будет включать режим «Всегда сверху» для активного окна:
Разумеется, вы можете задать свою комбинацию: в моем примере используется ^ (Ctrl), + (Shift) и SPACE (пробел).
DeskPins — простая бесплатная программа для закрепления окна поверх других окон
В дальнейшем, если это окно больше не нужно располагать поверх других, поднесите указатель мыши к кнопке в заголовке окна и нажмите по ней для открепления.
PinWin
PinWin — еще одна бесплатная программа для помещения выбранных окон поверх остальных, даже когда они неактивны. После установки и запуска программы ее значок отобразится в области уведомлений Windows, и там можно будет выбрать окно, которое нужно закрепить поверх других окон из списка, либо указав на него (пункт «Select Window From Screen»).
На самом деле, программ подобного рода множество, как правило они бесплатны и не занимают много места. Два похожих инструмента со слегка иной реализацией закрепления поверх всех окон — OnTopper и TurboTop.
Дополнительно, если вам требуется закрепить окно какой-то конкретной программы поверх других окон, не исключено, что такая настройка присутствует в параметрах самой этой программы: например, вы найдете такую настройку в диспетчере задач Windows, медиа плеере VLC, для видео в браузере Google Chrome можно использовать расширение Floating Video, для браузера Firefox есть дополнение «Always on Top», во многих других программах также можно отыскать соответствующие возможности.
А вдруг и это будет интересно:
06.03.2020 в 14:22
Программ много, но как-то ни одна из них не работает на W10 1909. Печально : (
А хуже всего то, что Microsoft все сама не догадается реализовать такую простую, но нужную фичу, которая в Linux в почти любом DE есть давно.
07.03.2020 в 09:23
Я все указанные программы именно на 1909 и запускал когда статью писал (W10 1909 Pro x64), все исправно работают.
Быть может, окно у вас какое-то особенное?
06.03.2020 в 20:46
Inqsoft Window Scanner?
07.03.2020 в 09:03
Не сталкивался. Сейчас посмотрел, с 2004 не обновлялась, но если продолжает работать на 10-ке и т.п., то почему нет?
07.03.2020 в 22:36
Actual Title Buttons всем в помощь.
15.03.2020 в 12:20
Читайте также: