VB 2800 & API... y a une astuce?

cs_slysylvestre Messages postés 11 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 23 mai 2008 - 23 mai 2008 à 11:41
cs_slysylvestre Messages postés 11 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 23 mai 2008 - 23 mai 2008 à 23:22
Bonjour,
Plusieurs jours que je cherche en vain sans résultat, j'en appelle à vos lumières.
Sous VB2008, je n'arrive à rien avec les API.
Il m'est toujours retourné des valeurs incorrectes.
Avec le code ci-dessous par exemple:



<hr />
Public



Class
Test


Private



Declare



Function
SetWindowText

Lib



"user32.dll"



Alias



"SetWindowTextA"
(

ByVal
hwnd

As



Long
,

ByVal
lpString

As



String
)

As



Long

Private



Declare



Function
GetFocus

Lib



"user32.dll"
()

As



Long






Public



Shared



Sub
Main()


Dim
L1

As



Long

L1 = GetFocus()


SetWindowText(L1,




"Test"
& Chr(0))


MsgBox(Hex(L1), MsgBoxStyle.Information)


End



Sub
End



Class
<hr />GetFocus me retourne &h77100F3400000000 (8579374006153510912), et ce, quel que soit la fenêtre active.
J'ai essayé en C#, même topo, j'ai essayé avec pas mal d'API, itoo, à chaque fois, les valeurs qui me sont retournées sont inutilisables.
J'suis sous vista.
J'ai comme la sensation qu'il est une astuce énorme, grosse comme mon pif sur ma tronche. De là où vous êtes, vous voyez pas?

Merci d'avance de vos bonnes volontés.

9 réponses

cs_slysylvestre Messages postés 11 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 23 mai 2008
23 mai 2008 à 11:47
Public
Class Test



Private
Declare
Function GetFocus Lib"user32.dll" () AsLong





Public
Shared
Sub Main()
Dim L1 AsLong




L1 = GetFocus()





End



Sub
End



Class






<hr />


Ayant foiré le copiécollé, je remet le code exemple.

Merci d'avance de vos bonnes volontés.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 mai 2008 à 12:00
Salut
C'est parce que le nom des types de variables désignent des types différents d'avec la syntaxe API fournie pour VB6.
  VB6         Net
Long    --> Integer
Integer --> Short

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 mai 2008 à 12:26
mentionné quotidiennement sur le forum...
0
Utilisateur anonyme
23 mai 2008 à 12:56
Salut,

La vrai déclaration en dotnet :
<Runtime.InteropServices.DllImport("user32")> _
Private Function GetFocus() As IntPtr
End Function

__________
  Kenji
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_slysylvestre Messages postés 11 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 23 mai 2008
23 mai 2008 à 13:05
voui, j'ai bien tenter de remplacer Long par Integer, mais en ce cas, il m'est renvoyé 0.
J'ai tenté de remplacer la déclaration par:
<Runtime.InteropServices.DllImport("user32")> _
Private Function GetFocus() As IntPtr
End Function

Mais il me mets:
Erreur 1 'System.Runtime.InteropServices.DllImportAttribute' ne peut pas être appliqué à une méthode d'instance. 

Je sèche, déssèche et tourne en rond...
0
Utilisateur anonyme
23 mai 2008 à 13:10
Ajoute le mot clé Shared :
<Runtime.InteropServices.DllImport("user32")> _
Private Shared Function GetFocus() As IntPtr
End Function

__________
  Kenji
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 mai 2008 à 13:22
encore hier Casy le [re]mentionnait dans un topic

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
0
cs_slysylvestre Messages postés 11 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 23 mai 2008
23 mai 2008 à 22:07
Imports



Microsoft.Win32


Imports
System.Runtime.InteropServices


Public



Class
Test


<Runtime.InteropServices.DllImport(

"user32"
)> _


Private



Shared



Function
GetFocus()

As
IntPtr


End



Function






Private



Declare



Function
SetWindowText

Lib



"user32.dll"



Alias



"SetWindowTextA"
(

ByVal
hwnd

As



Long
,

ByVal
lpString

As



String
)

As



Long






Public



Shared



Sub
Main()


Dim
L1

As
IntPtrL1 = GetFocus()
SetWindowText(L1,


"Test"
& Chr(0))
MsgBox(Hex(L1), MsgBoxStyle.Information)







End



Sub
EndClass
<hr />Tout à l'air bon... et pourtant que nenni, GetFocus me renvoie toujours 0.
J'ai testé avec GetActiveWindow(): pareil.
Pareil en compilé...
Je vous remercie de vous pencher sur ce truc, qui j'en suis sur, tient d'une erreur évidente... mais où?
0
cs_slysylvestre Messages postés 11 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 23 mai 2008
23 mai 2008 à 23:22
Imports



Microsoft.Win32
Imports

System.Runtime.InteropServices


Public



Class
Test


<Runtime.InteropServices.DllImport(

"user32"
)> _


Private



Shared



Function
GetFocus()

As
IntPtr


End



Function






Public



Shared



Sub
Main()


Dim
L1

As
IntPtr
L1 = GetFocus()



MsgBox(Hex(L1), MsgBoxStyle.Information)








End



Sub
EndClass
<hr />
Reposté épuré
Tout à l'air bon... et pourtant que nenni, GetFocus me renvoie toujours 0.
J'ai testé avec GetActiveWindow(): pareil.
Pareil en compilé...
Je vous remercie de vous pencher sur ce truc, qui j'en suis sur, tient d'une erreur évidente... mais où?
0
Rejoignez-nous