none
VB2008 開啟程式次數問題 RRS feed

  • 問題

  • 我想問一問,如果我想設定每一天,只可以 開啟 程式 一次

    不能 開多過一次 程式,要開多一次,就要等明天,先可以再 開啟程式

    應該怎樣?

    2011年12月14日 上午 10:58

解答

  • Imports Microsoft.Win32
    
    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim LastRunDateCode As Integer  '上次執行日期轉成的數字
            Dim TodayCode As Integer = CInt(Today.ToString("yyyyMMdd")) '今天日期轉成的數字, ex. 20111216
            Dim RegKey As RegistryKey = Registry.CurrentUser.OpenSubKey("Ader\Demo", True) '儲存在RegistryKey
    
            If IsNothing(RegKey) Then RegKey = Registry.CurrentUser.CreateSubKey("Ader\Demo")
    
            Integer.TryParse(RegKey.GetValue("LastRunDateCode", "0"), LastRunDateCode)
    
            If TodayCode > LastRunDateCode Then
                '今天尚未執行過
                RegKey.SetValue("LastRunDateCode", CStr(TodayCode)) '記下今天已執行過
    
            Else
                '已執行過, 關閉Form
                Me.Close()
    
            End If
        End Sub
    
    End Class
    
    


    以上供參考.

     

    • 已標示為解答 手指 2011年12月19日 下午 12:03
    2011年12月16日 上午 06:31
    • 已標示為解答 手指 2011年12月19日 下午 12:03
    2011年12月16日 下午 04:39
  • 不好意思, 我尚未測試你的程式, 只是稍微建議:
    A> 如果你是電腦的管理者, 而且有權力限制使用者的話, 建議如 Jess KEE 所述, 讓使用者以[標準使用者]權限使用電腦, 不讓他更改日期, 簡單又安全.
    B> 如果無權力限制使用者, 那建議如 河蟹魂 前輩提供的網址 sample, 取得網路時間伺服器的日期... 不過若使用者把網路線拔掉就有問題了, 可能要再加個若網路無連線(不能取得網路時間伺服器的日期)時也不讓執行程式...
    以上僅供參考.
    • 已標示為解答 手指 2011年12月19日 下午 12:03
    2011年12月17日 下午 03:00
  • 存在 Registry 裡面. 
    可以在[命令提示字元]以 regedit 觀看/編輯.
    完整的路徑是 HKEY_CURRENT_USER\Ader\Demo
    這只是舉例用的, 非一定要照我的位置存取,
    下面這行是當不存在時就建立此SubKey:
    If IsNothing(RegKey) Then RegKey = Registry.CurrentUser.CreateSubKey("Ader\Demo")
    若想設定所謂的到期日, 不建議用那段程式改.
    建議另外先寫個將日期編碼(防竄改)後寫入 Registry 的程式,
    而主程式讀取 Registry 的設定, 做日期是否到期、到期日是否被竄改的檢查,
    Registry 等相關資料在 MSDN 與此論壇都能找到範例.
    以上供您參考
    • 已標示為解答 手指 2011年12月19日 下午 12:03
    2011年12月19日 上午 04:23

所有回覆

  • 您好

    想辦法去紀錄開啟的時間,然後執行程式時去判斷

    1. 使用user setting來存放資料

    http://www.dotblogs.com.tw/bauann/archive/2008/10/12/5660.aspx

    2. 寫在登錄檔,Registry 類別

    http://msdn.microsoft.com/zh-tw/library/microsoft.win32.registry.aspx


    歡迎參觀我的Blog.NET菜鳥自救會

    2011年12月14日 上午 11:24
    版主
  • 謝謝你 ^^

    我用了你說的方法,使用user setting

    紀錄開啟的時間

    我設定15分鐘 程式,就會 關閉

    關閉 時,就會 紀錄關閉的時間

    我的方向有錯??

    我還要 做怎麼,才可以做到,,,每一天,只可以開一次程式?

    2011年12月14日 下午 01:51
  • 你好,你需要記錄時間,flag 進入註冊表吖。

     

     


    http://mysftway.blogspot.com/ 熱誠熱心地幫忙大家! 希望與大家切磋技術哦~
    2011年12月14日 下午 03:06
  • 你好 JESS KEE ^^

    謝謝你 ^^

    我會寫 記錄時間 的 部份,但是不明白你說的 ""flag 進入註冊表吖。""

    2011年12月14日 下午 03:20
  • 方向沒錯,就是記錄時間,開啟的時候先檢查今天執行過了沒。
    2011年12月14日 下午 04:07
  • flag 就代表1或0 boolean 。

    其實就看你程式怎麼設計而已。

    建議先想看流程應該是怎樣,把流程畫在紙張上,這樣比較好理解。


    http://mysftway.blogspot.com/ 熱誠熱心地幫忙大家! 希望與大家切磋技術哦~
    2011年12月15日 上午 09:06
  • 謝謝你 ^^

    我寫完 記錄時間,,就停下來了

    我想不到,,,可以 給我 流程圖?

    我想 跟據 流程 ,再試試 寫

    我不懂 流程

    可以 幫我嗎?


    • 已編輯 手指 2011年12月15日 上午 11:28
    2011年12月15日 上午 11:27
  • 你好,我可以大概提供你,

    現在您已經記錄到時間了,

    所以你還必須做的東西就是在程式開啟時,檢查看時間是當天嘛,如果不是當天時間代表當天沒有開過,直接運行程式就好。

    flag 就可以當做開過程式嗎。

    大概就這樣子呀,你邊寫邊思考,就可以了。重點是想接下來應該是什麽動作。


    http://mysftway.blogspot.com/ 熱誠熱心地幫忙大家! 希望與大家切磋技術哦~
    2011年12月15日 上午 11:41
  • Public Class Form1
        Public day As String
        Public month As String
        Public year As String
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            day = My.Computer.Clock.LocalTime.Day
            month = My.Computer.Clock.LocalTime.Month
            year = My.Computer.Clock.LocalTime.Year
            If My.Settings.checked = False Then
                My.Settings.day = day
                My.Settings.month = month
                My.Settings.year = year
                My.Settings.checked = True
            Else
                If year = My.Settings.year Then
                    If month = My.Settings.month Then
                    Else
                        If month = My.Settings.month + 1 Then
                            If day = My.Settings.day Then
                                MsgBox("Trial is over")
                            Else
                                If day > My.Settings.day Then
                                    MsgBox("Trial is over")
                                End If
                            End If
                        Else
                            If month <> My.Settings.month + 1 Then
                                MsgBox("Trial is over")
    
                            End If
                        End If
                    End If
                Else
                    MsgBox("Trial is over")
                End If
    
            End If
    
        End Sub
    End Class


    想不通了..

    2011年12月15日 下午 02:34
  • 檢查看時間是當天,如果不是當天時間代表當天沒有開過,直接運行程式

    應該 怎樣?

    2011年12月15日 下午 02:35
  • 你主要目的只是一天只可以開一次程式。

    不必要flag 了。當程式打開時,你就檢查時間是不是當天日期,如果不是當天就記錄當天日期。如果是當天日期就拒絕開啟程式(代表當天開過了)。

    寫一個function(檢查表內的日期,寫入)

    http://msdn.microsoft.com/zh-tw/library/sect4ck6%28v=vs.80%29.aspx (vb function)

    這樣就好了,整個流程都告訴你了。試試看吧~加油。不要想到太複雜~


    http://mysftway.blogspot.com/ 熱誠熱心地幫忙大家! 希望與大家切磋技術哦~
    2011年12月15日 下午 04:49
  • Imports Microsoft.Win32
    
    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim LastRunDateCode As Integer  '上次執行日期轉成的數字
            Dim TodayCode As Integer = CInt(Today.ToString("yyyyMMdd")) '今天日期轉成的數字, ex. 20111216
            Dim RegKey As RegistryKey = Registry.CurrentUser.OpenSubKey("Ader\Demo", True) '儲存在RegistryKey
    
            If IsNothing(RegKey) Then RegKey = Registry.CurrentUser.CreateSubKey("Ader\Demo")
    
            Integer.TryParse(RegKey.GetValue("LastRunDateCode", "0"), LastRunDateCode)
    
            If TodayCode > LastRunDateCode Then
                '今天尚未執行過
                RegKey.SetValue("LastRunDateCode", CStr(TodayCode)) '記下今天已執行過
    
            Else
                '已執行過, 關閉Form
                Me.Close()
    
            End If
        End Sub
    
    End Class
    
    


    以上供參考.

     

    • 已標示為解答 手指 2011年12月19日 下午 12:03
    2011年12月16日 上午 06:31
  • Ader.Chen 謝謝你,我一看就明白了 ^^
     
    不過,如果我改變 電腦 的時間,就可以  開啟 程式
     
    如果我想 解決 這個 問題,是不是 要找住 網頁 上的時間?
     
    例如:http://tw.yahoo.com/
     
    yahoo的時間
     
    但是 這一方面,我不太懂
     
    我參考了這一個:http://social.msdn.microsoft.com/Forums/zh-TW/232/thread/a399a1ae-68b3-42d9-91b2-97f5234f615d
     
     
    2011年12月16日 上午 10:07
  • Public Class Form1

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(TextBox2.Text)
            Dim response As System.Net.HttpWebResponse = request.GetResponse()

            Dim sr As System.IO.StreamReader = New System.IO.StreamReader(response.GetResponseStream())

            Dim sourcecode As String = sr.ReadToEnd()

            TextBox1.Text = sourcecode

        End Sub

    End Class

    之後我 應該做甚麼?

     我想 找住 網頁 上的時間

    例如:http://tw.yahoo.com/

     麻煩各位前輩指導了,非常感謝!

    • 已編輯 手指 2011年12月16日 下午 04:21
    2011年12月16日 下午 04:19
    • 已標示為解答 手指 2011年12月19日 下午 12:03
    2011年12月16日 下午 04:39
  • 手指 不一定要用網上的時間。

    可以更改本機的電腦,讓使用者無權限更改時間久好了。

    我之前使用XP 時記得有更改過,可以google 一下。

    考慮看連線失敗什麽呢?需要例外處理吖


    http://mysftway.blogspot.com/ 熱誠熱心地幫忙大家! 希望與大家切磋技術哦~
    2011年12月16日 下午 05:04
  • 謝謝各位前輩指導 ^^

    幫我看看程式有沒有 寫錯,,幫我改一改 ^^

    Public Class Form1

        Protected Friend WebBrowser As New WebBrowser
        Private DataDate As Date = Nothing

        Sub Loading(ByRef [web] As WebBrowser)
            Do Until WebBrowser.ReadyState = WebBrowserReadyState.Complete
                Application.DoEvents()
            Loop
        End Sub

        Private Sub GetData()

            For Each [HtmlElement] As HtmlElement In WebBrowser.Document.All
     
                If [HtmlElement].TagName = "SPAN" And IsDate([HtmlElement].OuterText) Then
                    DataDate = CDate([HtmlElement].OuterText)
                End If

                If Not DataDate = Nothing Then
                    ListBoxTitle.Items.Add(DataDate.ToString("yyyy年MM月dd日"))

                    DataDate = Nothing
                End If
            Next
        End Sub
        Private Sub LoadData()
      
            WebBrowser.Navigate("www.yahoo.com.hk")

            Loading(WebBrowser)

            GetData()
        End Sub

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            LoadData()
        End Sub
    End Class

    麻煩各位^^

    是不是成功了?可以顯示網上的時間日期了?


    • 已編輯 手指 2011年12月17日 上午 08:27
    2011年12月17日 上午 08:22
  • 不好意思, 我尚未測試你的程式, 只是稍微建議:
    A> 如果你是電腦的管理者, 而且有權力限制使用者的話, 建議如 Jess KEE 所述, 讓使用者以[標準使用者]權限使用電腦, 不讓他更改日期, 簡單又安全.
    B> 如果無權力限制使用者, 那建議如 河蟹魂 前輩提供的網址 sample, 取得網路時間伺服器的日期... 不過若使用者把網路線拔掉就有問題了, 可能要再加個若網路無連線(不能取得網路時間伺服器的日期)時也不讓執行程式...
    以上僅供參考.
    • 已標示為解答 手指 2011年12月19日 下午 12:03
    2011年12月17日 下午 03:00
  • 麻煩你了,我明白 ^^

    非常感謝!

    我想一部一部來做,,先解決取得網路時間伺服器的日期

    然後,再做網路線拔掉的問題

    麻煩各位 幫我看一看,我寫的有沒有 問題

    麻煩各位了 ^^

    2011年12月17日 下午 03:50
  • 謝謝各位前輩指導 ^^

    幫我看看程式有沒有 寫錯,,幫我改一改 ^^

    Public Class Form1

        Protected Friend WebBrowser As New WebBrowser
        Private DataDate As Date = Nothing

        Sub Loading(ByRef [web] As WebBrowser)
            Do Until WebBrowser.ReadyState = WebBrowserReadyState.Complete
                Application.DoEvents()
            Loop
        End Sub

        Private Sub GetData()

            For Each [HtmlElement] As HtmlElement In WebBrowser.Document.All
     
                If [HtmlElement].TagName = "SPAN" And IsDate([HtmlElement].OuterText) Then
                    DataDate = CDate([HtmlElement].OuterText)
                End If

                If Not DataDate = Nothing Then
                    ListBoxTitle.Items.Add(DataDate.ToString("yyyy年MM月dd日"))

                    DataDate = Nothing
                End If
            Next
        End Sub
        Private Sub LoadData()
      
            WebBrowser.Navigate("www.yahoo.com.hk")

            Loading(WebBrowser)

            GetData()
        End Sub

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            LoadData()
        End Sub
    End Class

    麻煩各位^^

    是不是成功了?可以顯示網上的時間日期了?



    麻煩各位指導!!
    2011年12月18日 下午 02:46
  • 你自己測試可以就可以了, 不行再發問, 你這樣搞好像把我們當做你的程式測試員 ?

    2011年12月18日 下午 03:35
  • 麻煩你了

    我有 自己 測試過,是可以的,不過,

    我想問問,我的寫法,有沒有 問題?

     

    2011年12月18日 下午 04:17
  • Imports Microsoft.Win32
    
    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim LastRunDateCode As Integer  '上次執行日期轉成的數字
            Dim TodayCode As Integer = CInt(Today.ToString("yyyyMMdd")) '今天日期轉成的數字, ex. 20111216
            Dim RegKey As RegistryKey = Registry.CurrentUser.OpenSubKey("Ader\Demo", True) '儲存在RegistryKey
    
            If IsNothing(RegKey) Then RegKey = Registry.CurrentUser.CreateSubKey("Ader\Demo")
    
            Integer.TryParse(RegKey.GetValue("LastRunDateCode", "0"), LastRunDateCode)
    
            If TodayCode > LastRunDateCode Then
                '今天尚未執行過
                RegKey.SetValue("LastRunDateCode", CStr(TodayCode)) '記下今天已執行過
    
            Else
                '已執行過, 關閉Form
                Me.Close()
    
            End If
        End Sub
    
    End Class
    
    


    以上供參考.

     

    請問一下  "Ader\Demo"  這個路徑在哪

    還有  如果我想要的是使用者能使用某年某月某日

    我該如把到期時間寫入到Demo  像下面那樣嗎

     Dim TodayCode As Integer = CInt(Today.ToString("yyyyMMdd"))

     Registry.CurrentUser.SetValue("Demo", TodayCode)

    3q

     

    2011年12月19日 上午 01:29
  • 存在 Registry 裡面. 
    可以在[命令提示字元]以 regedit 觀看/編輯.
    完整的路徑是 HKEY_CURRENT_USER\Ader\Demo
    這只是舉例用的, 非一定要照我的位置存取,
    下面這行是當不存在時就建立此SubKey:
    If IsNothing(RegKey) Then RegKey = Registry.CurrentUser.CreateSubKey("Ader\Demo")
    若想設定所謂的到期日, 不建議用那段程式改.
    建議另外先寫個將日期編碼(防竄改)後寫入 Registry 的程式,
    而主程式讀取 Registry 的設定, 做日期是否到期、到期日是否被竄改的檢查,
    Registry 等相關資料在 MSDN 與此論壇都能找到範例.
    以上供您參考
    • 已標示為解答 手指 2011年12月19日 下午 12:03
    2011年12月19日 上午 04:23