Закрыть msgbox в Autohotkey? - PullRequest
       8

Закрыть msgbox в Autohotkey?

0 голосов
/ 03 апреля 2020

У меня есть скрипт Autohotkey, который отображает msgbox и всегда находится сверху (очень важно иметь это). Я бы хотел, чтобы окно msgbox было закрыто ТОЛЬКО в следующих двух условиях:

  1. Я вручную закрываю его.
  2. Когда определенное окно c закрыто, закройте окно msgbox.

Вот основная часть кода, который у меня сейчас есть:

    msgbox,262144,TimesheetBlah,% list "`n" "`n" list2

    clipboard := listCopy

    WinActivate,Manage: Time Entry
    WinShow, Manage: Time Entry
    WinWait, Manage: Time Entry
    WinWaitClose  ; Wait for the exact window found by WinWait to be closed.
    ControlClick, Button1, TimesheetBlah // This should close the msgbox, but it doesn't

    if WinExist("*TimesheetBlah*"){
        WinClose ; use the window found above // This doesn't close the msgbox either

Как мне этого добиться?

Ответы [ 2 ]

2 голосов
/ 03 апреля 2020

Это должно работать

WinShow, Manage: Time Entry
WinWait, Manage: Time Entry
WinActivate,Manage: Time Entry

SetTimer, CloseMsgBox, -1000    ; run only once
msgbox,262144,TimesheetBlah,% list "`n" "`n" list2

CloseMsgBox:
    WinWaitClose, Manage: Time Entry
    WinClose, TimesheetBlah ahk_class #32770
Return

, поскольку поток таймера может прерывать другие потоки (в данном случае поток msgbox).

0 голосов
/ 03 апреля 2020

Вы приостанавливаете этот поток, отображая MsgBox. Выполнение кода будет продолжаться только после того, как вы закроете MsgBox.
Вы либо захотите создать свой собственный gui, который будет похож на окно сообщения, либо запустить окно сообщения в отдельном потоке.

Запуск в отдельном потоке, кажется, уже продемонстрирован в другом ответе, поэтому здесь создается ваше собственное GUI:

Gui, +AlwaysOnTop +ToolWindow ;see docs for description of options
Gui, Add, Text, y20, Hi!
Gui, Add, Button, x96 y63 w75 h23 gGuiClose, OK ;go-label 
Gui, Show, Center w181 h91, NiceTitleForOurMsgBox

WinActivate, Untitled - Notepad
WinShow ;can use the last found window, though this command is doing nothing for us(?)
WinWait, Untitled - Notepad
WinWaitClose, Untitled - Notepad
WinClose, NiceTitleForOurMsgBox
;Sure, we could also control click, but lets not.
;ControlClick, Button1, NiceTitleForOurMsgBox
Return

;runs automatically when the gui is closed,
;or also runs from the OK button (via g-label)
GuiClose()
{
    ExitApp
}

Я сделал gui чем-то похожим окно сообщения. Конечно, его можно настроить в дальнейшем, чтобы оно выглядело точно как окно сообщения, но я предполагаю, что это не главное.
Я предполагаю, что вы просто пытаетесь постоянно отображать некоторую информацию на экране.
И т. Ч., Я бы не сказал, что окно сообщений действительно предназначено для этого.

Так что, возможно, стоит заглянуть в графический интерфейс, откроет еще много других возможностей.
Например, может быть, вы захотите сделать свой gui фактическим полупрозрачным оверлеем с переходом по клику вместо какого-то окна с кнопкой ОК.

...