Что нового

Как встроить окно Excel - в окно autoit-интерфейса

Ragn

Новичок
Сообщения
48
Репутация
0
Добрый день.
Помогите решить вопрос.

Как при помощи скрипта autoit - встроить в окно (окно создано GUI) - программу Excel ?
Вопрос в том, что окно Excel программы - должно вписываться внутрь окна GUI.
Окно эксель открыто и его Title, включает слово "Книга1 -"

Нашел на форуме - вот такой код:
Код:
;#include <WinAPISysWin.au3>
#include <WinAPI.au3>

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


$hWnd3 = WinWaitActive("Книга1 -")
_WinAPI_SetParent($hWnd3, $hGUI)
WinMove($hWnd3, "", 400, 0)
$OldPos3 = WinGetPos($hWnd3)

$OldActive = 0
AdlibRegister("Refresh")

$Flag=True

Do
    sleep(200)
    If WinExists("2.txt — Блокнот") And $Flag Then Refresh_2()
Until GUIGetMsg() = -3

Func Refresh_2()
$Flag=False
$hWnd2 = WinActive("2.txt — Блокнот")
_WinAPI_SetParent($hWnd2, $hGUI)
WinMove($hWnd2, "", 0, 300, 400, 300)
$OldPos2 = WinGetPos($hWnd2)
  $NewPos2 = WinGetPos($hWnd2)
  For $i = 0 To 3
    If $NewPos2[$i] <> $OldPos2[$i] Then
      _WinAPI_InvalidateRect($hGUI)
      $OldPos2 = $NewPos2
      Return
    EndIf
  Next
EndFunc

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

  $NewPos3 = WinGetPos($hWnd3)
  For $i = 0 To 3
    If $NewPos3[$i] <> $OldPos3[$i] Then
      _WinAPI_InvalidateRect($hGUI)
      $OldPos3 = $NewPos3
      Return
    EndIf
  Next
EndFunc

Но он почему-то не хочет работать, при выделении окна Excel - самопроизвольно закрывается.
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
Запустите скрипт и активируйте окно Excel.
Проверил на Excel 2010: зелёное меню "Файл" не нажимается, остальное, вроде, работает
Код:
$hGUI = GUICreate("Excel", 1000, 800)
$hWnd = WinWaitActive("[Class:XLMAIN]")
DllCall("user32.dll", "hwnd", "SetParent", "hwnd", $hWnd, "hwnd", $hGUI)
WinMove($hWnd, "", 0, 0, 1000, 800)
GUISetState()
Sleep(111)
WinMove($hWnd, "", -8, -8, 1016, 816)
Do
Until GUIGetMsg() = -3
WinClose($hWnd)
WinWaitClose($hWnd)
 
Автор
R

Ragn

Новичок
Сообщения
48
Репутация
0
InnI не работает почему-то.

Запускаю скрипт, открываю файл экселя.
Дальше происходит что-то странное.
В окне GUI -появляются какие-то странные контуры, напоминающие эксель. Причем сам файл эксель - открывается не в GUI, а в обычном "родном" окне эксель.

Попробовал другую схему. Сперва открыл файл экселя, а затем запустил скрипт. Окно файла - отобразилось в GUI, но отобразилось оно - как скриншот. Ни одной ячейки нельзя выделить и вписать в них что-то - скрипт тоже не позволяет.

Я имел ввиду - чтобы эксель отображался в GUI, чтобы с ним можно было работать. Делать какие-нибудь записи в ячейках экселя.
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
Проверил на Excel 2016: окно Excel встраивается полностью, есть возможность редактирования. Некорректно работают загрузка и сохранение, когда открываются соответствующие диалоги - окна "Сохранить как" и "Открыть" не появляются (т.е. они открываются, только позади окна Excel, как бы между окном Excel и окном AutoIt). Но, в любом случае, описанных вами проблем я на Win10 не наблюдаю. Возможно, у вас какой-то специфический файл - попробуйте на чистой книге.

Хотя, нет... нашёл одну проблему. Если Excel запущен с правами администратора, а скрипт нет, то Excel не встраивается. Но в этом случае нужно добавить в скрипт
Код:
#RequireAdmin



А зачем вообще встраивать Excel в GUI AutoIt? Скажу сразу, что, даже если получится, то полноценной работы всё равно не будет. Как минимум отрисовка будет некорректной. И дочерние окна Excel, скорее всего, появляться не будут, т.к. родителем будет GUI AutoIt. Поэтому я вам просто не советую дальше заниматься встраиванием - потратите кучу времени, но полноценной работы Excel всё равно не добьётесь.
 
Автор
R

Ragn

Новичок
Сообщения
48
Репутация
0
InnI
добавил #RequireAdmin
По-прежнему ничего не работает.

Файл чистой книги открывается, но в ячейки ничего записать нельзя, по листам переходить нельзя.

У меня Win7, Excel2013
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
Ragn [?]
Проверил на Win7, Excel2013 - нормально встраивается. И ячейки редактируются и по листам переходит. Скриншот приложен.
 

Вложения

  • scr.png
    scr.png
    99.1 КБ · Просмотры: 19
Автор
R

Ragn

Новичок
Сообщения
48
Репутация
0
InnI
А у меня что-то вот никак.
Не работает почему-то....
 
Верх