cs_slysylvestre
Messages postés11Date d'inscriptionlundi 22 septembre 2003StatutMembreDernière intervention23 mai 2008
-
23 mai 2008 à 11:41
cs_slysylvestre
Messages postés11Date d'inscriptionlundi 22 septembre 2003StatutMembreDernière intervention23 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?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
cs_slysylvestre
Messages postés11Date d'inscriptionlundi 22 septembre 2003StatutMembreDernière intervention23 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.
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ù?
cs_slysylvestre
Messages postés11Date d'inscriptionlundi 22 septembre 2003StatutMembreDernière intervention23 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ù?