Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Открыть окно, скрытое вторым .exe (http://forum.oszone.net/showthread.php?t=177688)

morgan1991 08-06-2010 20:20 1430189

Открыть окно, скрытое вторым .exe
 
Здравствуйте!
Возникла такая проблемка.
В одном скрипте создано gui, затем guisetstate(), затем guisetstate(@SW_HIDE, $Gui)
Нужно другим скриптом отобразить это окно - guisetstate(@SW_SHOW, $Gui).
Помогите пожалуйста.

kaster 08-06-2010 20:44 1430222

morgan1991,
если у первого GUI есть $Title, то
Код:

WinSetState($Title, "", @SW_SHOW)

morgan1991 08-06-2010 23:10 1430316

Цитата:

Цитата kaster
если у первого GUI есть $Title, то »

к сожалению $Title нет, а если сделать, то окно открывается, но неодна кнопка не работает...

А ещё было бы неплохо, не только отобразить окно а ещё и выслать ему комманду нажатия на кнопку, не используя клавиатуру и мышь...

kaster 09-06-2010 00:31 1430371

morgan1991,
код первого скрипта приведи. там видно будет

morgan1991 09-06-2010 00:57 1430383

Код:

#include <guiconstants.au3>

$Gui = GUICreate("")
$Button = GUICtrlCreateButton("button1", 10, 10)

GUISetState(@SW_SHOW, $Gui)
GUISetState(@SW_HIDE, $Gui)

While 1
    $Msg = GUIGetMsg()
    If $Msg = $GUI_EVENT_CLOSE Then Exit
WEnd


kaster 09-06-2010 01:19 1430398

morgan1991
1. зачем делать SHOW, а потом следом сразу же HIDE? если ничего не делать будет тоже самое
2. зачем нужен GUI который скрыт? ну да ладно, это не суть

Title у GUI никак не может влиять на его работоспособность. Просто дай уникальное имя окну.
к примеру, вот немного твой доработанный скрипт
Код:

#include <guiconstants.au3>

$Gui = GUICreate("My Unique title")
$Button = GUICtrlCreateButton("button1", 10, 10)

;GUISetState(@SW_SHOW, $Gui)
;GUISetState(@SW_HIDE, $Gui)

While 1
    $Msg = GUIGetMsg()
    If $Msg = $GUI_EVENT_CLOSE Then Exit
WEnd

запускаешь после этого второй скрипт-монитор.
Код:

$hGUI = GUICreate("Window catcher")
$hButtonCatch = GUICtrlCreateButton("Show/Hide Window", 10, 10)
GUISetState()
$sTitle = "My Unique title"
Global $flag = 1; WIndow is hide
While 1
        $msg = GUIGetMsg()
        Switch $msg
                Case -3
                        ExitLoop
                Case $hButtonCatch
                        _WinCatch()
        EndSwitch
WEnd

Func _WinCatch()
        Switch $flag
                Case 1
                        WinSetState($sTitle, "", @SW_SHOW)
                        $flag = 0
                Case 0
                        WinSetState($sTitle, "", @SW_HIDE)
                        $flag = 1
        EndSwitch
EndFunc


morgan1991 09-06-2010 19:36 1430927

К сожалению, сейчас немогу привести пример скрипта, но я с предидущим немного ошибся.
guigetmsg() там не используется, вмсто него оневент, и возможно из-за этого после отображения окна вторым скриптом, ни одна кнопка в окне не работает.
+ необходимо:
Цитата:

Цитата morgan1991
не только отобразить окно а ещё и выслать ему комманду нажатия на кнопку, не используя клавиатуру и мышь... »

просто отобразить окно недостаточно... :(
Возможно есть способ используя dll или чтото ещё, чтобы отсылать первому скрипту комманды?

kaster 09-06-2010 20:28 1430967

morgan1991, для этого существуют команда
Код:

ControlClick()

morgan1991 09-06-2010 20:34 1430975

Цитата:

Цитата kaster
morgan1991, для этого существуют команда »

Цитата:

Цитата morgan1991
не используя клавиатуру и мышь... »


morgan1991 14-06-2010 17:37 1433945

Решил, методом TCP соединения между двумя скриптами...

kaster 14-06-2010 17:43 1433948

morgan1991, предполагаю, что если ты приведешь свое решение тут, оно будет очень полезным не только тебе но и многим другим, с аналогичной проблемой ;)

morgan1991 17-06-2010 08:47 1435826

Example.au3
Код:

Func TCPConnect()
    Local $MainSocet = TCPListen(@IPAddress1, 5438, 1)
    If @error Then MsgBox(16, "", "TCPListen: " & @error)
    If FileExists(@ScriptDir & "\_MsgFunc.exe") Then
        ShellExecute(@ScriptDir & "\_MsgFunc.exe")
        Local $ConnectSocet = -1
        While $ConnectSocet < 0
            $ConnectSocet = TCPAccept($MainSocet)
        WEnd
    Else
        ErrorInstallProg()
    EndIf
    Return $ConnectSocet
EndFunc

Func _ShowGui()
    ; Тут открывается окно
EndFunc

Func ErrorInstallProg()
    Exit
EndFunc

TCPConnect()
While 1
    $TCPRecvData = TCPRecv($VK_MsgConnectedSocet, 4098)
    If $TCPRecvData = "ShowGUI" Then _ShowGui()
WEnd

_MsgFunc.au3
Код:

Func _CreateConnectedSocet()
    Local $TempConnectSocet = -1
    $TempConnectSocet = TCPConnect(@IPAddress1, 5438)
    If @error Then Exit
    Return $TempConnectSocet
EndFunc

Func _SendShowGui()
    TCPSend($ConnectedSocet, "ShowGUI")
EndFunc

_CreateConnectedSocet()
_SendShowGui()

Откомпилить _MsgFunc.au3 и запустить Example.au3


Время: 06:45.

Время: 06:45.
© OSzone.net 2001-