OVH Cloud OVH Cloud

Utiliser la commande ATI remote

2 réponses
Avatar
TouTi
Bonsoir

Pourriez-vous m'orienter vers l'utilisation de cette commande pour le
pilotage de certains fonctions d'un programme VB

Je sais récupérer les événements de certaines touches mais pas ceux des
spéciales

J'ai trouvé ce lien http://tcharles.developpez.com/ATI/ mais il ne m'aide
pas vraiment...

Merci

--
TouTi

2 réponses

Avatar
ng
Salut,

Bonsoir

Pourriez-vous m'orienter vers l'utilisation de cette commande pour le
pilotage de certains fonctions d'un programme VB

Je sais récupérer les événements de certaines touches mais pas ceux des
spéciales

J'ai trouvé ce lien http://tcharles.developpez.com/ATI/ mais il ne m'aide
pas vraiment...




Sans plugin spécifique (genre vbAdvance) tu ne pourras pas compiler de
telles DLLs (seulement du COM en vb...) et il faudra te tourner vers du C
ou C++ (ca sera en plus plus facile je pense).

Ce que tu peux faire par exemple c'est faire un composant COM en C++ (avec
ATL) qui servira de plugin, tu pourras ainsi l'appeler en VB facilement (ca
servira ainsi d'interface/de wrapper pour vb).


--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Avatar
TouTi
Nicolas
Sans plugin spécifique (genre vbAdvance) tu ne pourras pas compiler de
telles DLLs (seulement du COM en vb...) et il faudra te tourner vers du C
ou C++ (ca sera en plus plus facile je pense).



Bah j'ai du me résoudre à faire un peu de C++. Avec commande, son créateur
donner le moyen de créer un plugins
http://www.ati.com/developer/ammosdk.html, il suffit de modifier le contenu
certains fichiers, compiler et créer la dll.

Mais j'ai qd même quelques soucis :

* Ce plug teste la présence de l'application à contrôler en utilisant le
classname des fenêtres actives : Malheureusement en VB ce nom est ingérable
: Tous les programmes créés en VB portent le même nom... J'ai du passer par
le WindowName.

HWND hltd = FindWindow(0,"Nom_de_ma_fenetre"); //handle recherché
HWND hForeground = GetForegroundWindow(); //handle fenêtre active
if (hltd == NULL)// Appli is not running
{ MessageBox( 0, "pas pret", "Greetings", 0 ); return FALSE; }
else { SetForegroundWindow(hltd); return TRUE; }

* Lorsque le plug a trouvé que l'application est active(voir si dessus), il
peut envoyer des messages avec postmessage
Exemple : si la touche RMCTRL_RESIZE est appuyée, un message avec
parametre est envoyé
case RMCTRL_RESIZE:
PostMessage(hltd, WM_COMMAND, 40165, 0);
return TRUE;

Pour récupérer les messages, dans mon programme VB j'utilise :

**ds module
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal
lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal msg As Long, ByVal wParam
As Long, ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal
hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public OldWindowProc As Long
Public Const GWL_WNDPROC = -4
Public Const WM_COMMAND = &H111

Public Function NewWindowProc(ByVal hWnd As Long, ByVal msg As Long, ByVal
wParam As Long, ByVal lParam As
Long) As Long
If msg = WM_COMMAND Then Form1.Label1 = lParam & "/1/" & wParam
NewWindowProc = CallWindowProc(OldWindowProc, hWnd, msg, wParam, lParam)
End Function

Dans la mdiform
Private Sub MDIForm_Load()
OldWindowProc = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf
NewWindowProc)
End Sub
Private Sub MDIForm_Unload(Cancel As Integer)
Ret& = SetWindowLong(Me.hwnd, GWL_WNDPROC, oldWndProc)
End Sub

* Ds un projet simple contenant seulement une mdiform et une childform
portant en caption le même nom tout va bien sauf lorsque la childform est
agrandie : Ds ce cas le plug ne trouve pas la fenêtre à utiliser pour
envoyer les post???

* Appliquer à mon programme les post ne sont même pas reçus... ???
pourquoi telle est la question????

Est-ce une mauvaise gestion des Handles des formes ou une incompatibilité
des fonctions de mon programme???

TouTi
--