Автор Тема: MsgBox() без остановки кода и с возвращением результата  (Прочитано 4640 раз)

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

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Я тут подумал, а почему бы это не сделать так:

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

$PID = Run(@AutoItExe & ' /AutoIt3ExecuteLine "Exit MsgBox(51, ''Message'', ''Simple text.'')"')
$hProcess = _WinAPI_OpenProcess(0x0400, 0, $PID)

While 1
    $Code = _WinAPI_GetExitCodeProcess($hProcess)
    Switch $Code
        Case 259 ; STILL_ACTIVE

        Case Else
            Switch $Code
                Case 2
                    MsgBox(64, '', 'You presed Cancel button.')
                Case 6
                    MsgBox(64, '', 'You presed Yes button.')
                Case 7
                    MsgBox(64, '', 'You presed No button.')
            EndSwitch
            ExitLoop
    EndSwitch
WEnd

_WinAPI_CloseHandle($hProcess)



Думай, прежде чем говорить.

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


Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827
  • Репутация: 2287
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Интересный способ, но зачем так сложно:

Код: AutoIt [Выделить]
$PID = Run(@AutoItExe & ' /AutoIt3ExecuteLine "ConsoleWriteError(MsgBox(51, ''Message'', ''Simple text.''))"', '', '', 4)

$sRead = ""

While ProcessExists($PID)
    $sRead &= StderrRead($PID)
    If @error Then ExitLoop
   
    Sleep(10)
WEnd

MsgBox(64, 'Results', $sRead)



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


AutoIt is simple, subtle, elegant.


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


Мои работы

Оффлайн Sky-WaLkeR [?]

  • Продвинутый
  • ***
  • Сообщений: 332
  • Репутация: 95
  • Пол: Мужской
    • Naboko
    • Награды
  • Версия AutoIt: 3.3.12.0
А вот и вариант от меня с использованием Adlib
Код: AutoIt [Выделить]
Global $msg, $complete

AdlibRegister('Msg',1)

Do
until $complete=0

While 1
    Switch $msg
      Case 2
            MsgBox(64, '', 'You presed Cancel button.')
         Exit
        Case 6
            MsgBox(64, '', 'You presed Yes button.')
         Exit
        Case 7
            MsgBox(64, '', 'You presed No button.')
         Exit
   EndSwitch
WEnd

Func Msg()
   AdlibUnregister('Msg')
   $msg=MsgBox(51,'Message','Simple text')
   $complete=1
EndFunc
 

Скрипт нерабочий
« Последнее редактирование: Май 18, 2011, 10:44:12 от Sky-WaLkeR »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827
  • Репутация: 2287
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Sky-WaLkeR  [?]
Цитировать
вот и вариант от меня с использованием Adlib
Вариант нерабочий, поставь ConsoleWrite("Looping..." & @LF) в цикл и увидишь что скрипт останавливает своё выполнение.

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

Re: MsgBox() без остановки кода и с возвращением результата
« Ответ #3 Отправлен: Май 18, 2011, 08:29:46 »

Оффлайн Sky-WaLkeR [?]

  • Продвинутый
  • ***
  • Сообщений: 332
  • Репутация: 95
  • Пол: Мужской
    • Naboko
    • Награды
  • Версия AutoIt: 3.3.12.0
Точно... Извиняюсь, скрипт действительно нерабочий, не заметил.

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827
  • Репутация: 2287
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Вариант с функциями:

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

$hMsgBox = _MsgBox_Create(BitOR($MB_ICONQUESTION, $MB_YESNOCANCEL), 'Title', 'Text', 3)

Do
    $iCode = _MsgBox_GetCode($hMsgBox)
Until $iCode <> 259 ;STILL_ACTIVE

Switch $iCode
    Case $IDCANCEL
        MsgBox(64, '', 'You presed Cancel button.')
    Case $IDYES
        MsgBox(64, '', 'You presed Yes button.')
    Case $IDNO
        MsgBox(64, '', 'You presed No button.')
    Case $IDTIMEOUT, 4294967295
        MsgBox(64, '', 'MsgBox timed out.')
EndSwitch

_MsgBox_Close($hMsgBox)

Func _MsgBox_Create($iFlags, $sTitle, $sText, $iTimeout = 0, $hWnd = 0)
    Local $iPID = Run(@AutoItExe & ' /AutoIt3ExecuteLine "Exit MsgBox(' & $iFlags & ', ''' & $sTitle & ''', ''' & $sText & ''', ' & $iTimeout & ', ' & $hWnd & ')"')
    Return _WinAPI_OpenProcess(0x0400, 0, $iPID)
EndFunc

Func _MsgBox_Close($hMsgBox)
    Return _WinAPI_CloseHandle($hMsgBox)
EndFunc

Func _MsgBox_GetCode($hMsgBox)
    Return _WinAPI_GetExitCodeProcess($hMsgBox)
EndFunc


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

Re: MsgBox() без остановки кода и с возвращением результата
« Ответ #5 Отправлен: Июль 11, 2014, 16:28:38 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
0 Ответов
1365 Просмотров
Последний ответ Февраль 26, 2014, 18:41:52
от StarWash
21 Ответов
6390 Просмотров
Последний ответ Июль 14, 2014, 13:58:46
от CreatoR
5 Ответов
2227 Просмотров
Последний ответ Август 16, 2015, 23:41:20
от alex33
4 Ответов
1639 Просмотров
Последний ответ Август 23, 2015, 13:15:19
от Kasper
0 Ответов
490 Просмотров
Последний ответ Август 23, 2015, 12:06:11
от madmasles
6 Ответов
1819 Просмотров
Последний ответ Март 17, 2016, 13:15:10
от Maksus
3 Ответов
1740 Просмотров
Последний ответ Апрель 03, 2016, 01:55:17
от Vadim88
6 Ответов
1958 Просмотров
Последний ответ Август 23, 2016, 21:50:54
от ra4o
8 Ответов
752 Просмотров
Последний ответ Ноябрь 23, 2017, 15:58:31
от БлагоѨръ
4 Ответов
301 Просмотров
Последний ответ Февраль 07, 2018, 11:47:49
от Werwolfik