廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 30103 個閱讀者
 
<<   1   2   3   4   5  下頁 >>(共 7 頁)
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
n3ph223172
個人頭像
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x22 鮮花 x87
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[Basic][求助] 編寫遊戲更新器問題

訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容



[ 此文章被n3ph223172在2011-08-11 22:36重新編輯 ]


獻花 x0 回到頂端 [樓 主] From:臺灣中華電信股份有限公司 | Posted:2011-08-08 21:18 |
史來姆
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎
小有名氣
級別: 小有名氣 該用戶目前不上站
推文 x371 鮮花 x529
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

這麼煩會有人來答嗎


獻花 x0 回到頂端 [1 樓] From:未知地址 | Posted:2011-08-08 22:22 |
ebolaman 手機 會員卡
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎

級別: 副版主 該用戶目前不上站
版區: 程式設計
推文 x38 鮮花 x458
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

下面是引用 史來姆 於 2011-08-08 22:22 發表的 : 到引言文
這麼煩會有人來答嗎

或許不久後就會有了。


話說我對 VB2010 很多控制項的操作還不是很熟悉

尤其這種,通常都是以圖片來模擬操控項,看看有時候遊戲的解析度沒調好時,必須將滑鼠移動上面一點或下面一點才能取得焦點就知道

此文章被評分,最近評分記錄
財富:50 (by 三仙) | 理由: : ^^ 因為您的參與,讓程式設計更容易!!


My BOINC stats :

獻花 x1 回到頂端 [2 樓] From:台灣寬頻通訊顧問股份有限公司 | Posted:2011-08-08 22:51 |
ebolaman 手機 會員卡
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎

級別: 副版主 該用戶目前不上站
版區: 程式設計
推文 x38 鮮花 x458
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

研究了一下 CSO 的啟動器發現

他是以網頁的形式來放置按鈕等控制項

但是 HTML 有 onclick="external.Close" 的用法我就不知道 這要怎麼和程式本身整合

目前用了一個很笨的方法,是讓 a href 去連結 "Close", "Start", "Exit" 等字,讓 程式中的 Web_Browser1_Navigated 觸發並判斷連結

但是之後還要用 WebBrowser1.GoBack()




至於讀取條(Progress Bar) 的部分,只要把 圖片延長,用個函數即可

其他部分都可以用 Image 來覆蓋,這樣能解決 WebBrowser 無法與 VB.Net 整合的問題 (或是另有其他辦法?)



這是目前稍微模擬出來的介面,請參考








事實上是用兩個 WebBrowser 當作主頁面

程式碼中的 繪圖程序目前等於是沒有作用的,假如以 Image 控制項去取代 WebBrowser 的話,只需把 wb_back 去除即可

底下的程式碼的資源檔是從 CSOLauncher 提取出來的文件,並稍加修改



複製程式
Public Class frm_main

    '---------- Local variables ----------

    'Files & Folders
    Dim dataDir As String = System.IO.Directory.GetCurrentDirectory & "\HTML\"

    'Status
    Dim stat_check_obj_ind As Integer
    Dim stat_wb_complete As Integer

    'Background
    Dim rndTyp As Integer

    'Graphics
    Dim srcRect, dstRect As Rectangle
    Dim g As Graphics

    '---------- Local objects ----------
    Dim WithEvents wb, wb_back As New WebBrowser



    Private Sub frm_main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        '----- Variables -----

        'Background
        Randomize()
        rndTyp = Rnd(1)

        'Graphics
        g = Me.CreateGraphics()

        'Status
        stat_wb_complete = 0

        '----- Form -----

        'Size
        Me.Size = New Size(704, 466)

        'Style
        Me.FormBorderStyle = 0
        Me.BackColor = Color.White

        '----- Sub -----

        AddHandler wb_back.Navigated, AddressOf local_event_wb_back_nav

        'Build objects
        local_build_obj()

    End Sub

    Private Sub frm_main_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        local_redraw_bg()
    End Sub

    Private Sub timer_check_obj_stat_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timer_check_obj_stat.Tick

        Dim flag As Boolean

        Select Case stat_check_obj_ind
            Case 1 'Web browser(Back)
                If wb_back.ReadyState = WebBrowserReadyState.Complete Then

                    wb.Navigate("http://tw.beanfun.com/cso/www/game_login.aspx")
                    local_new_objcheck(2)

                End If

            Case 2 'Web browser
                If wb.ReadyState = WebBrowserReadyState.Complete Then
                    wb.Visible = True : wb_back.Visible = True : flag = True
                    stat_wb_complete = 1
                    local_redraw_bg()
                End If

        End Select

        If flag Then timer_check_obj_stat.Enabled = False : stat_wb_complete = 0

    End Sub



    Private Sub local_redraw_bg()
        If stat_wb_complete = 0 Then Exit Sub

        Dim b As Bitmap

        b = IIf(rndTyp = 0, My.Resources.BG01, My.Resources.BG02)

        dstRect = Me.ClientRectangle
        srcRect = New Rectangle(New Point(0, 0), b.Size)

        g.DrawImage(b, dstRect, srcRect, GraphicsUnit.Pixel)

    End Sub

    Private Sub local_build_obj()

        Dim arrList As New List(Of Control)
        Dim arrSize As New List(Of Size)
        Dim arrPoint As New List(Of Point)
        Dim i As Integer

        arrList.Add(wb) : arrList.Add(wb_back)
        arrSize.Add(New Size(672, 240)) : arrSize.Add(New Size(688, 430))
        arrPoint.Add(New Point(8, 185)) : arrPoint.Add(New Point(0, 0))

        '--- Web browser ---
        For i = 0 To arrList.Count - 1
            arrList(i).Visible = False
            arrList(i).Parent = Me
            arrList(i).Size = arrSize(i)
            arrList(i).Location = arrPoint(i)
            wb.ScrollBarsEnabled = False : wb_back.ScrollBarsEnabled = False
        Next i

        wb_back.SendToBack()

        Dim tempPath As String = dataDir & "133.html"
        My.Computer.FileSystem.WriteAllText(tempPath, My.Resources._133, False)
        wb_back.Navigate("file://" & tempPath)
        local_new_objcheck(1)

    End Sub

    Private Sub local_new_objcheck(ByRef ind As Integer)
        stat_check_obj_ind = ind
        timer_check_obj_stat.Enabled = True
    End Sub

    Private Sub local_event_wb_back_nav()
        If stat_wb_complete <> 0 Then Exit Sub

        Dim flagDis As Boolean = True



        Select Case local_get_urlnav(wb_back.Url.ToString)
            Case "Start"
                wb_back.GoBack()

            Case "Exit"
                If MsgBox("更新作業進行中.請問要結束嗎?", MsgBoxStyle.Exclamation + MsgBoxStyle.OkCancel, "CSOLauncher(Simulation)") = MsgBoxResult.Ok Then
                    End
                Else

                End If
            Case "Close"
                If MsgBox("更新作業進行中.請問要結束嗎?", MsgBoxStyle.Exclamation + MsgBoxStyle.OkCancel, "CSOLauncher(Simulation)") = MsgBoxResult.Ok Then
                    End
                Else

                End If
            Case Else
                flagDis = False
        End Select


        If flagDis Then
            wb_back.GoBack()
        End If


    End Sub

    Private Function local_get_urlnav(ByRef url As String) As String

        Dim l As Long

        l = InStrRev(url, "/")
        local_get_urlnav = Mid(url, l + 1, Len(url) - l)

    End Function

End Class


本帖包含附件
zip CSOLauncher_Simulation.rar   (2022-06-09 14:18 / 382 KB)   下載次數:61


My BOINC stats :

獻花 x1 回到頂端 [3 樓] From:台灣寬頻通訊顧問股份有限公司 | Posted:2011-08-09 14:53 |
n3ph223172
個人頭像
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x22 鮮花 x87
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

下面是引用 ebolaman 於 2011-08-09 14:53 發表的 : 到引言文
研究了一下 CSO 的啟動器發現
他是以網頁的形式來放置按鈕等控制項
但是 HTML 有 onclick="external.Close" 的用法我就不知道 這要怎麼和程式本身整合
目前用了一個很笨的方法,是讓 a href 去連結 "Close", "Start", "Exit" 等字,讓 程式中的 Web_Browser1_Navigated 觸發並判斷連結
但是之後還要用 WebBrowser1.GoBack()
.......

小弟想請問一下
為什麼當checkbox沒有打勾時
點擊開始遊戲,背景卻一直改變?


獻花 x0 回到頂端 [4 樓] From:臺灣中華電信股份有限公司 | Posted:2011-08-09 22:51 |
ebolaman 手機 會員卡
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎

級別: 副版主 該用戶目前不上站
版區: 程式設計
推文 x38 鮮花 x458
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

下面是引用 n3ph223172 於 2011-08-09 22:51 發表的 : 到引言文
 
小弟想請問一下
為什麼當checkbox沒有打勾時
點擊開始遊戲,背景卻一直改變?

其實你點的 開始遊戲 並不是 Image ,而是 WebBrowser 裡面的一個圖片而已

因此我設定 點下去會連結到 "Start" ,雖然說 VB.NET 可以攔截 "點下去" 這個動作,但我不知道要如何 "取消這個動作"

因此接下來就會讓 WebBrowser 連結到 "Start" 這個頁面,也就當然地會找不到網頁

因此我偷偷地加上一行 "wb_back.Goback()",讓 WebBrowser 又連結回來 原本的頁面



而這個 WebBrowser 讀取的 HTML 碼中,背景圖片是在載入中就 隨機決定的

因此才會不斷切換


因此解決辦法是,想辦法找出 VB.NET 中能用 HTML 碼控制外部的程序,我就看到 CSOLauncher 原本的程式的 HTML碼中是用

<span class="BtClose"><a href="javascript:_null()" onclick="external.OnCancel()"> Close</a></span>
    <span class="BtGamestart_d"><a href="javascript:_null()" id="startGame">遊戲結?</a></span>
    <span class="BtExit"><a href="javascript:_null()" id="exitGame" onclick="external.OnCancel()">賵?抰戩</a></span>

的用法,代表可以與 程式本身整合,攔截 "點下去" 時這個動作,然後再來觸發 程式中程序


另外一個辦法就是 不要用 Web Browser

改以 Image 這個控制項 來替代,好處是能正確地 攔截 "點下去" 這個動作,麻煩的是位置還要調整


我已經蒐尋了很久,到目前為止還是找不到如何用 WebBrowser 來引發程式中的程序

只要能修改 HTML 碼,讓 WebBrowser 中的東西被點下時,VB程式中能判斷是點下哪個,就好辦了


[ 此文章被ebolaman在2011-08-09 23:34重新編輯 ]


My BOINC stats :

獻花 x1 回到頂端 [5 樓] From:台灣寬頻通訊顧問股份有限公司 | Posted:2011-08-09 23:12 |
ebolaman 手機 會員卡
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎

級別: 副版主 該用戶目前不上站
版區: 程式設計
推文 x38 鮮花 x458
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
第二版 遊戲更新器 模擬
關於 VB.NET 好像是 VB 2005 的前身,這我也搞不太清楚

總之大家都習慣把 VB 分為兩階段,一個是 古老的 VB6 另外一個就是 VB.NET

至於該稱呼 VB.NET 還是 2005, 2008, 2010 這我就不知道





昨天又試了很多次,終於找到如何讓 WebBrowser 中的圖片被點下去時

VB 中可以一起被觸發


先要用這兩行來讓 程序被觸發時,可以一起觸發自己設定的函數

不過這次作的更新器模擬只有用到 Navigating 被觸發的時候

複製程式
        AddHandler wb_back.Navigating, AddressOf local_event_wb_back_nav
        AddHandler wb_back.Document.Click, AddressOf local_event_wb_back_click



然後在函數內可以用 wb_back.Document.GetElementById(Name) 來取得特定 ID 的物件

wb_back.Document.GetElementById(Name).GetAttribute(Attr) 則可以取得 屬性,例如 Checkbox 勾了沒

wb_back.Document.InvokeScript(Name, Obj) 則可以觸發 網頁中的 JavaScript,也能取得特定函數的值

wb_back.Document.ActiveElement.Name  則可以取得目前物件的名稱




有了以上方法,我就寫了第二版的 模擬CSO更新器



底下的程式碼在 Form1 (frm_main)

Form1 :

複製程式
Public Class frm_main

    '---------- Local structures ----------
    Structure struc_prg
        Dim pack As Collection
        Dim curInd As Long
        Dim accum_total, accum_max As Long

        Dim cur_val, cur_max As Long
        Dim total_val, total_max As Long
    End Structure

    '---------- Local variables ----------

    'Files & Folders
    Dim dataDir As String = System.IO.Directory.GetCurrentDirectory & "\HTML\"

    'Status
    Dim stat_check_obj_ind As Integer
    Dim stat_wb_complete As Integer

    'Progress
    Dim prg As struc_prg

    '---------- Local objects ----------
    Dim WithEvents wb_back As New WebBrowser



    Private Sub frm_main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim i, i2 As Integer

        '----- Variables -----

        'Status
        stat_wb_complete = 0

        'Size : Pack (@@@ Test @@@)
        prg.pack = New Collection
        Dim arrPack(,) = {{"Server Info", 100, "伺服器訊息"}, {"Map", 3000, "地圖檔"}, {"Amxx", 888, "插件平台"}, {"Plugin", 1999, "插件"}}
        For i = 0 To arrPack.GetUpperBound(0)
            For i2 = 0 To arrPack.GetUpperBound(1)
                prg.pack.Add(arrPack(i, i2))
            Next
        Next

        For i = 1 To prg.pack.Count / 3
            prg.accum_max += prg.pack.Item(i * 3 - 1)
        Next

        prg.curInd = 0

        '----- Form -----

        'Size
        Me.Size = New Size(704, 466)

        'Style
        Me.FormBorderStyle = 0
        Me.BackColor = Color.White

        '----- Sub -----

        'Build objects
        local_build_obj()

    End Sub

    Private Sub timer_check_obj_stat_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timer_check_obj_stat.Tick

        Dim flag As Boolean

        Select Case stat_check_obj_ind
            Case 1 'Web browser(Back)
                If wb_back.ReadyState = WebBrowserReadyState.Complete Then
                    flag = True
                    wb_back.Visible = True
                    stat_wb_complete = 1

                    local_new_pack() 'Test @@@

                End If
        End Select

        If flag Then timer_check_obj_stat.Enabled = False

    End Sub

    Private Sub timer_simul_prg_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timer_simul_prg.Tick
        'Test @@@

        Dim objArr(1) As Object

        Randomize()
        prg.cur_val += (Fix(50 * Rnd()) + 30)

        If prg.cur_val >= prg.pack.Item(prg.curInd * 3 - 1) Then
            prg.accum_total += prg.pack.Item(prg.curInd * 3 - 1)

            timer_simul_prg.Enabled = False
            local_new_pack()
            Exit Sub
        End If

        Randomize()
        timer_simul_prg.Interval = IIf(Fix(10 * Rnd()) = 0, 500, Fix(50 * Rnd()) + 1)

        'Set current progress
        objArr(0) = CObj(prg.cur_val) 'Value
        objArr(1) = CObj(prg.cur_max) 'Max

        local_wb_callScript("SetCurrentProgress", objArr)

        'Status
        objArr(0) = CObj(prg.pack.Item(prg.curInd * 3 - 2) & " 安裝中...(" & prg.cur_val & "/" & prg.cur_max & ")") 'Value

        local_wb_callScript("SetStatusText", objArr)


    End Sub



    Private Sub local_build_obj()

        Dim arrList As New List(Of Control)
        Dim arrSize As New List(Of Size)
        Dim arrPoint As New List(Of Point)
        Dim i As Integer

        arrList.Add(wb_back)
        arrSize.Add(New Size(688, 430))
        arrPoint.Add(New Point(0, 0))

        '--- Web browser ---
        For i = 0 To arrList.Count - 1
            arrList(i).Visible = False
            arrList(i).Parent = Me
            arrList(i).Size = arrSize(i)
            arrList(i).Location = arrPoint(i)
            wb_back.ScrollBarsEnabled = False
            'wb_back.ScriptErrorsSuppressed = True
        Next i

        'Write files
        Dim tempPath As String = dataDir & "133.html"
        My.Computer.FileSystem.WriteAllText(tempPath, My.Resources._133, False)

        'Navigate URL
        wb_back.Navigate("file://" & tempPath)
        local_new_objcheck(1)

        'Add handler
        AddHandler wb_back.Navigating, AddressOf local_event_wb_back_nav
        AddHandler wb_back.Document.Click, AddressOf local_event_wb_back_click

    End Sub

    Private Sub local_new_objcheck(ByRef ind As Integer)
        stat_check_obj_ind = ind
        timer_check_obj_stat.Enabled = True
    End Sub

    Private Sub local_event_wb_back_nav()
        If stat_wb_complete = 0 Then Exit Sub

        Select Case wb_back.Document.ActiveElement.Id
            Case "startGame"
                If wb_back.Document.GetElementById("agreement").GetAttribute("checked") = True Then
                    If wb_back.Document.InvokeScript("get_CanStart") = 1 Then
                        MsgBox("Game started.", MsgBoxStyle.Information, "Test")
                        End
                    End If
                End If
            Case "exitGame"
                If wb_back.Document.InvokeScript("get_CanStart") = 0 Then
                    If MsgBox("更新作業進行中.請問要結束嗎?", MsgBoxStyle.Exclamation + MsgBoxStyle.OkCancel, "CSOLauncher(Simulation)") = MsgBoxResult.Ok Then
                        End
                    End If
                Else
                    End
                End If
            Case "closeGame"
                If wb_back.Document.InvokeScript("get_CanStart") = 0 Then
                    If MsgBox("更新作業進行中.請問要結束嗎?", MsgBoxStyle.Exclamation + MsgBoxStyle.OkCancel, "CSOLauncher(Simulation)") = MsgBoxResult.Ok Then
                        End
                    End If
                Else
                    End
                End If
        End Select

    End Sub

    Private Sub local_event_wb_back_click()

        Select Case wb_back.Document.ActiveElement.Name
            Case ""
            Case "agreement"

        End Select

    End Sub

    Private Sub local_renew_finishprg()
        local_wb_callScript("OnAllDone", Nothing)
    End Sub

    Private Sub local_wb_callScript(ByRef s As String, ByRef objArr As Object)
        wb_back.Document.InvokeScript(s, objArr)
    End Sub


    Private Sub local_new_pack() 'Test @@@
        If prg.curInd = prg.pack.Count / 3 Then local_renew_finishprg() : Exit Sub

        Dim ObjArr(1) As Object

        prg.curInd += 1

        'Status
        ObjArr(0) = CObj("正在安裝" & prg.pack.Item(prg.curInd * 3) & "...")
        local_wb_callScript("SetStatusText", ObjArr)

        prg.cur_val = 0
        prg.cur_max = prg.pack.Item(prg.curInd * 3 - 1)

        'Reset total progress
        ObjArr(0) = CObj(prg.accum_total)
        ObjArr(1) = CObj(prg.accum_max)
        local_wb_callScript("SetTotalProgress", ObjArr)

        'Reset current progress
        ObjArr(0) = CObj(0)
        ObjArr(1) = CObj(prg.cur_max)
        local_wb_callScript("SetCurrentProgress", ObjArr)

        timer_simul_prg.Enabled = True

    End Sub


End Class


必須加入 Timer : timer_check_obj_stat (Interval = 100, Enabled=0) , timer_simul_prg (Interval = 1000, Enabled=0)

必須加入 Resource : _133 (Files)

必須在程式執行資料夾放上 HTML資料夾(可以從底下的附件中找到)



Resource : _133 如下,其中被我修改了一點點

Resource : _133 :

複製程式
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;" />
<title>Counter-Strike Online</title>
<style>
body {
  background-color : gray;
    margin : 0;
    padding : 0;
    font:12px Tahoma,Dotum,絡遺,Gulim,Verdana,sans-serif,serif;
}
.FrameBody {background-color: transparent}

img {border:0;}

#Wrapper01 {position:relative;width:688px;height:430px;background:url(bg01.jpg) no-repeat;}
#Wrapper02 {position:relative;width:688px;height:430px;background:url(bg02.jpg) no-repeat;}

  #NoticeFrame {position:absolute; left:8; top:185; width:671px; height:236px; z-index:3}

    #Install {position:absolute;top:145px;left:8px;width:671px;height:44px;}
        #BarTotalDiv {width:671px;height:6px;margin:0 0 0 0px;}
        #BarNowDiv {width:671px;height:6px;margin:5px 0 0 0px;}
        #InstallTxt {margin:6px 0 0 0;color:#FFFFFF;}
        #InstallTxt #InstallTxtPer {font-weight:bold;color:#C2B49A;float:right}
        
    .BtClose {position:absolute; left:673; top:6; width:13px; height:14px; z-index:3} 
    .BtClose a {width:13;height:14px;text-indent:-9000px;display:block;}
    #Wrapper01 .BtClose {background:url(close_n.jpg) no-repeat;}
    #Wrapper02 .BtClose {background:url(close_n.jpg) no-repeat;}
    
    .BtGamestart {position:absolute; left:419px; top:115; width:154px; height:28px; z-index:1} 
    .BtGamestart a {width:154px;height:28px;text-indent:-9000px;display:block;}
    .BtGamestart a:hover {width:154px;height:28px;text-indent:-9000px;display:block;}

    .BtGamestart_d {position:absolute; left:419px; top:115; width:154px; height:28px; z-index:1} 
    .BtGamestart_d a {width:154px;height:28px;text-indent:-9000px;display:block;}
    .BtGamestart_d a:hover {width:154px;height:28px;text-indent:-9000px;display:block;}

    #Wrapper01 .BtGamestart_d {background:url(start_d.jpg) no-repeat;}
    #Wrapper02 .BtGamestart_d {background:url(start_d.jpg) no-repeat;}
    
    #Wrapper01 .BtGamestart {background:url(start_n.jpg) no-repeat;}
    #Wrapper02 .BtGamestart {background:url(start_n.jpg) no-repeat;}
    #Wrapper01 .BtGamestart a:hover{background:url(start_o.jpg) no-repeat;}
    #Wrapper02 .BtGamestart a:hover{background:url(start_o.jpg) no-repeat;}
    
    .BtExit {position:absolute; left:585; top:115; width:93px; height:28px; z-index:2} 
    .BtExit a {width:93px;height:28px;text-indent:-9000px;display:block;}
    .BtExit a:hover {width:93;height:28;text-indent:-9000px;display:block;}
    #Wrapper01 .BtExit {background:url(exit_n.jpg) no-repeat;}
    #Wrapper02 .BtExit {background:url(exit_o.jpg) no-repeat;}

    .UserInfo{position:absolute;left:427px;top:63px;color:#c9f3ff;font:14px;} 
</style>
<script language="javascript">
<!--

var CanStart;

function SetNoticeUrl(url)
{
    document.getElementById("NoticeFrame").src = url;
    //alert(NoticeFrame.src);
}

function _onGameStart()
{
    
}

function get_CanStart()
{
    return CanStart
}

function _null() {}

function OnAllDone()
{
    var e = document.getElementById("startGame");

    if(agreement.checked)
    {
       e.parentElement.className = "BtGamestart";
       e.onclick = _onGameStart;
    }

    CanStart=1

    SetCurrentProgress(1, 1);
    SetTotalProgress(1, 1);

    lblStatus.innerText = "";
    InstallTxtPer.innerText = "更新完成,請點選開始遊戲按扭";
    //external.FlashWindow();
}

function checkAgreement()
{
   if(agreement.checked)
   {
      var barTotal = document.getElementById("barTotal");

      if(barTotal.width == 671)
      {
         var sb = document.getElementById("startGame");
         sb.parentElement.className = "BtGamestart";
         sb.onclick = _onGameStart;
      } 
   }
   else
   {
      var e = document.getElementById("startGame");
      e.parentElement.className = "BtGamestart_d";
      e.onclick = _null;      
   }
}

function SetTotalProgress(cur, total)
{
    //lblTotal.innerText = cur.toString() + "/" + total.toString();
    var lblTotal = document.getElementById("InstallTxtPer");
    if (lblTotal != null)
    {
        lblTotal.innerText = "進度 " + Math.round((cur/total * 100.0)) + "%";
    }
    var barTotal = document.getElementById("barTotal");
    if (barTotal != null)
    {
        barTotal.width = (cur/total) * barTotal.parentElement.offsetWidth;
    }
}

function SetCurrentProgress(cur, total)
{
    barCurrent.width = cur/total * barCurrent.parentElement.offsetWidth;
}

var g_output = "";
function Output(s)
{
    g_output += s + "<br>";
}
function SetStatusText(name)
{g_output
    //lblCurrent.innerText = name + " (" + cur + "/" + total + ")";
    lblStatus.innerText = name;
    //barCurrent.width = 0;
}
// -->
</script>
</head>

<body oncontextmenu="return false" onselectstart="return false;">
<script language="javascript">
<!--
var tag = '<div id="{0}">'
document.write(tag.replace('{0}', Math.random() < 0.5 ? 'Wrapper01' : 'Wrapper02'));
//-->
</script>
    <div id="Install">

        <div id="BarTotalDiv"><img id="barTotal" src="bar_total.gif" width="0%" height="6"></div>
        <div id="BarNowDiv"><img id="barCurrent" src="bar_now.gif" width="0%" height="6"></div>
        <div id="InstallTxt"><span id="InstallTxtPer">進度 0%</span><span id="lblStatus">Now Downloading...</span></div>
    </div>
    
    <span class="BtClose"><a href="javascript:_null()" id="closeGame">Close</a></span>
    <span class="BtGamestart_d"><a href="javascript:_null()" id="startGame">Start</a></span>
    <span class="BtExit"><a href="javascript:_null()" id="exitGame">Exit</a></span>
    <span class="UserInfo"><a href="http://tw.beanfun.com/cso/support_06.aspx" target="_blank">[遊戲服務合約書]</a></span>
    <span style="position:absolute;right:30px;top:63px;color:#ffffff;font:14px;"><input name="agreement" type="checkbox" value="0" onClick="checkAgreement()">我已閱讀並同意</span>
    <span style="position:absolute;right:30px;top:83px;color:#b4b4b4;">我已閱讀並同意遊戲服務合約書</span>
    
    <iframe src="http://tw.beanfun.com/cso/www/game_login.aspx" id="NoticeFrame" frameborder="0" width="100%" height="100%"  marginwidth="0" marginheight="0" scrolling="no" allowtransparency="true"></iframe>
    
</body>
</html>




可以下載看看,我已經把 進度列 等全部模擬完成

接下來你只要去修改 操控進度列的函數(在程式中),就能輕易達到更新的效果


不過這全拜 CSO 更新器是以 "HTML" 方式來執行所賜,所以在程式中,其實只用了一個 WebBrowser 而已

那些 Image 全部都是在 WebBrowser 裡面,因此位置、大小、觸發程序 都已經被 HTML碼設定好了

VB程式中只需要 攔截觸發,呼叫函數,還有判斷函數的值就行了,那些進度列的樣式都已經被設定好了,真方便


現在已經幾乎與 CSO 更新器一模一樣,只差進度列更新時不太一樣









CSOLauncher_Simulation 程式下載:


本帖包含附件
zip CSOLauncher_Simulation.rar   (2022-06-09 14:18 / 221 KB)   下載次數:32


My BOINC stats :

獻花 x1 回到頂端 [6 樓] From:台灣寬頻通訊顧問股份有限公司 | Posted:2011-08-10 09:12 |
n3ph223172
個人頭像
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x22 鮮花 x87
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
Re:第二版 遊戲更新器 模擬
下面是引用 ebolaman 於 2011-08-10 09:12 發表的 第二版 遊戲更新器 模擬: 到引言文
關於 VB.NET 好像是 VB 2005 的前身,這我也搞不太清楚
總之大家都習慣把 VB 分為兩階段,一個是 古老的 VB6 另外一個就是 VB.NET
至於該稱呼 VB.NET 還是 2005, 2008, 2010 這我就不知道



.......

感謝大大詳細的指導,在送上500元。
但您提到的"現在已經幾乎與 CSO 更新器一模一樣,只差進度列更新時不太一樣"
哪裡不一樣呢?
另外由於本人是個VB新手
因此大大提到的"必須加入 Timer : timer_check_obj_stat (Interval = 100, Enabled=0) , timer_simul_prg (Interval = 1000, Enabled=0)"
小弟不曉得加在哪裡…
而若依照大大的form底下的代碼:
會有以下錯誤:
複製程式
錯誤 1 Handles 子句需要 WithEvents 變數,該變數定義於包含型別或它的一種基底型別中。 C:\Users\Chiu\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb 70 111 WindowsApplication1
錯誤 2 'timer_check_obj_stat' 未宣告。由於其保護層級,可能無法對其進行存取。 C:\Users\Chiu\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb 86 22 WindowsApplication1
錯誤 3 Handles 子句需要 WithEvents 變數,該變數定義於包含型別或它的一種基底型別中。 C:\Users\Chiu\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb 90 106 WindowsApplication1
錯誤 4 'timer_simul_prg' 未宣告。由於其保護層級,可能無法對其進行存取。 C:\Users\Chiu\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb 101 13 WindowsApplication1
錯誤 5 'timer_simul_prg' 未宣告。由於其保護層級,可能無法對其進行存取。 C:\Users\Chiu\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb 107 9 WindowsApplication1
錯誤 6 'timer_check_obj_stat' 未宣告。由於其保護層級,可能無法對其進行存取。 C:\Users\Chiu\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb 162 9 WindowsApplication1
錯誤 7 'timer_simul_prg' 未宣告。由於其保護層級,可能無法對其進行存取。 C:\Users\Chiu\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb 239 9 WindowsApplication1


[ 此文章被n3ph223172在2011-08-10 13:54重新編輯 ]


獻花 x0 回到頂端 [7 樓] From:臺灣中華電信股份有限公司 | Posted:2011-08-10 12:59 |
ebolaman 手機 會員卡
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎

級別: 副版主 該用戶目前不上站
版區: 程式設計
推文 x38 鮮花 x458
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
Re:Re:第二版 遊戲更新器 模擬
下面是引用 n3ph223172 於 2011-08-10 12:59 發表的 Re:第二版 遊戲更新器 模擬: 到引言文
 
感謝大大詳細的指導,在送上500元。
但您提到的"現在已經幾乎與 CSO 更新器一模一樣,只差進度列更新時不太一樣"
哪裡不一樣呢?

介面已經完全一樣

就是更新時的文字 "檔案下載中..." "更新中" "解壓縮中..." 等文字不太一樣


複製程式
Dim arrPack(,) = {{"Server Info", 100, "伺服器訊息"}, {"Map", 3000, "地圖檔"}, {"Amxx", 888, "插件平台"}, {"Plugin", 1999, "插件"}}

上面的模擬器我是用了這樣子 去稍微模擬

進度列是 用 Timer 去跑的,所以並不是真正的下載並安裝,還要改成你說的 FTP 下載

那些下載時說明的文字,就得要自己去打

你可以看看 CSOLauncher.exe 的資源檔的 String 部分,大概分為 下載、解壓縮、安裝、驗證 四個部分而已




還有,要操控 WebBrowser 中的進度列與狀態文字,用以下方法達成 (都能在上面回覆中的程式碼找到)

複製程式
        'Set total progress
        ObjArr(0) = CObj(prg.accum_total) '藍色桿子的 目前數值
        ObjArr(1) = CObj(prg.accum_max) '藍色桿子的 總數值
        local_wb_callScript("SetTotalProgress", ObjArr)

        'Set current progress
        ObjArr(0) = CObj(prg.cur_val) '灰色桿子的 目前數值
        ObjArr(1) = CObj(prg.cur_max) '灰色桿子的 總數值
        local_wb_callScript("SetCurrentProgress", ObjArr)

        'Set status
        ObjArr(0) = CObj("Installing...") '狀態文字
        local_wb_callScript("SetStatusText", objArr)


My BOINC stats :

獻花 x1 回到頂端 [8 樓] From:台灣寬頻通訊顧問股份有限公司 | Posted:2011-08-10 13:51 |
ebolaman 手機 會員卡
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎

級別: 副版主 該用戶目前不上站
版區: 程式設計
推文 x38 鮮花 x458
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

直接給你 VB 2010 專案吧


本帖包含附件
zip CSO_Launcher_Simulation_(Include_VB_Project).rar   (2022-06-09 14:18 / 795 KB)  
說明: | Filetype : RAR | CRC-32 : C02338D7
下載次數:24


My BOINC stats :

獻花 x0 回到頂端 [9 樓] From:台灣寬頻通訊顧問股份有限公司 | Posted:2011-08-10 14:00 |

<<   1   2   3   4   5  下頁 >>(共 7 頁)
首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.059582 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言