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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Баннер о не прочтенных письмах в OutLook (http://forum.oszone.net/showthread.php?t=186347)

---Zak--- 24-09-2010 09:37 1503156

Баннер о не прочтенных письмах в OutLook
 
День добрый.

Нужен Ваш проф. совет: у пользователей на ПК стоит MSOutLook и существует задача, подключаться к OutLook'у - проверять все письма на прочитал/не прочитал. Если в списке писем есть хоть не одно прочтенное письмо, то в этом случае выводить окно (без возможности его закрытия), в котором будет обычная надпись - что так и так - прочитайте все письма.

Скрипт подключения к OutLook находится здесь - http://www.autoitscript.com/forum/in...howtopic=89321
По примеру скрипта http://forum.oszone.net/thread-185706.html написал скрипт, который должен все это проделывать, но никак не понимаю. Естественно это все должно быть в цикле и обрабатываться через N-ое кол-во времени. Дошел до момента, когда окно вылезает, но после этого хочу в OutLook'е прочитать все письма и окно не пропадает...

Так же в скрипте предусмотрена менюшка, когда прога висит в трее. Вот если вызвать из нее блокнот, тогда функция сработает еще раз - выведет еще одно окно. Иногда доходил до момент, когда не останавливал функцию через
Код:

                                        AdlibUnRegister("ReadOutLook")
                                        GUISetState(@SW_SHOW)
                                        AdlibRegister("ReadOutLook", 1000)

она мне постоянно выкидывала новые окна... и таким способом заполоняла "панель пуска".

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

#NoTrayIcon
#include <WindowsConstants.au3>
#include <ModernMenuRaw.au3>
#include <GUIConstantsEx.au3>

#Include <Array.au3>
#Include "Outlook.au3"

$j = 0

$bPause = True
$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("ReadOutLook", 1000)

While 1
    Switch GUIGetMsg()
        Case $Notepad_TrayItem
                AdlibUnRegister()
                Run("Notepad.exe")
                _TrayItemSetText($Notepad_TrayItem, 'Блокнот')
                                AdlibRegister("ReadOutLook", 1000)
        Case $Exit_TrayItem
            _TrayIconDelete($hTrayIcon)
            ExitLoop
    EndSwitch
WEnd

Func ReadOutLook()
    Local $gui, $msg, $flag
       
        $oOutlook = _OutlookOpen()
       
    $gui = GUICreate("OutLook", 400, 100, @DesktopWidth/2 - 200 , @DesktopHeight/2 - 100, $WS_POPUP, $WS_EX_TOPMOST)
    GUICtrlCreateLabel ("У Вас есть непрочитанные письма !!!",10,20)
        GUICtrlCreateLabel ("Сообщение будет убрано с экрана при условии,",10,40)
        GUICtrlCreateLabel ("что все письма будут прочтены",200,60)

        $xx = _OutlookGetMail($oOutlook,$olFolderInbox  ,False,"","","","","","",False,"OutlookWarning2.exe",0)
        $count_i = UBound($xx) - 1

        For $i = 1 to $count_i Step +1
                If $xx[$i][12] = True Then
                        $flag = True
                        ExitLoop
                Else
                        $flag = False
                EndIf
        Next
        If $flag = True Then
                AdlibUnRegister("ReadOutLook")
                GUISetState(@SW_SHOW)
;~                AdlibRegister("ReadOutLook", 1000)
        Else
                AdlibUnRegister("ReadOutLook")
                GUISetState(@SW_HIDE)
        EndIf

EndFunc



Помогите плиз...

---Zak--- 24-09-2010 16:19 1503374

Пошел немного другими путями и почти все сделал через функцию WinGetState
Я решил сделать по другому - при любом исходе создавать это окно с надписями, но в зависимости от результата проверки:

* Если в массиве хоть один элемент "= True", то проверять через WinGetState активность этого окна. Если оно не видно, то делать видимым, если оно видимое - то пропускать цикл
* Если в массиве нет элементов с "= True", то так же проверять активность окна, но уже делать все наоборот.

НО !!! Загвоздка осталась в том, что у меня теперь не работает меню при нажатии правой кнопки на значке в трее.
Посмотрите плиз - что сделал не так:

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

#NoTrayIcon
#include <WindowsConstants.au3>
#include <ModernMenuRaw.au3>
#include <GUIConstantsEx.au3>

;~ Opt('MustDeclareVars', 1)

#Include <Array.au3>
#Include "Outlook.au3"



$j = 0

$bPause = True
$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)

        $gui = GUICreate("OutLook - ADM-s", 400, 100, @DesktopWidth/2 - 200 , @DesktopHeight/2 - 100, $WS_POPUP, $WS_EX_TOPMOST)
        GUICtrlCreateLabel ("У Вас есть непрочитанные письма !!!",10,20)
        GUICtrlCreateLabel ("Сообщение будет убрано с экрана при условии,",10,40)
        GUICtrlCreateLabel ("что все письма будут прочтены",200,60)
        WinSetState("OutLook - ADM-s", "", @SW_HIDE)

AdlibRegister("ReadOutLook", 1000)

While 1
    Switch GUIGetMsg()
        Case $Notepad_TrayItem
                AdlibUnRegister()
                Run("Notepad.exe")
                _TrayItemSetText($Notepad_TrayItem, 'Блокнот')
                                AdlibRegister("ReadOutLook", 1000)
        Case $Exit_TrayItem
            _TrayIconDelete($hTrayIcon)
            ExitLoop
    EndSwitch
WEnd

Func ReadOutLook()
    Local $gui, $msg, $flag
        $oOutlook = _OutlookOpen()
                $xx = _OutlookGetMail($oOutlook,$olFolderInbox  ,False,"","","","","","",False,"OutlookWarning2.exe",0)
                $count_i = UBound($xx) - 1
                $state = WinGetState("OutLook - ADM-s", "")

                For $i = 1 to $count_i Step +1
                        If $xx[$i][12] = True Then
                                $flag1 = True
                                ExitLoop
                        Else
                                $flag1 = False
                        EndIf
                Next
                If ($flag1 = True)and($state = 5) Then
                        WinSetState("OutLook - ADM-s", "", @SW_SHOW)
                EndIf
                If ($flag1 = False)and(($state = 15)or($state = 7)) Then
                        WinSetState("OutLook - ADM-s", "", @SW_HIDE)
                EndIf
EndFunc


---Zak--- 24-09-2010 18:00 1503433

Еще переписал программу - в понедельник выложу еще исходник

---Zak--- 27-09-2010 15:05 1505572

В общем кому будет полезно:

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

#NoTrayIcon
#include <WindowsConstants.au3>
#include <ModernMenuRaw.au3>
#include <GUIConstantsEx.au3>

#Include <Array.au3>
#Include "Outlook.au3"

$j = 0

$bPause = True
$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)

        $gui = GUICreate("OutLook - ADM-s", 400, 100, @DesktopWidth/2 - 200 , @DesktopHeight/2 - 100, $WS_POPUP, $WS_EX_TOPMOST)
        GUICtrlCreateLabel ("У Вас есть непрочитанные письма !!!",10,20)
        GUICtrlCreateLabel ("Сообщение будет убрано с экрана при условии,",10,40)
        GUICtrlCreateLabel ("что все письма будут прочтены",200,60)
        WinSetState("OutLook - ADM-s", "", @SW_HIDE)

AdlibRegister("ReadOutLook", 1000)

While 1
    Switch GUIGetMsg()
        Case $Notepad_TrayItem
                AdlibUnRegister()
                Run("Notepad.exe")
                _TrayItemSetText($Notepad_TrayItem, 'Блокнот')
                                AdlibRegister("ReadOutLook", 1000)
        Case $Exit_TrayItem
            _TrayIconDelete($hTrayIcon)
            ExitLoop
    EndSwitch
WEnd

Func ReadOutLook()
    Local $gui, $msg, $flag
AdlibUnRegister("ReadOutLook")       
        $oOutlook = _OutlookOpen()
               
        $xx = _OutlookGetMail($oOutlook,$olFolderInbox  ,False,"","","","","","",True,"OutlookWarning2.exe",0)
        $state = WinGetState("OutLook - ADM-s", "")

        If ($xx[0][1] > 0)and($state = 5) Then
                WinSetState("OutLook - ADM-s", "", @SW_SHOW)
        EndIf

        If ($xx[0][1] < 1)and(($state = 15)or($state = 7)) Then
                WinSetState("OutLook - ADM-s", "", @SW_HIDE)
        EndIf
AdlibRegister("ReadOutLook", 1000)

EndFunc



Только я никак не понимаю почему кнопки не работают...


Время: 03:43.

Время: 03:43.
© OSzone.net 2001-