SendMessage et THandle non correct
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
Code:
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; |
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 :
- 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
Code:
1 2
|
h := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, StrToInt(myPid)); |
Mais ça ne fonctionne pas, le but étant de récupérer le bon Handle sur la base du PID du process à traiter.
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.