Что нового

На GUI - окно ворда делается белым

mv6677

Новичок
Сообщения
105
Репутация
0
Доброе утро.
Помогите с решением сложного вопроса.

Есть , который часть окон сторонних программ - встраивает в интерфейс при открытии. А часть - встраивает тогда, когда нужное окно появляется - будучи кем-то открытым.
Код:
;#include <WinAPISysWin.au3>
#include <WinAPI.au3>
Opt('WinTitleMatchMode', -2)

$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("calc.exe")
$hWnd3 = WinWaitActive('Калькулятор')
_WinAPI_SetParent($hWnd3, $hGUI)
WinMove($hWnd3, "", 400, 0)
$OldPos3 = WinGetPos($hWnd3)

$OldActive = 0
AdlibRegister("Refresh")

Do
    sleep(200)
    If WinExists('2.txt') Then Refresh_2()
Until GUIGetMsg() = -3

Func Refresh_2()
$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

Этот скрипт - работает с блокнотом, калькулятором.
Но вот когда я вместо '2.txt' - прописываю 'Документ1.doc' ... то это окно - открывается на GUI.

Но если свернуть GUI, а затем развернуть - то встроенное окно ворда - делается белым. Не видно ничего - какое в нем содержимое.
И как это исправить ?
 

xXx

╚{■_■}╗
Меценат
Сообщения
248
Репутация
95
Re: Скрипт не реагирует на окно ворда, с нужным названием

mv6677 сказал(а):
Но вот когда я вместо '2.txt' - прописываю 'Документ1.doc'
Вы лучше людям покажите, как это делаете.
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
Re: Скрипт не реагирует на окно ворда, с нужным названием

xXx

А что показать-то ?
Вот тот же самый скрипт, где вместо '2.txt' - прописано 'Документ1.doc' .
Код:
;#include <WinAPISysWin.au3>
#include <WinAPI.au3>
Opt('WinTitleMatchMode', -2)

$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("calc.exe")
$hWnd3 = WinWaitActive('Калькулятор')
_WinAPI_SetParent($hWnd3, $hGUI)
WinMove($hWnd3, "", 400, 0)
$OldPos3 = WinGetPos($hWnd3)

$OldActive = 0
AdlibRegister("Refresh")

Do
    sleep(200)
    If WinExists('Документ1.doc') Then Refresh_2()
Until GUIGetMsg() = -3

Func Refresh_2()
$hWnd2 = WinActive("Документ1.doc")
_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

В общем скрипт - встраивает окно ворда ... Но это окно - какое-то странное.
Если свернуть GUI, а затем развернуть - то это встроенное окно ворда - становится каким-то белым. Его содержимое куда-то девается.
Просто белое окно, с Title-названием.
 
Верх