Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Sendmessage API handle diverso
Forum - C# / VB.NET - Sendmessage API handle diverso

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
tatino (Normal User)
Rookie


Messaggi: 27
Iscritto: 10/09/2013

Segnala al moderatore
Postato alle 19:39
Giovedì, 14/11/2013
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.



tatino ha allegato un file: Immagine.png (6740 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da tatino il 14/11/2013 alle 19:51


Saluti!

Salvo G.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5462
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:03
Giovedì, 14/11/2013
Evidentemente c'è qualche differenza nei due progetti.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
tatino (Normal User)
Rookie


Messaggi: 27
Iscritto: 10/09/2013

Segnala al moderatore
Postato alle 20:09
Giovedì, 14/11/2013
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.


Saluti!

Salvo G.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5462
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:10
Giovedì, 14/11/2013
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 ...
PM Quote
Avatar
tatino (Normal User)
Rookie


Messaggi: 27
Iscritto: 10/09/2013

Segnala al moderatore
Postato alle 20:17
Giovedì, 14/11/2013
Ma certo ci mancherebbe, non l'ho fatto per il semplice fatto che sono identici.

Progetto funzionante:
Codice sorgente - presumibilmente VB.NET

  1. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  2.     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
  3.     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
  4.     Private Const EM_REPLACESEL = &HC2
  5.     Private Const WM_KEYDOWN = &H100
  6.     Private Const WM_KEYUP = &H101
  7.     Private Const VK_RETURN = &HD
  8.  
  9.     Public Sub setnewtext(ByVal strBarcode As String)
  10.         Dim hWndForm As Long
  11.         Dim hTxtBox As Long
  12.         ' cerco la finestra
  13.         hWndForm = FindWindow(vbNullString, "titolo_programma")
  14.         'stampo l'handle
  15.         MsgBox(hWndForm)
  16.  
  17.         If (hWndForm = 0) Then
  18.             MsgBox("L'applicazione cercata non è attiva.", vbExclamation)
  19.             Exit Sub
  20.         End If
  21.  
  22.         ' cerco il textbox che mi serve
  23.         hTxtBox = FindWindowEx(hWndForm, 0&, "Edit", vbNullString)
  24.                 If (hTxtBox = 0) Then
  25.             Exit Sub
  26.         End If
  27.  
  28.         'invio il testo piu' tasto invio di conferma
  29.         SendMessage(hTxtBox, EM_REPLACESEL, 0&, CStr(strBarcode))
  30.         SendMessage(hTxtBox, WM_KEYDOWN, VK_RETURN, 0)
  31.         SendMessage(hTxtBox, WM_KEYUP, VK_RETURN, 0)
  32.     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 il 14/11/2013 alle 20:21


Saluti!

Salvo G.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5462
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:36
Giovedì, 14/11/2013
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 ...
PM Quote
Avatar
tatino (Normal User)
Rookie


Messaggi: 27
Iscritto: 10/09/2013

Segnala al moderatore
Postato alle 20:45
Giovedì, 14/11/2013
: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.


Saluti!

Salvo G.
PM Quote
Avatar
Snogar (Normal User)
Pro


Messaggi: 130
Iscritto: 09/01/2012

Segnala al moderatore
Postato alle 11:40
Lunedì, 18/11/2013
Scusa ma non fai pima a fare così per recuperare l'handle?

Codice sorgente - presumibilmente Plain Text

  1. Me.Handle.ToInt32



PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5462
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:49
Lunedì, 18/11/2013
Testo quotato

Postato originariamente da Snogar:

Scusa ma non fai pima a fare così per recuperare l'handle?

Codice sorgente - presumibilmente Plain Text

  1. Me.Handle.ToInt32




Quello è l'handle del form non di una qualsiasi finestra attiva sul sistema


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo