Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    9

    [VB2010-windows form, notifyIcon] problema multi Thread o Notify Icon

    Salve a tutti,

    innanzitutto complimenti x il forum e x la competenza! consultando le vostre pagine ho risolto molti problemi che opprimevano la mia programmazione xD

    detto questo, arrivo al punto! sto cercando di realizzare un programma multi thread senza interfaccia grafica ma ho riscontrato un problema: nn capisco se il programma non funziona causa problemi tra l'esecuzione del 2° thread e l'application.run del 1° thread ke mi serve a visualizzare il menù contestuale

    nel 1° thread (main) ho solo il menu contestuale mentre nel secondo c'è un ciclo for che controlla continuamente se l'utente digita una sequenza di numeri (password) confrontando i numeri digitati con quelli memorizzati su una stringa

    seguendo passo passo la funzione del 2° thread sembra funzionare, ma una volta eseguito un debug pur digitando la password non accade nulla

    ecco il codice che ho reallizato
    codice:
    'ometto dichiarazioni voci menù
    Public Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Keys) As Integer
    Dim T As New Threading.Thread(AddressOf get_num)
    
    Sub Main()
            Init()
            thread_start()
            nfiIcona.Visible = True
            Application.Run()
        End Sub
    
    sub init()
    'creo il menù
    ... 
    ...
    end sub
    
    sub thread_start()
    T.IsBackground = True
    T.Start()
    End Sub
    
    sub get_num()
    
    pwctrl = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\PcLockInfo", "Pw", Nothing)
    
            If pwctrl <> "" Then
    
                ReDim pos(0 To Len(pwctrl) - 1)
    
                For i = 0 To Len(pwctrl) - 1
                    c += 1
                    pos(i) = Mid(pwctrl, c, 1)
                Next i
    
                Do
                    For e = 48 To 57
                        b = 0
                        b = GetAsyncKeyState(e)
                        '   b = -32767
                        If m < Len(pwctrl) Then
                            If b = -32767 And Chr(e) = pos(m) Then
                                m += 1
                                h = h & Chr(e)
                            Else
                                h = ""
                                m = 0
                            End If
                        End If
                        Threading.Thread.Sleep(100)
                        If h = pwctrl Then
                            Exit For
                        End If
                    Next e
    
                Loop Until h = pwctrl
    
                MsgBox(h, 16, "")
    
            Else
                nopass()
            End If
    end sub

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    9
    ho appurato ke il problema nn sn i thread

    il tutto sta nella funzione get_num ke è errata, la sto riguardando
    in pratica la funzione dovrebbe:

    leggere la kiave di sistema contenente la pw salvata in precedenza
    scomporla in un array (pos)
    verificare lo stato dei tasti "numerici" ( da 0 a 9)
    se viene premuto il primo numero della pw la funzione lo salva sulla stringa h
    se dopo il primo vengono premuti gli altri tasti della pw in successione, vengono aggiunti ad h
    fino a quando h risulta = alla pw
    altrimenti h vieni svuotata e si ricomincia

  3. #3
    Il problema è che, con il codice che hai postato tu, m diventa 0 il ciclo subito succesivo a quello che la incrementa di 1.
    Per risolvere, devi: Prima verificare che il tasto premuto sia tra quelli che vuoi controllare .... e poi decidere se incrementare m, in funzione del fatto che il tasto premuto sia tra quelli che compongono la password oppure no.

    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.