0

我希望在某些成员登录网站时收到通知。该站点的登录成员列表通常扩展到三个或四个 HTML 页面,除了末尾的页码之外,每个 URL 都相同。我有一个文本文件,列出了我想要通知的少数成员。如果我的列表中的任何成员登录,下面的脚本会成功通知我。它会下载第一页,搜索该页面上的每个成员,如果找到则通知,然后对剩余的每个页面重复该过程,然后休眠五分钟并开始超过。

我想改进的方法有很多,但对于初学者来说,我想解决重复通知问题。只要他们登录,我就会每五分钟收到一次关于相同成员的通知。一旦我为特定成员确定了 MsgBox,我希望脚本继续搜索成员而不重新通知我任何先前确认的登录。我想知道我是否应该重新考虑整个事情,完全摆脱 MsgBox,并拥有一个带有成员/状态列表的始终打开的窗口,并且只有在状态发生变化时才会发出 SoundBeep。可以使用 AutoHotKey 来实现吗?我最近才发现 AHK,而且我没有编程或脚本编写经验,所以我花了很长时间才想出我目前所拥有的东西。感谢您的任何帮助和建议。

Loop
{
    n := 1
    While n < 5
    {
        UrlDownloadToFile, website/LoggedIn&page=%n%, Source_%n%.txt
        FileRead, PageVar_%n%, Source_%n%.txt
        Loop, read, MemberList.txt
        {
            Loop, parse, A_LoopReadLine, `n
            {
                MemberVar = %A_LoopField%
                IfInString, PageVar_%n%, %MemberVar%
                {
                    SoundBeep
                    MsgBox, 4096, Logged In, %MemberVar% is logged in
                }
            }   
        }
        n := n + 1
    }
    Sleep 300000
}
4

1 回答 1

0

好吧,这可能比你需要的多一点

但尝试一下,看看它是否适合你......

; Create the ListView with one column, Name:
Gui, Add, ListView, r20 w200 vMyListView, Name
; Create a object "online"
online := []
gosub, check ; Run the subpart one time
Settimer, check, 300000 ; and then this will run the cheak evry 300000 ms
return


check:
Gui, show ; Show the listveiw
GuiControl, -Redraw, MyListView ; Stop the listveiw from updateing
While A_Index < 5
{
    Url = website/LoggedIn&page=%A_Index%
    Source := URLToVar(URL)
    FileRead, Membs, MemberList.txt
    Loop, parse, Membs, `n
    {
        IfInString, Source, %A_LoopField%
        {
                SoundBeep
                Online[A_LoopField] := true
        }
        else if Online[A_LoopField]
            Online.Remove(A_LoopField)
    }
}
LV_Delete()
for key in online
{
    msgbox % Key
    LV_Add("", Key)
}
GuiControl, +Redraw, MyListView ; let the listveiw update
Return

GuiClose:  ; Indicate that the script should exit automatically when the window is closed.
ExitApp

URLToVar(URL) {
    ComObjError(0)
    WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
    WebRequest.Open("GET", URL)
    WebRequest.Send()
    Return WebRequest.ResponseText()
        , ComObjError(0)
    }

希望它可以帮助你

于 2013-07-29T21:55:26.670 回答