Passer des valeurs d'un application a une autre [Résolu]

Signaler
Messages postés
49
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
24 mars 2010
-
Messages postés
49
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
24 mars 2010
-
Bonjour,

Voila en fait je me pose la question depuis quelques heures maintenant sur la façon de passer des paramètres d'une application vb à une autre pour repositionner la 2eme application par rapport à la première !

La solution que j'ai trouvée pour le moment est l'utilisation du presse-papier mais je ne suis pas sur que cela soit très "propre" comme méthode :

Ma première application enregistre sa position quand je bouge le formulaire (assez lourd mais je n'ai pas trouvé de méthode pour utiliser le mouseUp sur la barre de titre, mais si c'est là la solution je peux créer ma propre barre de titre)
Private Sub FormLauncher_Move(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Move
    Try
        Dim x As Integer = Me.Left
        Dim y As Integer = Me.Top
        Clipboard.SetText("position" & vbTab & x & vbTab & y)
    Catch exc As Exception
        MessageBox.Show(exc.Message)
    End Try
End Sub

Alors que la deuxième récupère ces valeurs sur un timer
Private Sub TimerDeplacement_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerDeplacement.Tick
    Try
        Dim position = Clipboard.GetText()
        If position.Contains("position" & vbTab) Then
            Dim temp as string = position.Split(vbTab)
            Me.Left = Int(temp(1)) + 122
            Me.Top = Int(temp(2))
            Clipboard.Clear()
        End If
    Catch exc As Exception
        MessageBox.Show(exc.Message)
    End Try
End Sub


J'avais bien pensé a stocker ces infos dans un fichier mais comme cela se fait en quasi instantané ça me parait encore plus lourd comme solution !

Si vous pouviez me donner une meilleure voix à suivre ou me confirmer celle que j'utilise ça serait bien aimable,

Merci d'avance

13 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
En gros, voir :

www.vbfrance.com/codes/COMMUNICATION-INTER-PROCESS-PARTAGE-MEMOIRE_39615.aspx

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
pas de top de monopoliser ainsi le presse papier, effectivement...

plus simple de mettre en place une surveillance plus fine....

un SubClassing, par exemple. Ainsi tu sera avertit si ta form bouge, et ne consommera que peu de temps processeur si ta form ne bouge pas.


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
salut,

... pourquoi form1 ne déplace pas directement form2

[hr]
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
pas la même appli, semble-til

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
mais je vois où tu veux en venir....

je partait du principe (erronné) qu'on a pas la main sur le code de Form1 ...


du coup, oui, dans ton Form_Move, suffit de demander a Form2 de se mettre au diapason


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
49
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
24 mars 2010

Salut et merci pour vos réponse,

@Renfield : je viens de regarder ce qu'était le SubClassing et je t'avoue que je ne vois pas ce que m'apporterais de plus cette méthode par rapport au form_move qui m'indique déjà si ma form bouge et cela seulement quand elle bouge (non ?), surement une subtilité que je ne connais pas, je suis développeur autodidacte et le .net n'est sur mon pc que depuis 1 mois ^^

@PCPT : car comme je l'ai dit dans ma question il ne s'agit pas simplement de 2 form, mais de 2 form dans 2 applications différentes, sinon c'est surement ce que j'aurais fait

@Renfield : a moins que tu ne parles d'un SubClassing sur la 2eme application qui vérifierais si la 1ere bouge mais je ne vois pas comment je pourrais surveiller la 1ere appli à partir de la 2eme
Messages postés
49
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
24 mars 2010

ah bin ma réponse à croisée les votre...

@Renfield : je sais déplacer un formulaire en rapport au déplacement d'un autre mais dans la même application pas dans 2 application différente !
ça donnerais un truc du genre (je sais que c'est faux Appli2.FormRenomp3_move mais c'est pour comprendre l'idée) :

Appli_1
Private Sub FormLauncher_Move(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Move
    Appli2.FormRenomp3_move()
End Sub

Appli_2 rien
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
j'ai lu l'énoncé trop vite en effet, désolé ^^

umm le subclassing n'est pas forcément le plus approprié

regarde les sources "communiquer entre 2 applis", çà me semble plus correspondre au besoin

l'idée étant alors en effet juste de se passer du timer et du presse-papier

++
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
Le subclassing (easy en .Net) est bien un moyen de communication...

au Form_Move de FOrm1, tu fais un SendMessage à Form2 avec un message convenu (RegisterWindowsMessage) et zou...

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
49
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
24 mars 2010

Je suis en train de plancher sur le SendMessage - RegisterWindowMessage, je n'ai trouvé qu'une source en vb6 et aucun tuto (pour vb en tout cas) donc j'essaie de la transposer en vb.net pour le moment le bloque coté réception. C'est marrant comme ça à l'air facile quand vous en parlez mais comme ça devient compliqué par la suite ^^

Voila ou j'en suis
Appli envoyant le message à priori aucun souci

Appli recevant le message souci avec AddressOf
'On remplace l'adresse de la routine Standard par celle de notre procedure => Capture_Message_Windows
'Cela permet de faire passer les messages Windows dans notre procédure Capture_Message_Windows
'Save_WndProc_adresse, récupère l'adresse de la routine standard Windows
'ATTENTION, NE PAS MODIFIER LE NAME (Form1) DE LA Form1 CAR APPEL DU HANDLE (Me.hwnd)
Save_WndProc_Adresse = SetWindowLong(Me.Handle, GWL_WNDPROC, AddressOf Capture_Message_Windows)

le souci : l'expression AddresOf ne peut pas être convertie en Long, car Long n'est pas un type délégué
Est-ce que cela peut venir du fait que mon formulaire ne s'appelle pas Form1 ? ou bien du changement de Me.hwnd par Me.Handle ?
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
côté api, long (général) à déclarer en integer
long de handle en intptr
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
euh, non, on passe pas par cette PI pour le Subclassing.... c'est terminé, ca en .NET

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
49
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
24 mars 2010

Encore merci pour votre patience, voila une méthode que je suis capable d'utiliser
Me reste plus qu'a bien la comprendre ça ne m'a pas l'air bien compliqué