Автор Тема: Встраивание окна внешнего приложения в интерфейс GUI  (Прочитано 484 раз)

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

Оффлайн mv6677 [?]

  • Новичок
  • *
  • Сообщений: 81
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Приветствую всех.
Хочу задать вопрос насчет интерфейса.
Я где-то слышал, что в AutoIt'е можно встроить окна внешних приложений - в интерфейс.
И это удобно - эти несколько собранных в одном интерфейсе окон программ будут отображаться под одним ярлыком на панели задач, их можно разом закрыть, перетащить, свернуть и т.д.

Как создать такой составной интерфейс (кажется он называется GUI), в который было бы встроено два блокнота и калькулятор ?

Под двумя блокнотами имеются ввиду файлы 1.txt и 2.txt (в одной папке со скриптом), а под калькулятором - программа Calc.exe
( В общем скрипт просто открывает эти программы - так, что они отображаются - внутри GUI )



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


Помечен как лучший ответ пользователем mv6677 Отправлен Октябрь 22, 2018, 18:49:21

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0
Вот простой пример. Доработайте под свои нужды
Код: AutoIt [Выделить]
#include <WinAPISysWin.au3>

$hGUI = GUICreate("MultiProg", 800, 600, -1, -1, 0x00CF0000) ; $WS_OVERLAPPEDWINDOW
GUISetState()

Run("notepad.exe " & @ScriptDir & "\1.txt")
$hWnd1 = WinWaitActive("[class:Notepad]")
_WinAPI_SetParent($hWnd1, $hGUI)
WinMove($hWnd1, "", 0, 0, 400, 300)
$OldPos1 = WinGetPos($hWnd1)

Run("notepad.exe " & @ScriptDir & "\2.txt")
$hWnd2 = WinWaitActive("[class:Notepad]")
_WinAPI_SetParent($hWnd2, $hGUI)
WinMove($hWnd2, "", 0, 300, 400, 300)
$OldPos2 = WinGetPos($hWnd2)

Run("calc.exe")
$hWnd3 = WinWaitActive("Калькулятор")
_WinAPI_SetParent($hWnd3, $hGUI)
WinMove($hWnd3, "", 400, 0)
$OldPos3 = WinGetPos($hWnd3)

$OldActive = 0
AdlibRegister("Refresh")

Do
Until GUIGetMsg() = -3

Func Refresh()
  $NewActive = WinGetHandle("")
  If $NewActive <> $OldActive Then
    _WinAPI_InvalidateRect($hGUI)
    $OldActive = $NewActive
    Return
  EndIf
  $NewPos1 = WinGetPos($hWnd1)
  For $i = 0 To 3
    If $NewPos1[$i] <> $OldPos1[$i] Then
      _WinAPI_InvalidateRect($hGUI)
      $OldPos1 = $NewPos1
      Return
    EndIf
  Next
  $NewPos2 = WinGetPos($hWnd2)
  For $i = 0 To 3
    If $NewPos2[$i] <> $OldPos2[$i] Then
      _WinAPI_InvalidateRect($hGUI)
      $OldPos2 = $NewPos2
      Return
    EndIf
  Next
  $NewPos3 = WinGetPos($hWnd3)
  For $i = 0 To 3
    If $NewPos3[$i] <> $OldPos3[$i] Then
      _WinAPI_InvalidateRect($hGUI)
      $OldPos3 = $NewPos3
      Return
    EndIf
  Next
EndFunc


Онлайн xXx [?]

  • Новичок
  • *
  • Сообщений: 31
  • Репутация: 8
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Код: AutoIt [Выделить]
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
       
Opt('WinTitleMatchMode', 2)
Global $aOpen[3][2] = [[@ScriptDir & '\1.txt', '[TITLE:1.txt]'], _
        [@ScriptDir & '\2.txt', '[TITLE:2.txt]'], _
        [@SystemDir & '\calc.exe', '[TITLE:Калькулятор]']]
       
Global $hGUI = GUICreate('', -1, -1, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPCHILDREN), $WS_EX_CLIENTEDGE)

For $i = 0 To UBound($aOpen) - 1
    If ShellExecute($aOpen[$i][0], '', '', $SHEX_OPEN, @SW_HIDE) Then
        $hWnd = WinWait($aOpen[$i][1], '', 2)
        If $hWnd Then
            $aOpen[$i][1] = $hWnd
            _WinAPI_SetParent($hWnd, $hGUI)
        EndIf
    Else
        $aOpen[$i][1] = ''
    EndIf
Next

GUISetState(@SW_MAXIMIZE)

For $i = 0 To UBound($aOpen) - 1
    If $aOpen[$i][1] Then WinSetState($aOpen[$i][1], '', @SW_SHOW)
Next

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
WEnd

« Последнее редактирование: Октябрь 22, 2018, 19:13:32 от xXx »

Оффлайн mv6677 [?]

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

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
xXx , ваш скрипт не работает.
Появляется пустое окно GUI, на котором ничего не отображается.


Добавлено: Октябрь 21, 2018, 18:01:06
InnI , ваш код не работает.

Выдает сообщение об ошибке:
"Error: Error opening the file."

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

Re: Встраивание окна внешнего приложения в интерфейс GUI
« Ответ #3 Отправлен: Октябрь 21, 2018, 17:57:38 »

Оффлайн mv6677 [?]

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

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
xXx, у меня файлы 1.txt и 2.txt - тоже лежат в одной папке со скриптом.

Тем не менее - оба кода не работают.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0
mv6677  [?]
Цитировать
оба кода не работают
Пичалька :(

Цитировать
у меня файлы 1.txt и 2.txt - тоже лежат в одной папке со скриптом
И почему я вам не верю? :think:

Оффлайн mv6677 [?]

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

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Цитировать
И почему я вам не верю?

Я вас не обманываю.

Вот скриншот из тотал коммандера.
На нем видно, что оба файла txt - лежат рядом со скриптом au3



Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0
mv6677
Попробуйте без файлов
Код: AutoIt [Выделить]
Run("notepad.exe")


Посмотрите, находит ли AutoIt файл
Код: AutoIt [Выделить]
MsgBox(0, "", FileExists(@ScriptDir & "\1.txt"))


Цитировать
Выдает сообщение об ошибке:"Error: Error opening the file."
Это сообщение блокнота? Если да, то это проблемы блокнота, а не скрипта.

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

Re: Встраивание окна внешнего приложения в интерфейс GUI
« Ответ #7 Отправлен: Октябрь 22, 2018, 12:44:59 »

Оффлайн mv6677 [?]

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

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
InnI ,
Код: AutoIt [Выделить]
Run("notepad.exe")

Открывает блокнот с названием окна "Безымянный - Блокнот".

Код: AutoIt [Выделить]
MsgBox(0, "", FileExists(@ScriptDir & "\1.txt"))

Выдает окошко с сообщением "1" (Все сообщение - это одна цифра "1")

Выдает сообщение об ошибке:"Error: Error opening the file." - сам AutoIt, а не блокнот.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0
mv6677  [?]
Цитировать
Открывает блокнот с названием окна "Безымянный - Блокнот".
Я имел в виду не запустить эту строчку, а заменить в скрипте строки, запускающие блокнот с файлом, на просто запуск блокнота.

Цитировать
сообщение об ошибке:"Error: Error opening the file." - сам AutoIt
Но в моём скрипте нет функций работы с файлами.
Или вы хотите сказать, что AutoIt не может открыть файл скрипта?

Оффлайн mv6677 [?]

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

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Вот какую ошибку выдает:



Это в коде InnI такая ошибка появляется
« Последнее редактирование: Октябрь 22, 2018, 18:31:23 от mv6677 »

Онлайн xXx [?]

  • Новичок
  • *
  • Сообщений: 31
  • Репутация: 8
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Вот какую ошибку выдает:
Но тут же ясно написано:
Строка 1 файла "2.au3"
#include <WinAPISysWin.au3> (<= Вот так она выглядит)
Ошибка: Не могу такой файл открыть
Потому как найти не может такой файл, потому как у вас версия AutoIt 3.3.14.0, а не v3.3.14.5 (как в справке).
Код: AutoIt [Выделить]
;#include <WinAPISysWin.au3> ; Замените это
#include <WinAPI.au3> ; На это


P.s: интересно, а почему же мой-то не работает?
Изменил скрипт
« Последнее редактирование: Октябрь 22, 2018, 19:15:00 от xXx »

Оффлайн mv6677 [?]

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

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Цитировать
<WinAPI.au3>

Да.
Вот теперь в коде Inni - все заработало.
А ваш код по-прежнему выдает пустое белое окно.

В общем всем большое спасибо за ответы.



Онлайн xXx [?]

  • Новичок
  • *
  • Сообщений: 31
  • Репутация: 8
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
выдает пустое белое окно.
Почему белое?

А если так?
(нажмите для показа/скрытия)

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

Re: Встраивание окна внешнего приложения в интерфейс GUI
« Ответ #13 Отправлен: Октябрь 23, 2018, 12:59:32 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
0 Ответов
3591 Просмотров
Последний ответ Октябрь 27, 2009, 12:48:17
от VitAl2013
15 Ответов
9530 Просмотров
Последний ответ Февраль 24, 2010, 19:27:11
от snoitaleR
2 Ответов
1221 Просмотров
Последний ответ Июль 21, 2014, 22:30:05
от royalfint
4 Ответов
1421 Просмотров
Последний ответ Март 08, 2015, 15:15:37
от Core2Duo76
0 Ответов
808 Просмотров
Последний ответ Июль 05, 2016, 11:19:04
от BunnyQueen
0 Ответов
415 Просмотров
Последний ответ Май 25, 2017, 12:02:24
от musicstashall
2 Ответов
583 Просмотров
Последний ответ Май 26, 2017, 22:04:05
от Alofa
5 Ответов
390 Просмотров
Последний ответ Май 07, 2018, 17:55:53
от DeyDi
2 Ответов
842 Просмотров
Последний ответ Май 09, 2018, 17:26:38
от evgrogoz
5 Ответов
179 Просмотров
Последний ответ Ноябрь 02, 2018, 00:14:49
от xXx