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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Независимый/паралельный запуск функции от работы скрипта (http://forum.oszone.net/showthread.php?t=185706)

---Zak--- 17-09-2010 10:57 1497516

Независимый/паралельный запуск функции от работы скрипта
 
День добрый... Подскажите плиз куда копать - ситуация следующая:
Необходимо создать программу, которая будет висеть в трее и по нажатии правой кнопки выкидывать меню, то мне так же необходимо параллельно запустить функцию, которая будет читать из файла данные и если что делать изменения ручками.

Нашел похожую тему: http://forum.oszone.ru/post-1397936.html, но там ставиться форма и кнопка на ней висит... поковыряв ее - ничего не получилось... сижу ломаю голову до сих пор. Меню создается и файл читается, но при выборе (в данном примере) блокнота - он не открывается... и выход не срабатывает.

Свой кусок прилагаю ниже...

читать дальше »
Код:

#NoTrayIcon
#include <ModernMenuRaw.au3>

$hTrayIcon = _TrayIconCreate("Proba")
 
_TrayIconSetClick(-1, 16)
_TrayIconSetState()
 
$nTrayMenu = _TrayCreateContextMenu()
 
$Notepad_TrayItem = _TrayCreateItem("Блокнот")
_TrayItemSetIcon(-1, "notepad.exe", 0)

_TrayCreateItem("")
_TrayItemSetIcon(-1, "", 0)
 
$Exit_TrayItem = _TrayCreateItem("Выход")
_TrayItemSetIcon(-1, "shell32.dll", 28)
 
_SetTrayIconBkColor(0xC46200)
_SetTraySelectBkColor(0x087272)
_SetTraySelectTextColor(0xFFFFFF)

AdlibRegister("ReadFILE", 1000)

While 1       
    Switch GUIGetMsg()
        Case $Notepad_TrayItem
                AdlibUnRegister()
                Run("Notepad.exe")
        Case $Exit_TrayItem
            _TrayIconDelete($hTrayIcon)
            ExitLoop
    EndSwitch
WEnd

Func ReadFILE()
        $file = FileOpen("C:\proba.txt", 0)
        While 1
                $line = FileReadLine($file)
                If @error = -1 Then ExitLoop
;~                ........
        WEnd
        FileClose($file)
EndFunc  ;==>


madmasles 17-09-2010 11:29 1497548

---Zak---,
Честно говоря, я не совсем понял, что Вам надо, но попробуйте так, у меня работает:
читать дальше »
Код:

#NoTrayIcon
#include <ModernMenuRaw.au3>
$j = 0
$bPause = True
$hTrayIcon = _TrayIconCreate("Proba")

_TrayIconSetClick(-1, 16)
_TrayIconSetState()

$nTrayMenu = _TrayCreateContextMenu()

$Pause_TrayItem = _TrayCreateItem("Пауза")
_TrayItemSetIcon(-1, "shell32.dll", 321)

_TrayCreateItem("")
_TrayItemSetIcon(-1, "", 0)

$Notepad_TrayItem = _TrayCreateItem("Блокнот")
_TrayItemSetIcon(-1, "notepad.exe", 0)

_TrayCreateItem("")
_TrayItemSetIcon(-1, "", 0)

$Exit_TrayItem = _TrayCreateItem("Выход")
_TrayItemSetIcon(-1, "shell32.dll", 28)

_TrayIconSetToolTip(-1, 'Функции работают')
_SetTrayIconBkColor(0xC46200)
_SetTraySelectBkColor(0x087272)
_SetTraySelectTextColor(0xFFFFFF)

AdlibRegister("ReadFILE", 1000)
AdlibRegister("_MyPing", 1000)
While 1
    Switch GUIGetMsg()
        Case $Notepad_TrayItem
            Run("Notepad.exe офис.txt")
        Case $Pause_TrayItem
            $bPause = Not $bPause
            If $bPause Then
                AdlibRegister("ReadFILE", 1000)
                AdlibRegister("_MyPing", 1000)
                _TrayItemSetText($Pause_TrayItem, 'Пауза')
                _TrayItemSetIcon($Pause_TrayItem, "shell32.dll", 321)
                _TrayIconSetToolTip(-1, 'Функции работают')
            Else
                AdlibUnRegister("ReadFILE")
                AdlibUnRegister("_MyPing")
                _TrayItemSetText($Pause_TrayItem, 'Продолжить')
                _TrayItemSetIcon($Pause_TrayItem, "shell32.dll", 135)
                _TrayIconSetToolTip(-1, 'Пауза в работе функций')
            EndIf

        Case $Exit_TrayItem
            _TrayIconDelete($hTrayIcon)
            ExitLoop
    EndSwitch
WEnd

Func ReadFILE()
    $file = FileOpen("офис.txt", 0)
    While 1
        $line = FileReadLine($file)
        If @error = -1 Then ExitLoop
;~        ........
    WEnd
    FileClose($file)
    $j += 1
    ToolTip('Счетчик ' & $j, 0, 0)
EndFunc  ;==>ReadFILE
Func _MyPing()
    Local $iPing = Ping('google.com')
    If $iPing Then
        _TrayTip(-1, 'Ping', 'Ping google.com - ' & $iPing & ' ms' & @CRLF & $j, 0, 19)
    Else
        _TrayTip(-1, 'Ping', 'No Ping google.com - ' & $j, 0, 19)
    EndIf
EndFunc  ;==>_MyPing


---Zak--- 17-09-2010 11:48 1497571

madmasles, спасибки огромное, переделаю под себя =)... сейчас объясню другими словами что требуется, если интересно.

Необходимо создать программу, которая висит в трее и при нажатии правой кнопкой по ней - вылезает меню. Допустим запуск блокнота и выход.
А параллельно этому должен запускаться процесс по чтению данных из файла, который никакого отношения к меню не имеет. И чтобы не грузить ПК чтение файла запускается через некоторое время - допустим через 60 сек (в последующем время увеличим)

Ну можно сделать по другому (я уже переделаю под себя)
Пишет тот же самый трей с менюшкой из блокнота и выходом, а параллельно этому запускается функция, в которой пингуется ПК (192.168.1.1) и если пинга нет, то вывести сообщение.

madmasles 17-09-2010 12:47 1497627

---Zak---,
Я поменял код в своем предыдущем сообщении. У меня обе функции работают. Если Вам надо запускать функции с разным интервалом, то посмотрите здесь.

---Zak--- 17-09-2010 12:48 1497628

Все - спс... переписал все с нуля и заработала как часы. С меня пива =)

Да не - все норм... у меня почему-то при чтении файла функция просто зависала и дальше не срабатывала.

Creat0R 17-09-2010 14:20 1497736

---Zak---,
Предупреждение за нарушение правил форума, пункт 2.7:

Цитата:

В заголовке темы обязательно обозначайте название предмета, которого касается вопрос, а в теле сообщения максимально подробно опишите проблему (приведите аппаратную/программную конфигурацию, а также изложите ситуацию, в которой возникает проблема). Темы с несодержательными или слишком общими заголовками будут закрываться или переноситься в раздел "Зона тестирования" в зависимости от политики конкретного форума. Подробнее о принципах создания тем читайте в этом документе и Правилах форумов.
Переименуйте пожалуйста тему.


Время: 17:56.

Время: 17:56.
© OSzone.net 2001-