广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 30070 个阅读者
 
<<   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.082596 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言