Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

passer des données à un programme en cours d'exécution

6 réponses
Avatar
Bul
bonjour à tous,
J'ai un petit programme, un "éditeur de textes, multi-documents".
Lorsqu'il est actif, j'aimerais ne pas lancer une nouvelle instance
mais lui transmettre le nom du nouveau fichier à traiter.
Pourriez-vous me dire où trouver des informations pour réaliser ça ?
ou mieux : un exemple ? Merci d'avance. @+

6 réponses

Avatar
david
salut,

en fait, même si tu retrouve le PID de ton processus d'édition de
texte lorsqu'il est en exécution, il n'existe pas de possibilités
système d'interconnecter avec un processus après (ou durant
l'exécution) sans que celui-ci en face aussi la demande...

Par contre, un petit système (bricolage soit) qui fonctionne très
bien :
utilise un petit fichier texte (par exemple: command.txt) dans le
dossier d'installation de ton programme d'éditeur de texte.
Régulièrement (toutes les secondes par exemple), le programme va
tester si ce fichier existe.
Si c'est le cas, il exécute les commandes à l'intérieur et le
supprime...

Voila, A+, david

Bul a écrit :

bonjour à tous,
J'ai un petit programme, un "éditeur de textes, multi-documents".
Lorsqu'il est actif, j'aimerais ne pas lancer une nouvelle instance
mais lui transmettre le nom du nouveau fichier à traiter.
Pourriez-vous me dire où trouver des informations pour réaliser ça ?
ou mieux : un exemple ? Merci d'avance. @+


Avatar
Jacques93
Bonjour Bul
Bul a écrit :
bonjour à tous,
J'ai un petit programme, un "éditeur de textes, multi-documents".
Lorsqu'il est actif, j'aimerais ne pas lancer une nouvelle instance
mais lui transmettre le nom du nouveau fichier à traiter.
Pourriez-vous me dire où trouver des informations pour réaliser ça ?
ou mieux : un exemple ? Merci d'avance. @+




Plusieurs méthode permettent la communication InterProcess :

Clipboard
COM
Data Copy
DDE
File Mapping
Mailslots
Pipes
RPC
Windows Sockets

Avec le composant Winsock par exemple, du côté serveur (ton éditeur en
l'occurence) :

Private Sub Form_Load()
Me.Winsock1.LocalPort = 5000 ' à adapter
Me.Winsock1.Listen
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Me.Winsock1.Close
Me.Winsock1.Accept requestID
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim s As String

Me.Winsock1.GetData s
MsgBox s
End Sub

et du côté client

Private Sub Command1_Click()
Me.Winsock2.Connect Me.Winsock2.LocalIP, 5000
Do
DoEvents
' Prévoir une gestion d'erreur pour sortir de la boucle
Loop While Me.Winsock2.State <> sckConnected
Me.Winsock2.SendData "NOUVEAU FICHIER"
End Sub

--
Cordialement,

Jacques.
Avatar
Bul
merci à vous,
vous m'avez donné les pistes ( et plus ! ) à suivre.
@+
Avatar
Bul
>> Jacques93 : Plusieurs méthode permettent la communication
InterProcess...




simplement pour signaler la méthode adoptée pour l'instant :
'###################################################
Private Sub winsock1_DataArrival(ByVal bytesTotal As Long) '## autres
lancements ##
'##################################################
Dim tmp as string
Winsock1.GetData tmp
... traitement de tmp
End Sub
'###########################
Private Sub Form_Load() '## initialisation ##
'##########################
If VB.App.PrevInstance Then '~~ le programme est déjà en mémoire
With Winsock2
.Protocol = sckUDPProtocol
.RemoteHost = "127.0.0.1"
.RemotePort = 1002
.Bind 1001
.SendData "*" & Command$
End With
Unload Form1
End
End If
With Winsock1
.Protocol = sckUDPProtocol
.RemoteHost = "127.0.0.1"
.RemotePort = 1001
.Bind 1002
End With
....

je vais bien entendu rendre les adresses paramétrables.
si vous avez des remarques/critiques... elles sont les bienvenues.
@+
Avatar
Zoury
Salut Bul ! :O)

si vous avez des remarques/critiques... elles sont les bienvenues.
Unload Form1
End




Voici mon seul conseil... n'utilise JAMAIS, JAMAIS, JAMAIS la fonction
End()... ;O)
http://faq.vb.free.fr/index.php?question

--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Bul
merci yanick,
( END n'était en fait là que pour "le test" )
les explications données : parfaites. @+