Автор Тема: [Окна, Диалоги] Заблокировать окно  (Прочитано 2235 раз)

0 Пользователей и 1 Гость просматривают эту тему.

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

Оффлайн Крепыш [?]

  • Новичок
  • *
  • Сообщений: 105
  • Репутация: 1
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
запрещает доступ к окну. При этом его также нельзя закрыть стандартным образом. Можно ли как-то сделать, чтобы окно реагировало на Alt+F4 или крестик?

Русское сообщество AutoIt

[Окна, Диалоги] Заблокировать окно
« Отправлен: Февраль 08, 2016, 01:18:41 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8013
  • Репутация: 2304
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: [Окна, Диалоги] Заблокировать окно
« Ответ #1, Отправлен: Февраль 08, 2016, 04:49:07 »
Крепыш  [?]
Цитировать
запрещает доступ к окну
Наоборот.

Можно попробовать так:

Код: AutoIt [Выделить]
#include <WinAPIEx.au3>

$hWindow = WinGetHandle('[ACTIVE]')
_WindowEnable($hWindow, False)

Sleep(5000)

_WindowEnable($hWindow, True)

Func _WindowEnable($hWnd, $bEnable)
    Local $aChilds = _WinAPI_EnumChildWindows($hWnd)
   
    For $i = 1 To $aChilds[0][0]
        _WinAPI_EnableWindow($aChilds[$i][0], $bEnable)
    Next
EndFunc


но это не защитит от доступа к меню.


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8013
  • Репутация: 2304
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: [Окна, Диалоги] Заблокировать окно
« Ответ #2, Отправлен: Февраль 08, 2016, 05:07:40 »
Ещё вариант:

Код: AutoIt [Выделить]
#include <WindowsConstants.au3>
#include <WinAPI.au3>

$hWindow = WinGetHandle('[ACTIVE]')

$hEnable = _WinEnable($hWindow, False)

Sleep(5000)

_WinEnable($hEnable, True)

Func _WinEnable($hWnd, $bEnable = True)
    If $bEnable Then
        GUIDelete($hWnd)
        Return
    EndIf
   
    Local $aWinPos = WinGetPos($hWnd)
    Local $aWinCSize = WinGetClientSize($hWnd)
    Local $hGUI = GUICreate('', $aWinCSize[0], $aWinCSize[1], 0, 0, $WS_POPUP, -1, $hWnd)
   
    WinSetTrans($hGUI, '', 254)
    GUISetState(@SW_DISABLE, $hGUI)
    GUISetState(@SW_SHOWNOACTIVATE, $hGUI)
    _WinAPI_SetParent($hGUI, $hWnd)
   
    Return $hGUI
EndFunc


Оффлайн Крепыш [?]

  • Новичок
  • *
  • Сообщений: 105

  • Автор темы
  • Репутация: 1
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Окна, Диалоги] Заблокировать окно
« Ответ #3, Отправлен: Февраль 08, 2016, 10:25:40 »
CreatoR,
спасибо за варианты, но меню и горячие клавиши также необходимо заблокировать.

Русское сообщество AutoIt

Re: [Окна, Диалоги] Заблокировать окно
« Ответ #3 Отправлен: Февраль 08, 2016, 10:25:40 »

Помечен как лучший ответ пользователем Крепыш Отправлен Февраль 09, 2016, 09:46:52

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8013
  • Репутация: 2304
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: [Окна, Диалоги] Заблокировать окно
« Ответ #4, Отправлен: Февраль 08, 2016, 13:37:14 »
Как то так:

Код: AutoIt [Выделить]
#include <GUIMenu.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>

$hWindow = WinGetHandle('[ACTIVE]')

$hEnable = _WinEnable($hWindow, False)

Sleep(5000)

_WinEnable($hWindow, $hEnable)

Func _WinEnable($hWnd, $bEnable = True)
    If $bEnable Then
        GUIDelete($bEnable)
    EndIf
   
    $hMenu = _GUICtrlMenu_GetMenu($hWnd)
    $iItems = _GUICtrlMenu_GetItemCount($hMenu)
   
    For $i = 0 To $iItems - 1
        _GUICtrlMenu_EnableMenuItem($hMenu, $i, ($bEnable ? 0 : 2))
    Next
   
    If $bEnable Then
        Return
    EndIf
   
    Local $aWinPos = WinGetPos($hWnd)
    Local $aWinCSize = WinGetClientSize($hWnd)
   
    Local $hGUI = GUICreate('', $aWinCSize[0], $aWinCSize[1], 0, 0, $WS_POPUP, -1, $hWnd)
   
    _WinAPI_SetParent($hGUI, $hWnd)
    WinSetTrans($hGUI, '', 254)
    GUISetState(@SW_DISABLE, $hGUI)
    GUISetState(@SW_SHOWNOACTIVATE, $hGUI)
   
    Return $hGUI
EndFunc


Alofa

  • Гость
Re: [Окна, Диалоги] Заблокировать окно
« Ответ #5, Отправлен: Февраль 09, 2016, 00:20:24 »
... чтобы окно реагировало на Alt+F4 ...
Пример с окном штатного калькулятора:
(как вариант)
(нажмите для показа/скрытия)
« Последнее редактирование: Февраль 09, 2016, 01:39:20 от Alofa »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8013
  • Репутация: 2304
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: [Окна, Диалоги] Заблокировать окно
« Ответ #6, Отправлен: Февраль 09, 2016, 04:55:37 »
Alofa  [?]
Цитировать
Пример с окном штатного калькулятора
С г.клавишами всё понятно, а как быть с кнопками в заголовке?

Alofa

  • Гость
Re: [Окна, Диалоги] Заблокировать окно
« Ответ #7, Отправлен: Февраль 09, 2016, 08:38:29 »
OffTopicCreatoR ваш пример без сомненья круче (серьезно).
... а как быть с кнопками в заголовке?
Вот и я думаю?.. Поэтому выложил как есть.

Русское сообщество AutoIt

Re: [Окна, Диалоги] Заблокировать окно
« Ответ #7 Отправлен: Февраль 09, 2016, 08:38:29 »

Оффлайн Крепыш [?]

  • Новичок
  • *
  • Сообщений: 105

  • Автор темы
  • Репутация: 1
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Окна, Диалоги] Заблокировать окно
« Ответ #8, Отправлен: Февраль 09, 2016, 09:52:16 »
CreatoR,
интересное решение. Спасибо.
« Последнее редактирование: Февраль 09, 2016, 10:13:36 от Крепыш »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4069
  • Репутация: 1078
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Окна, Диалоги] Заблокировать окно
« Ответ #9, Отправлен: Февраль 09, 2016, 12:04:43 »
Заблокированное окно блокнота можно закрыть по Alt+F4 и кликом по кнопке "Закрыть"
Код: AutoIt [Выделить]
#include <UIAutomate.au3>
#include <Misc.au3>
#include <WinAPI.au3>

Opt("WinWaitDelay", 50)

If Not WinExists("[class:Notepad]") Then Run("Notepad.exe")
$hWnd = WinWait("[class:Notepad]")

WinSetState($hWnd, "", @SW_DISABLE)

While Sleep(10)
  If _IsPressed("01") Then
    $tPos = _WinAPI_GetMousePos()
    If _WinAPI_WindowFromPoint($tPos) = $hWnd Then WinActivate($hWnd)
    $oElement = _UIA_GetElementFromPoint($tPos.X, $tPos.Y)
    If Not @error Then
      If  _UIA_ElementGetPropertyValue($oElement, "ControlType") = $UIA_ButtonControlTypeId _
      And _UIA_ElementGetPropertyValue($oElement, "Name") = "Закрыть" _
      And _UIA_ElementGetPropertyValue(_UIA_ElementGetParent(_UIA_ElementGetParent($oElement)), "NativeWindowHandle") = $hWnd Then
        WinClose($hWnd)
        Exit
      EndIf
    EndIf
  EndIf
  If _IsPressed("12") And _IsPressed("73") And WinGetHandle("[active]") = $hWnd Then
    WinClose($hWnd)
    Exit
  EndIf
WEnd

« Последнее редактирование: Февраль 09, 2016, 13:24:39 от InnI »

Оффлайн SharkyEXE [?]

  • Новичок
  • *
  • Сообщений: 82
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Окна, Диалоги] Заблокировать окно
« Ответ #10, Отправлен: Апрель 14, 2019, 16:10:50 »
Всем здравствуйте.

Пожалуйста, помогите, как в этом примере http://autoit-script.ru/index.php?topic=21744.msg127724#msg127724 добавить возможность сворачивания окна, т. е. разрешить нажатие на кнопку "Свернуть"

Спасибо.
Скорблю и помню.


Русское сообщество AutoIt

Re: [Окна, Диалоги] Заблокировать окно
« Ответ #10 Отправлен: Апрель 14, 2019, 16:10:50 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
8 Ответов
3376 Просмотров
Последний ответ Апрель 23, 2010, 23:40:23
от CreatoR
5 Ответов
3394 Просмотров
Последний ответ Сентябрь 05, 2011, 21:57:27
от sasha-ld
1 Ответов
3154 Просмотров
Последний ответ Сентябрь 06, 2012, 20:39:22
от Zaramot
3 Ответов
1225 Просмотров
Последний ответ Июнь 25, 2014, 09:16:52
от CreatoR
9 Ответов
2645 Просмотров
Последний ответ Сентябрь 04, 2014, 16:03:13
от oesoes
3 Ответов
1019 Просмотров
Последний ответ Ноябрь 11, 2014, 16:13:52
от firex
6 Ответов
1342 Просмотров
Последний ответ Август 28, 2015, 20:00:17
от sokolovska
1 Ответов
1603 Просмотров
Последний ответ Ноябрь 12, 2015, 15:47:30
от Medic84
2 Ответов
1038 Просмотров
Последний ответ Сентябрь 14, 2016, 14:49:25
от babanty
3 Ответов
1393 Просмотров
Последний ответ Март 01, 2017, 07:39:13
от reset86