Как обновить выигрышные формы, используя vb.net? - PullRequest
0 голосов
/ 28 июля 2011

Я работаю для формы регистрации приложения, и я хотел бы знать, когда пользователь открывает форму регистрации, мне нужно проверить, является ли текущая дата истинной или нет, и когда пользователь пытается изменить системную дату, он должен всплыть сообщениеТак что я хотел бы обновлять форму каждую секунду и выяснить, изменил ли он дату или нет.Как мне это сделать?

Вот мой код:

 btnRegister.Enabled = False
    Dim oReg As Microsoft.Win32.RegistryKey
    oReg = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software", True)
    oReg = oReg.CreateSubKey(kstrRegSubKeyName)
    oReg = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\" & kstrRegSubKeyName)
    Dim strOldDay As String = oReg.GetValue("UserSettings", "").ToString
    Dim strOldMonth As String = oReg.GetValue("operatingsystem", "").ToString
    Dim strOldYear As String = oReg.GetValue("GUID", "").ToString
    Dim strRegName As String = oReg.GetValue("USERID", "").ToString
    Dim strRegCode As String = oReg.GetValue("LOCALPATH", "").ToString
    Dim strCompID As String = oReg.GetValue("CompID", "").ToString
    Dim strTrialDone As String = oReg.GetValue("Enable", "").ToString
    oReg.Close()

    'If the keys should automatically be created, then create them.
    If strOldDay = "" Then
        CreateRegKeys(txtPassPhrase.Text)
    End If

    'If the keys are encrypted, decrypt them.
    'If EncryptKeys = True Then
    strOldDay = Decrypt(txtPassPhrase.Text, strOldDay)
    strOldMonth = Decrypt(txtPassPhrase.Text, strOldMonth)
    strOldYear = Decrypt(txtPassPhrase.Text, strOldYear)
    'End If

    'Define global variables.
    mintUsedTrialDays = DiffDate(strOldDay, strOldMonth, strOldYear)

    'Fill the progress bar
    lblApplicationStatus.Text = DisplayApplicationStatus(DiffDate(strOldDay, strOldMonth, strOldYear), mintTrialPeriod)

    'Disable the continue button if the trial is over
    If DiffDate(strOldDay, strOldMonth, strOldYear) > mintTrialPeriod Then
        'unregbutton.Enabled = False
        mblnInTrial = False
        btnRemind.Enabled = False
        oReg = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software", True)
        oReg = oReg.CreateSubKey(kstrRegSubKeyName)
        oReg.SetValue("Enable", "1")
        oReg.Close()
    End If




    If strOldMonth = "" Then

    Else

        Dim dtmOldDate As Date = New Date(Convert.ToInt32(strOldYear), Convert.ToInt32(strOldMonth), Convert.ToInt32(strOldDay))
        If Date.Compare(DateTime.Now, dtmOldDate) < 0 Then
            'lblApplicationStatus.Text = DisplayApplicationStatus(mintTrialPeriod, mintTrialPeriod)
            lblApplicationStatus.Text = "The system clock has been manually changed, and the application has been locked out to prevent unauthorized access!"
        End If
    End If


    'If the trial is done then disable the button
    If strTrialDone = "1" Then
        mblnInTrial = False
        btnRemind.Enabled = False
        lblApplicationStatus.Text = "The system clock has been manually changed, and the application has been locked out to prevent unauthorized access!"
    End If

    'See if the user is already registered, if so re-process the info and check if the computer is all okay.,
    If strRegName = "" Then
    Else
        Dim strRN As String = Decrypt(txtPassPhrase.Text, strRegName)
        Dim strRC As String = Decrypt(txtPassPhrase.Text, strRegCode)
        Dim UserName As String = strRegName
        UserName = UserName.Remove(16, (UserName.Length - 16))
        If UserName = Decrypt(txtPassPhrase.Text, strRegCode) Then
            If Encrypt(txtPassPhrase.Text, cHardware.GetMotherBoardID.Trim.ToString) = strCompID Then
                mblnInTrial = False
                mblnFullVersion = True
                strRC = strRC.Insert(4, "-")
                strRC = strRC.Insert(8, "-")
                strRC = strRC.Insert(12, "-") 'Add dashes to make it look cool
                lblApplicationStatus.Text = "Licensed version to " + strRN + " with the key " + strRC
                txtVKClientName.Enabled = False
                txtKeyToValidate.Enabled = False
                txtVKClientName.Text = strRN
                txtKeyToValidate.Text = strRC
                btnRemind.Text = "Registered"
                frmMain.Text = "Aquamark v1.2(Registered)"
                btnRegister.Hide()
                Me.Close()
                frmMain.Show()
                oReg = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software", True)
                oReg = oReg.CreateSubKey(kstrRegSubKeyName)
                oReg.SetValue("Enable", "")
                oReg.Close()
            End If
        End If
    End If

Ответы [ 2 ]

0 голосов
/ 28 июля 2011

НЕТ, вам не нужно "refresh the form for every second and find whether he has changed the date or not. How do I do that", решение намного проще

Окна отправят сообщение всем приложениям при изменении данных.Вместо этого слушайте это сообщение, и всякий раз, когда измененные данные делают то, что вы хотите сделать, так:

// C # извините, я не знаю VB, но код прост, и вы должны преобразовать его без проблем

private DateTime _lastSystemClockChanged = DateTime.MinValue;

protected override void WndProc(ref Message m)
{
    switch (m.Msg)
    {
        case 0x1E://the time is changed. 
            //to avoid receiving duplicate notification about time changed
            if (_lastSystemClockChanged.AddSeconds(1) < DateTime.Now ||
                _lastSystemClockChanged > DateTime.Now)
            {
                _lastSystemClockChanged = DateTime.Now;
                //do what ever you want to do when time changed. note you should 
                //not call a methods that will block here because of you will block 
                //this message from arriving to other applications then
            }
            break;
    }
    base.WndProc(ref m);
}
0 голосов
/ 28 июля 2011

Вы можете подписаться на событие SystemEvents.TimeChanged , которое вызывается, когда пользователь меняет время на системных часах. Не забудьте отсоединить обработчик события, когда форма закрывается, так как это статическое событие.

Вы можете сохранить дату в поле и сравнить новую дату с ней при изменении системного времени или просто отключить приложение при возникновении события.

...