Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Передалать стандартный "InputBox" в анологичное "GUI-окно"

Ответить
Настройки темы
[решено] Передалать стандартный "InputBox" в анологичное "GUI-окно"

Аватара для sashadeg

Старожил


Сообщения: 379
Благодарности: 6

Профиль | Отправить PM | Цитировать


В стандартное окно "InputBox" нельзя вставить картинку...
Помогите пожалуйтста переделать обычный "InputBox" в анологичное "GUI-окно"...
На примере вот этого кода... Как вставить картинку я разобрался а как вставить полоску ввода информании понять не могу
Код: Выделить весь код
$1 = InputBox ("1234", "")
If @Error = 1 Then
    MsgBox(4096, "1234", "OK.  Bye!",1)
    Exit
EndIf
; функции
run("notepad.exe")
Sleep(1000)
Send($1)

Отправлено: 13:33, 04-04-2009

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


См. Custom_InputBox(), вставить там картинку, думаю будет несложно?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 14:07, 04-04-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для sashadeg

Старожил


Сообщения: 379
Благодарности: 6

Профиль | Отправить PM | Цитировать


Creat0R, там столько МНОГО всего!!!! И я по английски не понимаю Можешь дать конкретный код?
В окошке примерно вот что:
1. Немного текста (любого )
2. Полоска ввода текста ( типа как в InputBox)
3. Кнопка "Oк"
4. После нажатия "Ок" переменной $text присваивается текс который ввели в окошечке

Простите, но я нубик в AutoIt

Я скачал пример из ссылки которую ты дал, но он ошибку выкидывает на 5 строке

-------
Ну вы ребята даёте...


Отправлено: 14:18, 04-04-2009 | #3


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


ручной пример:
Код: Выделить весь код
#region: - Option
    Opt('GUIOnEventMode',       1)
    Opt('MustDeclareVars',      1)
    Opt('TrayIconDebug',        1)
    Opt('TrayIconHide',         0)
#endregion

#region: - Include
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
#endregion

#region: - Win Msg      Global
    Global  $hMsgWin
;~  Title, Width, Height, X, Y, Style, ExStyle
    Global  $sMsgWinTitle           = '1234'
    Global  $iMsgWinWidth           = 200
    Global  $iMsgWinHeight          = 93
    Global  $iMsgWinX               = -1
    Global  $iMsgWinY               = -1
    Global  $iMsgWinStyle           = $WS_CAPTION+$WS_SYSMENU
    Global  $iMsgWinExStyle         = -1
;~  Settings
    Global  $fMsgWinOnTop           = 0
;~  GUI Ctrl
    Global  $hsWinMsgText
#endregion

#region: - Win Msg      Function
Func _WinMsg_Create()
    $hMsgWin = GUICreate($sMsgWinTitle, $iMsgWinWidth, $iMsgWinHeight, $iMsgWinX, $iMsgWinY, $iMsgWinStyle, $iMsgWinExStyle)
        GUISetIcon('shell32.dll', -10)
            GUISetOnEvent($GUI_EVENT_CLOSE,     '_Pro_Exit')

    GUICtrlCreateGroup(' Введите текст: ', 5, 5, $iMsgWinWidth-10, $iMsgWinHeight-10)
    $hsWinMsgText = GUICtrlCreateInput('', 15, 25, $iMsgWinWidth-30, 20)

    GUICtrlCreateButton('OK', 14, 53, ($iMsgWinWidth-28-2)/2, 24)
        GUICtrlSetOnEvent(-1, '_WinMsg_OK')

    GUICtrlCreateButton('Отмена', 14+($iMsgWinWidth-28-2)/2+2, 53, ($iMsgWinWidth-28-2)/2, 24)
        GUICtrlSetOnEvent(-1, '_Pro_Exit')

    If $fMsgWinOnTop Then WinSetOnTop($hMsgWin, '', 1)
    GUISetState(@SW_SHOW, $hMsgWin)
EndFunc
Func _WinMsg_Close()
;~  GUIDelete($hMsgWin)
    _Pro_Exit()
EndFunc
Func _WinMsg_OK()
    Local $sText = GUICtrlRead($hsWinMsgText)
    If StringStripWS($sText, 8) == '' Then
        MsgBox(48, 'Ошибка!', 'Пожалуйста, введите текст')
        GUICtrlSetData($hsWinMsgText, '')
        GUICtrlSetState($hsWinMsgText, $GUI_FOCUS)
    Else
;~      MsgBox(64, 'OK', 'Отлично')
        _PutTextToNotepad($sText)
        _WinMsg_Close()
    EndIf
EndFunc
#endregion

#region: - After creating all GUI
    GUIRegisterMsg($WM_NCHITTEST,   'WM_NCHITTEST')

    _WinMsg_Create()
#endregion

#region: - Sleep, Exit
While 1
    Sleep(10)
WEnd

Func _Pro_Exit()
    Exit
EndFunc
#endregion

Func _PutTextToNotepad($sText)
    Local $iPid, $iHwd
    $iPid = Run('notepad.exe')
    While 1
        $iHwd = _ProcessGetWindow($iPid)
        If IsHWnd($iHwd) Then ExitLoop
    WEnd
    WinWait($iHwd)
    ControlSetText($iHwd, '', '[CLASS:Edit; INSTANCE:1]', $sText)
EndFunc

Func _ProcessGetWindow($iPID, $iRet=1)
    Local $aWinList = WinList()
    Local $aRet[2]

    If IsString($iPID) Then $iPID = ProcessExists($iPID)

    For $i = 1 To UBound($aWinList)-1
        If WinGetProcess($aWinList[$i][1]) = $iPID Then
            $aRet[0] = $aWinList[$i][0] ;Title
            $aRet[1] = $aWinList[$i][1] ;WinHandle

            If $iRet = 0 Then Return $aRet[0]
            If $iRet = 1 Then Return $aRet[1]

            Return $aRet
        EndIf
    Next

    Return SetError(1, 0, $aRet)
EndFunc

Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
    Local $iProc = DllCall('user32.dll', 'int', 'DefWindowProc', 'hwnd', $hWnd, 'int', $Msg, 'wparam', $wParam, 'lparam', $lParam)
    If $iProc[0] = $HTCLIENT Then Return $HTCAPTION
    Return $GUI_RUNDEFMSG
EndFunc

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:42, 04-04-2009 | #4


Аватара для sashadeg

Старожил


Сообщения: 379
Благодарности: 6

Профиль | Отправить PM | Цитировать


Это всё конечно хорошо... но вот такая команда у меня не работает: Send ($text)

-------
Ну вы ребята даёте...


Последний раз редактировалось sashadeg, 04-04-2009 в 15:51.


Отправлено: 15:37, 04-04-2009 | #5


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


Цитата:
Это всё конечно хорошо... но вот такая команда у меня не работает: Send ($text)
попробуйте
Код: Выделить весь код
ControlSetText($iHwd, '', '[CLASS:Edit; INSTANCE:1]', $sText)
- точно не промахнетесь с окном / полем ввода
- текст вставляется почти мнгновенно )

$iHwd - хэндл (указатель) окно / либо текст заголовка окна
Далее указывается текст, который присутствует в окне. Если $iHwd это хэндл окна, то с текстом можно не заморачиваться
[CLASS:Edit; INSTANCE:1] - id элемента, которому высылается текст. Можно узнать с помощью "..<папка установки>\AutoIt3\Au3Info.exe". Строчки Advanced (Class) или ClassnameNN
$sText - высылаемый текст элементу

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Отправлено: 20:10, 04-04-2009 | #6


Аватара для sashadeg

Старожил


Сообщения: 379
Благодарности: 6

Профиль | Отправить PM | Цитировать


А что Send($text) вообще ни как??? Просто мне это надо для Полноэкранного приложения... А там ID то не узнать... Да я и с этой командой привык работать...

-------
Ну вы ребята даёте...


Отправлено: 20:58, 04-04-2009 | #7


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


Цитата:
Полноэкранного приложения
если там обычное окно, от можно и у полноэкранного ))

Цитата sashadeg:
А что Send($text) вообще ни как??? »
почему же - можно. Проверьте, что высылаите имеено текст в этой переменной, а не ControlId элемента. Т.е.:
Код: Выделить весь код
;~ Если запись такая:
$hsWinMsgText = GUICtrlCreateInput('', 15, 25, $iMsgWinWidth-30, 20)

;~ То высылать нужно так:
Send(GUICtrlRead($hsWinMsgText))
+ есть полезности:
Код: Выделить весь код
Opt('SendKeyDelay', 1)
и флаги в Send:
Цитата:
Send ( "keys", [flag] )
flag: (опциональный) Режим обработки "клавиш клавиатуры":
flag = 0 (стандартный), текст содержит специальные символы (например +, или ! указывающие на совместное нажатие клавиш SHIFT, или ALT), которые следует симулировать.
flag = 1, выслать "неразобранный" набор нажатий.

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:14, 04-04-2009 | #8


Аватара для sashadeg

Старожил


Сообщения: 379
Благодарности: 6

Профиль | Отправить PM | Цитировать


Спасибо тебе за всё... но ты пишешь такие коды 0_о я же писал что я нубик Можешь конкретно написать код чтобы был точный прототип стандартного INPUTBOX'a ??? Просто у меня прога полностью готова, я хотел бы вставить пару картинок... А вы мне тут ТАКИЕ коды пишите

-------
Ну вы ребята даёте...


Отправлено: 21:40, 04-04-2009 | #9


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
#region: - Option
    Opt('MustDeclareVars',      1)
    Opt('TrayIconDebug',        1)
    Opt('TrayIconHide',         0)
#endregion

#region: - Include
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
#endregion

Local $sInputText

$sInputText = _MsgBox('Название окна #1 ', ' Введите текст:  ', 200, 93, -1, -1, -1)
Switch @error
    Case -1
        MsgBox(48, 'Выход  #1 ', 'Выход без ввода текст' & @CRLF & 'Код выхода: ' & @error)
    Case 0
        MsgBox(64, 'Введенный текст #1 ', $sInputText)
EndSwitch

;~ Или так: окно поверх всех
$sInputText = _MsgBox('Название окна #2 ', ' Введите текст:  ', 200, 93, -1, -1, -1, -1, 1)
If @error == -1 Then
    MsgBox(48, 'Выход  #2 ', 'Выход без ввода текст' & @CRLF & 'Код выхода: ' & @error)
Else
    MsgBox(64, 'Введенный текст #2  ', $sInputText)
EndIf

;~ Или так: окно поверх всех + другая иконка окна
$sInputText = _MsgBox('Название окна #3 ', ' Введите текст:  ', 200, 93, -1, -1, -1, -1, 1, -1, -45)
If @error == 0 Then MsgBox(64, 'Введенный текст  #3 ', $sInputText)

#region: - _MsgBox
; #FUNCTION# ====================================================================================================================
; Name...........:  _MsgBox
; Description ...:  Окно типа MsgBox со строкой ввода текса и кнопками Ok, Отмена
; Syntax.........:  _MsgBox($sTitle, $sText, $iWidth, $iHeight, $iX, $iY [, $iStyle=13107200] [, $iExStyle=-1] [, $fOnTop=0] [, $sIconPath='shell32.dll'] [, $iIconId=-1])
; Parameters ....:  $sTitle      - Название кона
;~                  $sText       - Текст сообщения
;~                  $iWidth      - Ширна окна
;~                  $iHeight     - Высота окна
;~                  $iX          - Позиция окна по Х
;~                  $iY          - Позиция окна по У
;~                  $iStyle      - Стиль окна
;~                  $iExStyle    - Расширенный стиль окна
;~                  $fOnTop      - Установка окна поверех всех окон
;~                  $sIconPath   - Путь к файлу/dll иконки окна
;~                  $iIconId     - Id иконки
; Return values .:  Success      - Введенный текст. @error = 0
;                   Failure      - -1 закрытие окна без ввода текста. @error = -1
; Author ........: `p r o x y (icq 729406)
; ===============================================================================================================================
Func _MsgBox($sTitle, $sText, $iWidth, $iHeight, $iX, $iY, $iStyle=13107200, $iExStyle=-1, $fOnTop=0, $sIconPath='shell32.dll', $iIconId=-222)
    Local $fGUIOnEventMode = Opt('GUIOnEventMode')
    Opt('GUIOnEventMode', 0)

    If $iStyle == -1 Then $iStyle = 13107200
    Local   $hMsgBox = GUICreate($sTitle, $iWidth, $iHeight, $iX, $iY, $iStyle, $iExStyle)
                If $sIconPath = -1 Then $sIconPath = 'shell32.dll'
                GUISetIcon($sIconPath, $iIconId)

    GUICtrlCreateGroup($sText, 5, 5, $iWidth-10, $iHeight-10)
    Local   $hsMsgBoxText = GUICtrlCreateInput('', 15, 25, $iWidth-30, 20)
    Local   $hMsgBoxOK = GUICtrlCreateButton('OK', 14, 53, ($iWidth-28-2)/2, 24)
    Local   $hMsgBoxCancel = GUICtrlCreateButton('Отмена', 14+($iWidth-28-2)/2+2, 53, ($iWidth-28-2)/2, 24)

    If $fOnTop Then WinSetOnTop($hMsgBox, '', 1)
    GUIRegisterMsg($WM_NCHITTEST,   'WM_NCHITTEST')
    GUISetState(@SW_SHOW, $hMsgBox)

    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                GUIDelete($hMsgBox)
                Opt('GUIOnEventMode', $fGUIOnEventMode)
                GUIRegisterMsg($WM_NCHITTEST, '')
                Return SetError(-1)

            Case $hMsgBoxCancel
                GUIDelete($hMsgBox)
                Opt('GUIOnEventMode', $fGUIOnEventMode)
                GUIRegisterMsg($WM_NCHITTEST, '')
                Return SetError(-1)

            Case $hMsgBoxOK
                Local $sMsgBoxText = GUICtrlRead($hsMsgBoxText)
                If StringStripWS($sMsgBoxText, 8) == '' Then
                    MsgBox(48, 'Ошибка!', 'Пожалуйста, введите текст')
                    GUICtrlSetData($hsMsgBoxText, '')
                    GUICtrlSetState($hsMsgBoxText, $GUI_FOCUS)
                Else
                    GUIDelete($hMsgBox)
                    SetError(0)
                    Opt('GUIOnEventMode', $fGUIOnEventMode)
                    GUIRegisterMsg($WM_NCHITTEST, '')
                    Return $sMsgBoxText
                EndIf
        EndSwitch
    WEnd
EndFunc
Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
    Local $iProc = DllCall('user32.dll', 'int', 'DefWindowProc', 'hwnd', $hWnd, 'int', $Msg, 'wparam', $wParam, 'lparam', $lParam)
    If $iProc[0] = $HTCLIENT Then Return $HTCAPTION
    Return $GUI_RUNDEFMSG
EndFunc;==>_MsgBox
#endregion

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Последний раз редактировалось proxy, 04-04-2009 в 23:25.


Отправлено: 22:50, 04-04-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Передалать стандартный "InputBox" в анологичное "GUI-окно"

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] Как удалить папку "Моя музыка","Мои Картинки", "Мое видео"? verdix Microsoft Windows 2000/XP 3 03-10-2009 23:46
[решено] Нужна помощь с StringRegExpReplace ( "test", "PATTERN-ом", "\1"). ikif AutoIt 6 28-07-2009 20:06
Debian/Ubuntu - [решено] Пропали кнопки "свернуть","закрыть","во весь екран" в папках Alex.sys Общий по Linux 5 02-04-2009 11:13
Не получается найти все выпуски "Хакер"+"спец"+"железо" verdix Хочу все знать 5 29-11-2008 15:19
Запретить/удалить пункт "Programs" ("Программы") из меню кнопки "Start" ("Пуск") submaster Microsoft Windows NT/2000/2003 5 13-09-2006 12:29




 
Переход