Задать вопрос
@F1eex

Как сделать область экрана неактивной для клика мышью?

В программе управления широкоформатным принтером есть две рядом стоящие кнопки Stop и Pause. Нужно достаточно часто нажимать Pause и не нужно Stop.
4803f2f5278a931a799a1b1285db28d2.PNG
Из-за близкого расположения можно случайно нажать Stop, а это очень нежелательно! Кнопку Stop нужно заблокировать. Я не нашел как это сделать в настройках и файлах конфига.
Поэтому пришло в голову костыльное решение: т.к. программа всегда развернута на полный экран, но нужно просто сделать, чтобы клики в область помеченную желтым система игнорировала. Область на экране всегда будет в одном и том же положении. И первая мысль - нужна какая-нибудь програмка, которая будет делать поверх всех окон прозрачное окошко (заслоняя собой кнопку Stop) в этой области. Есть ли такое или же есть другой выход?
  • Вопрос задан
  • 556 просмотров
Подписаться 2 Простой 5 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Инженер по автоматизации
    13 месяцев
    Далее
  • Merion Academy
    Администрирование MS Windows Server
    1 месяц
    Далее
  • Нетология
    Специалист по информационной безопасности + нейросети
    12 месяцев
    Далее
Решения вопроса 3
@rPman
Могу порекомендовать метод, судя по скриншоту, интерфейс из 200x, элементы окна чистый win32. Если повезет.

С visual stusdio (можно community версию) шла утилита spy+, хорошая исследовательская, позволяла изучать интерфейс чужих приложений (просто кликнув по кнопке в интерфейсе spy+ и затем в окно программы, вроде бы есть альтернативы типа winspy++, советую погуглить), видеть дерево HWND компонент. затем можно написать минимальное приложение (хоть в том же autoit или сразу на c++ если будет visual studio), отключающее контрол в принципе, что то типа такого (код как пример, способ поиска контрола может отличаться:
openai:gpt5.4 api
#include <MsgBoxConstants.au3>

; =========================
; Константы
; =========================
Global Const $MAIN_WINDOW_CLASS   = "MyMainWindowClass"
Global Const $MAIN_WINDOW_TITLE   = "Моё старое приложение"
Global Const $BUTTON_TEXT         = "OK"

; =========================
; Ищем главное окно
; =========================
Local $hWnd = WinGetHandle("[CLASS:" & $MAIN_WINDOW_CLASS & "]", $MAIN_WINDOW_TITLE)

If @error Or $hWnd = "" Then
    MsgBox($MB_ICONERROR, "Ошибка", "Главное окно не найдено")
    Exit
EndIf

; =========================
; Ищем дочерний контрол
; =========================
Local $hButton = ControlGetHandle($hWnd, "", $BUTTON_TEXT)

If @error Or $hButton = "" Then
    MsgBox($MB_ICONERROR, "Ошибка", "Кнопка не найдена")
    Exit
EndIf

; =========================
; Делаем кнопку disabled
; =========================
ControlDisable($hWnd, "", $hButton)

If @error Then
    MsgBox($MB_ICONERROR, "Ошибка", "Не удалось отключить кнопку")
    Exit
EndIf

MsgBox($MB_ICONINFORMATION, "Готово", "Кнопка отключена")

Почему лучше отключить? потому что отключенный контрол нельзя нажать не только мышкой но и с клавиатуры. Ну и скрипт нужно запускать только после запуска целевого приложения и держать запущенным постоянно не требуется.
Ответ написан
opium
@opium
Просто люблю качественно работать
AutoHotkey. Ограничь хук окном управления принтером, и блокируй конкретную зону:

#IfWinActive Print Management System
$LButton::
CoordMode, Mouse, Screen
MouseGetPos, x, y
if (x >= 500 && x <= 600 && y >= 50 && y <= 110)
    return
Click
#IfWinActive


Координаты Stop-кнопки — через Window Spy (в трее AHK). Название окна уточни там же.

p.s. если программа запущена от администратора, AHK тоже запускай от него, иначе перехват не сработает
Ответ написан
Комментировать
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
10 минут с claude code и кнопки поменяны местами. Переместил Stop в конец пропатчив PrintMon.exe
8384cf986fb2a288da7c5fa64ae0e9fc.jpg
ссылку на яндекс диск отправил в личку на хабре
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@maxscitech
Есть очень полезный софт ingsoft window scanner
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы