Bonjour,
Je suis devant la situation suivante: j'ai plusieurs instances de mon application ( en ligne de commande ) sur des sessions différentes sur ma machines.
Exemple : Session de l'administrateur (utilisateur courant) : MonProg.exe -T -H
Session de Client1 (en mode déconnecté) : MonProg -T -D -S
Session de Client2 (en mode déconnecté) : MonProg -F -R -D -A
Le but est de créer une application qui permet de transporter des données entre ces différentes instances de programmes lancés.
L'idée est de récupérer le PID de chaque nom de l'image (exécutable) afin de pouvoir effectuer un traitement sur ce dernier selon le contenu du paquet de données envoyés.
Tout va bien jusqu'à un SendMessage qui ne fonctionne pas avec le PID mais avec le THandle, donc il a fallu trouver le bon handle du process en question. Exemple
Jusqu'ici tout est bon, mais, voilà, le FindWindow peut faire l'affaire si une seule instance de mon programme est lancée mais il ne fera pas l'affaire si :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 procedure TForm4.Button2Click(Sender: TObject); var packet: TDataTraites; CopyDataStruct:TCopyDataStruct; vyPid: string; h: THandle; begin vyPid := ListView1.Selected.SubItems[0]; packet.Type:=0; packet.Champs:='CLOSE'; packet.Valeur:='32767'; packet.Table:=55; CopyDataStruct.dwData:=1; // Optionnel CopyDataStruct.cbData:=SizeOf(packet); CopyDataStruct.lpData:=@packet; h := FindWindow(pchar('TFMain'), nil); SendMessage(h, WM_COPYDATA, application.Handle, LongInt(@CopyDataStruct)); end;
- plusieurs instance de mon programmes sont lancées sur la session en cours.
- Si une ou plusieurs instances sont lancées sur des sessions déconnectés du Client1 ou bien le Client2.
Mon but est de pouvoir envoyer mon paquet de données à des instances selon le PID de chaque instance.
J'ai essayé avec le OpenProcess
Mais ça ne fonctionne pas, le but étant de récupérer le bon Handle sur la base du PID du process à traiter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 h := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, StrToInt(myPid));
Alors, ma question est :
- Est ce que le SendMessage peut se faire sur un processus inter-session ?
- Si c'est faisable alors, comment récupérer le bon handle (qui sert pour le SendMessage) selon le PID du process qu'on veut traiter ?
Merci d'avance.
Partager