Что нового

Управление скриптом из скрипта

forc1k

Новичок
Сообщения
42
Репутация
1
Здравствуйте. Дано примерно следующее:
test.au3
Код:
#include <test2.au3>
...
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
       Case $test2


test2.au3
Код:
While 1
If Действие = 1 Then
ExitLoop
EndIf
Wend


Как можно реализовать управление подключаемым через
Код:
#include
скриптом по выполнению
Код:
Case $test2
? Т.е. когда выполняется
Код:
Case $test2
активируется скрипт test2.au3
Спасибо.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
test.au3
Код:
#include <test2.au3>
...
       Case $test2
            _MyFyncFromTest2()


test2.au3
Код:
Func _MyFuncFromTest2()
    While 1
        If Действие = 1 Then
            ExitLoop
        EndIf
    Wend
EndFunc
 
Автор
F

forc1k

Новичок
Сообщения
42
Репутация
1
CreatoR сказал(а):
test.au3
Код:
#include <test2.au3>
...
       Case $test2
            _MyFyncFromTest2()


test2.au3
Код:
Func _MyFuncFromTest2()
    While 1
        If Действие = 1 Then
            ExitLoop
        EndIf
    Wend
EndFunc
Спасибо огромное! Еще вопрос.
Код:
_WinAPI_LoadKeyboardLayout(0x0409)



Func _WinAPI_LoadKeyboardLayout($sLayoutID, $hWnd = 0)
    Local Const $WM_INPUTLANGCHANGEREQUEST = 0x50
    Local $aRet = DllCall("user32.dll", "long", "LoadKeyboardLayoutW", "wstr", Hex($sLayoutID, 8), "int", 0)

    If Not @error And $aRet[0] Then
        If $hWnd = 0 Then
            $hWnd = WinGetHandle(AutoItWinGetTitle())
        EndIf

        DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_INPUTLANGCHANGEREQUEST, "int", 1, "int", $aRet[0])
        Return 1
    EndIf

    Return SetError(1)
EndFunc

Как быть в этом случае? Тут уже есть функция и когда я добавляю еще одну - начинает громко ругаться.
т.е.
Код:
Func _Language_Active()
_WinAPI_LoadKeyboardLayout(0x0409)



Func _WinAPI_LoadKeyboardLayout($sLayoutID, $hWnd = 0)
    Local Const $WM_INPUTLANGCHANGEREQUEST = 0x50
    Local $aRet = DllCall("user32.dll", "long", "LoadKeyboardLayoutW", "wstr", Hex($sLayoutID, 8), "int", 0)

    If Not @error And $aRet[0] Then
        If $hWnd = 0 Then
            $hWnd = WinGetHandle(AutoItWinGetTitle())
        EndIf

        DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_INPUTLANGCHANGEREQUEST, "int", 1, "int", $aRet[0])
        Return 1
    EndIf

    Return SetError(1)
EndFunc
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Функция не может быть вложена в другую. Читайте справку.
 
Автор
F

forc1k

Новичок
Сообщения
42
Репутация
1
CreatoR сказал(а):
Функция не может быть вложена в другую. Читайте справку.
Мне, собственно, не обязательно ее вкладывать, главное сделать, чтобы она не выполнялась сразу при инклуде в основной скрипт, а только при вызове функции подскрипта.
test1.au3 - главный скрипт
test2.au3 - подскрипт(имеет инклуд в главном скрипте) в который сделан
Код:
#include
этой функции
Так вот, когда я делаю инклуд этой функции в test1.au3, скрипт не работает как нужно. Очень надеюсь, что я понятно объяснил :-[
Может можно чего сделать?
test1.au3
Код:
#include <test2.au3>
...
Case $test2
_test2()

test2.au3
Код:
#include <Language.au3>
Func _test2()
Как-то так, общий принцип. И вот из-за этого инклуда "Language"(функция), не работает вызов test2 из test1

Разобрался. Еще раз спасибо.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
forc1k
test1.au3
Код:
#include "test2.au3"
...
Case $iLanguage
_LanguageLoad()


test2.au3
Код:
#include-once
#include "Language.au3"
Func _LanguageLoad()
   _WinAPI_LoadKeyboardLayout(0x0409)
EndFunc


Language.au3
Код:
#include-once
Func _WinAPI_LoadKeyboardLayout($sLayoutID, $hWnd = 0)
    Local Const $WM_INPUTLANGCHANGEREQUEST = 0x50
    Local $aRet = DllCall("user32.dll", "long", "LoadKeyboardLayoutW", "wstr", Hex($sLayoutID, 8), "int", 0)

    If Not @error And $aRet[0] Then
        If $hWnd = 0 Then
            $hWnd = WinGetHandle(AutoItWinGetTitle())
        EndIf

        DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_INPUTLANGCHANGEREQUEST, "int", 1, "int", $aRet[0])
        Return 1
    EndIf

    Return SetError(1)
EndFunc
 
Верх