PDA

Показать полную графическую версию : [решено] Открыть окно, скрытое вторым .exe


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

kaster
08-06-2010, 20:44
morgan1991,
если у первого GUI есть $Title, то
WinSetState($Title, "", @SW_SHOW)

morgan1991
08-06-2010, 23:10
если у первого GUI есть $Title, то »
к сожалению $Title нет, а если сделать, то окно открывается, но неодна кнопка не работает...

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

kaster
09-06-2010, 00:31
morgan1991,
код первого скрипта приведи. там видно будет

morgan1991
09-06-2010, 00:57
#include <guiconstants.au3>

$Gui = GUICreate (http://www.autoitscript.com/autoit3/docs/functions/GUICreate.htm)("")
$Button = GUICtrlCreateButton (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateButton.htm)("button1", 10, 10)

GUISetState (http://www.autoitscript.com/autoit3/docs/functions/GUISetState.htm)(@SW_SHOW (http://www.autoitscript.com/autoit3/docs/macros.htm#@SW_SHOW), $Gui)
GUISetState (http://www.autoitscript.com/autoit3/docs/functions/GUISetState.htm)(@SW_HIDE (http://www.autoitscript.com/autoit3/docs/macros.htm#@SW_HIDE), $Gui)

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$Msg = GUIGetMsg (http://www.autoitscript.com/autoit3/docs/functions/GUIGetMsg.htm)()
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $Msg = $GUI_EVENT_CLOSE Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

kaster
09-06-2010, 01:19
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
К сожалению, сейчас немогу привести пример скрипта, но я с предидущим немного ошибся.
guigetmsg() там не используется, вмсто него оневент, и возможно из-за этого после отображения окна вторым скриптом, ни одна кнопка в окне не работает.
+ необходимо:
не только отобразить окно а ещё и выслать ему комманду нажатия на кнопку, не используя клавиатуру и мышь... »
просто отобразить окно недостаточно... :(
Возможно есть способ используя dll или чтото ещё, чтобы отсылать первому скрипту комманды?

kaster
09-06-2010, 20:28
morgan1991, для этого существуют команда
ControlClick()

morgan1991
09-06-2010, 20:34
morgan1991, для этого существуют команда »
не используя клавиатуру и мышь... »

morgan1991
14-06-2010, 17:37
Решил, методом TCP соединения между двумя скриптами...

kaster
14-06-2010, 17:43
morgan1991, предполагаю, что если ты приведешь свое решение тут, оно будет очень полезным не только тебе но и многим другим, с аналогичной проблемой ;)

morgan1991
17-06-2010, 08:47
Example.au3
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) TCPConnect()
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $MainSocet = TCPListen (http://www.autoitscript.com/autoit3/docs/functions/TCPListen.htm)(@IPAddress1 (http://www.autoitscript.com/autoit3/docs/macros.htm#@IPAddress1), 5438, 1)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(16, "", "TCPListen: " & @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error))
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) FileExists (http://www.autoitscript.com/autoit3/docs/functions/FileExists.htm)(@ScriptDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptDir) & "\_MsgFunc.exe") Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
ShellExecute (http://www.autoitscript.com/autoit3/docs/functions/ShellExecute.htm)(@ScriptDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptDir) & "\_MsgFunc.exe")
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $ConnectSocet = -1
While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) $ConnectSocet < 0
$ConnectSocet = TCPAccept (http://www.autoitscript.com/autoit3/docs/functions/TCPAccept.htm)($MainSocet)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
ErrorInstallProg()
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $ConnectSocet
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _ShowGui()
; Тут открывается окно
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) ErrorInstallProg()
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

TCPConnect()
While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$TCPRecvData = TCPRecv (http://www.autoitscript.com/autoit3/docs/functions/TCPRecv.htm)($VK_MsgConnectedSocet, 4098)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $TCPRecvData = "ShowGUI" Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) _ShowGui()
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

_MsgFunc.au3
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _CreateConnectedSocet()
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $TempConnectSocet = -1
$TempConnectSocet = TCPConnect (http://www.autoitscript.com/autoit3/docs/functions/TCPConnect.htm)(@IPAddress1 (http://www.autoitscript.com/autoit3/docs/macros.htm#@IPAddress1), 5438)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $TempConnectSocet
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _SendShowGui()
TCPSend (http://www.autoitscript.com/autoit3/docs/functions/TCPSend.htm)($ConnectedSocet, "ShowGUI")
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

_CreateConnectedSocet()
_SendShowGui()

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




© OSzone.net 2001-2012