Oppure

Loading
14/11/13 18:39
tatino
Buona sera ragazzuoli!
Una curiosità a cui non riesco a dare risposta...
Come è possibile che il numero di handle di una finestra richiamata mi vari da applicazione ad applicazione?
Mi spiego meglio:
se creo un progetto nuovo e pulito il codice funziona alla grande, appena l'ho implementato nell'applicazione definitiva non funge ed il motivo è presto trovato..il progetto semplice trova l'handle di finestra corretto..mentre nell'applicazione definitiva mi restituisce un handle lunghissimo che non c'entra nulla.
Ripeto, non credo sia un problema di codice in sè ma mi chiedo come mai la stessa funzione mi và a restituire due handle diversi per la stessa finestra cercata :noway::noway:

vi allego uno screen, il popup di sinistra è l'handle corretto.

Grazie e buona serata! :k:

Salvo.

Ultima modifica effettuata da tatino 14/11/13 18:51
aaa
14/11/13 19:03
nessuno
Evidentemente c'è qualche differenza nei due progetti.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
14/11/13 19:09
tatino
Sicuramente si, ma a livello di cosa?
Le variabili sono le stesse, cosa puo' influenzare questa differenza?
Ho fatto la prova ad importare il form del progetto funzionante nel progetto definitivo e genere gli stessi handle del file allegato.
aaa
14/11/13 19:10
nessuno
Ad esempio la dichiarazione della API.

Ma se non mostri i codici dei due progetti, come si fa?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
14/11/13 19:17
tatino
Ma certo ci mancherebbe, non l'ho fatto per il semplice fatto che sono identici.

Progetto funzionante:
 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
    Private Const EM_REPLACESEL = &HC2
    Private Const WM_KEYDOWN = &H100
    Private Const WM_KEYUP = &H101
    Private Const VK_RETURN = &HD
  
    Public Sub setnewtext(ByVal strBarcode As String)
        Dim hWndForm As Long
        Dim hTxtBox As Long
        ' cerco la finestra
        hWndForm = FindWindow(vbNullString, "titolo_programma")
        'stampo l'handle
        MsgBox(hWndForm)

        If (hWndForm = 0) Then
            MsgBox("L'applicazione cercata non è attiva.", vbExclamation)
            Exit Sub
        End If

        ' cerco il textbox che mi serve
        hTxtBox = FindWindowEx(hWndForm, 0&, "Edit", vbNullString)
                If (hTxtBox = 0) Then
            Exit Sub
        End If

        'invio il testo piu' tasto invio di conferma
        SendMessage(hTxtBox, EM_REPLACESEL, 0&, CStr(strBarcode))
        SendMessage(hTxtBox, WM_KEYDOWN, VK_RETURN, 0)
        SendMessage(hTxtBox, WM_KEYUP, VK_RETURN, 0)
    End Sub


Il codice del programma completo è lo stesso identico inserito in una nuova classe e richiamato dalla funzione.
Che parte del codice puo' essere utile riportare?
Ultima modifica effettuata da tatino 14/11/13 19:21
aaa
14/11/13 19:36
nessuno
Quelle dichiarazioni sono sbagliate e provengono da programmi VB6.
E' difficile che funzioni qualcosa e se succede è veramente un caso.

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As IntPtr, ByVal hWnd2 As IntPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As IntPtr

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr

Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
14/11/13 19:45
tatino
:love::love:
Incredibile :hail::hail:

caro nessuno, non conosco il tuo nome ma grazie mille!
sono funzioni che utilizzavo in VB6 e le avevo riciclate in quanto uso davvero poco le API.
La cosa che mi ha tratto in inganno è che comunque effettuando test su progetti temporanei mi andava tutto bene.

Che dire, ti ringrazio ancora e grazie per il tempo dedicatomi.
A buon rendere.
Salvo.
aaa
18/11/13 10:40
Snogar
Scusa ma non fai pima a fare così per recuperare l'handle?

Me.Handle.ToInt32
aaa