如何監控百度雲管家的上傳下載列表並讀取其數據庫(迅雷,360雲盤適用)

 

最近筆者想作一款實時監控讀取百度雲管家而且在下載完成後自動推送消息到手機的小程序,一開始的思路是根據標題查找窗口句柄而後讀取下載列表的句柄進而得到相關數據,然而在實踐的過程當中卻遇到了麻煩:如今軟件爲了實現漂亮的界面廣泛採用了DirectUI技術,即子窗口不以窗口句柄的形式建立,因此那些控件都是沒有句柄的,這就無從下手了,因而在他的目錄找來找去,找到些了門道: sql

能夠看到有一個叫作users的文件夾, 數據庫

這裏發現了一些有趣的東西,有兩個相似哈希值名稱的文件夾,應該就是對應我曾經登陸過的兩個用戶,隨便點開一個看看: 小程序

從名字中不難看出一些端倪,那麼問題來了,數據庫該怎麼讀取呢? app

首先來看下數據庫的類型: oop

哈哈,竟然是SQLite 數據庫,這下子好辦多了,咱們來看看數據庫的結構: spa

表名清晰明瞭,想要讀取文件下載歷史只要讀取download_history_file便可,想要實時讀取下載進度的話只要讀取download_file這個表便可 .net

下面是一段VB代碼來做爲演示: 3d

 NormalText Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Private Sub FreshBaiduList()
    Dim sPath As String
    sPath = App.path & "\"
    If mSqlite.sqlite3_initialize(sPath) = SQLITE_OK Then
    
        '// Create DB
        If mSqlite.sqlite3_open(BaiduUserPath & "\BaiduYunGuanjia.db", f_lSqlite) = SQLITE_OK Then
       ' MsgBox BaiduUserPath & "\BaiduYunGuanjia.db"
                  
                    
                    '// Query values
                    If mSqlite.sqlite3_prepare_v2(f_lSqlite, "SELECT * FROM download_file", 0, f_lStatement, 0) = SQLITE_OK Then
 
                        '// Print Values
                        View1.ListItems.Clear
                        Set itmx = Nothing
                        Dim i As Long
                        i = 0
                        Do While mSqlite.sqlite3_step(f_lStatement) = SQLITE_ROW
                        View1.ListItems.Add , "a" & i, mSqlite.sqlite3_column_int(f_lStatement, 0)
                        View1.ListItems("a" & i).SubItems(1) = mSqlite.sqlite3_column_text(f_lStatement, 1)
                        View1.ListItems("a" & i).SubItems(2) = Fix(mSqlite.sqlite3_column_text(f_lStatement, 4) / 1024 / 1024 * 100) / 100 & "MB"
                        View1.ListItems("a" & i).SubItems(3) = mSqlite.sqlite3_column_text(f_lStatement, 3)
                        View1.ListItems("a" & i).SubItems(4) = DateAdd("s", mSqlite.sqlite3_column_text(f_lStatement, 7), "01/01/1970 08:00:00")
                        'View1.ListItems("a" & i).SubItems(5) = DateAdd("s", mSqlite.sqlite3_column_text(f_lStatement, 8), "01/01/1970 08:00:00")
                        i = i + 1
                        'ListView1.List
                            Debug.Print mSqlite.sqlite3_column_int(f_lStatement, 0)
                            Debug.Print mSqlite.sqlite3_column_text(f_lStatement, 1)
                            Debug.Print mSqlite.sqlite3_column_text(f_lStatement, 3)
                            Debug.Print mSqlite.sqlite3_column_text(f_lStatement, 4)
                            Debug.Print mSqlite.sqlite3_column_text(f_lStatement, 7)
                            Debug.Print mSqlite.sqlite3_column_text(f_lStatement, 8)

                        Loop

                        Next j
                    Else
                        Debug.Print mSqlite.sqlite3_errmsg(f_lSqlite)
                    End If

        Else
            Debug.Print mSqlite.sqlite3_errmsg(f_lSqlite)
        End If
    Else
        Debug.Print "Unable to Initialize Wrapper"
    End If
        
    '// Release Statement
    Call mSqlite.sqlite3_finalize(f_lStatement)
    
    '// Close DB handle
    Call mSqlite.sqlite3_close(f_lSqlite)
    
    '// Terminate wrapper
    Call mSqlite.sqlite3_shutdown
                     

End Sub
 

這樣就完成了,一樣的,我發現360雲盤和迅雷也是利用SQLite來存儲,那麼他們數據庫的讀寫就不用多說了。 orm

感謝你能把文章看到最後,若文章有不妥之處請留言指教,謝謝。sqlite

相關文章
相關標籤/搜索