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

Signaler
Messages postés
11
Date d'inscription
lundi 22 septembre 2003
Statut
Membre
Dernière intervention
23 mai 2008
-
Messages postés
11
Date d'inscription
lundi 22 septembre 2003
Statut
Membre
Dernière intervention
23 mai 2008
-
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

Messages postés
11
Date d'inscription
lundi 22 septembre 2003
Statut
Membre
Dernière intervention
23 mai 2008

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.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
mentionné quotidiennement sur le forum...
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
Salut,

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

__________
  Kenji
Messages postés
11
Date d'inscription
lundi 22 septembre 2003
Statut
Membre
Dernière intervention
23 mai 2008

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...
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
Ajoute le mot clé Shared :
<Runtime.InteropServices.DllImport("user32")> _
Private Shared Function GetFocus() As IntPtr
End Function

__________
  Kenji
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
encore hier Casy le [re]mentionnait dans un topic

@++

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

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ù?
Messages postés
11
Date d'inscription
lundi 22 septembre 2003
Statut
Membre
Dernière intervention
23 mai 2008

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ù?