Intégrer un logiciel dans une fenêtre

Signaler
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019
-
Messages postés
14778
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 septembre 2020
-
Bonjour à tous,

Je suis débutant en programmation, ma première étape pour mon logiciel est d'insérer un programme fournisseur (executable) dans une fenêtre.
J'ai regardé sur les différents forum et sur le net et je n'y arrive pas pour mon programme fournisseur par contre le bloc note de Windows fonctionne.
Je suis passé par la fonction SetParent. Voici le code de mon programme.
	public partial class MainForm : Form
{
public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
}
//
// TODO: Add constructor code after the InitializeComponent() call.
//
[DllImport("user32.dll")]
static extern IntPtr SetParent (IntPtr hwc ,IntPtr hwp);


void Button1Click(object sender, EventArgs e)
{
//Process process = new Process();
//process.StartInfo.CreateNoWindow=true;
//process.StartInfo.UseShellExecute = false;
//process.StartInfo.FileName = "notepad.exe";
//process.Start();

//OK
Process p;
p = new Process();
p = Process.Start("calc.exe");
//p = Process.Start(@"notepad.exe");
//p = Process.Start(@"C:\\Program Files\\MSCom2\\mdiapp.exe");
//p = Process.Start(@"C:\\Program Files\\SoftReal\\EuroCAP\\EuroCAP.exe");

Thread.Sleep(500);
p.WaitForInputIdle();
SetParent(p.MainWindowHandle,this.Handle);
//FIN OK




}



Que faut il que je rajoute pour que cela fonctionne.
Si ce n'est pas possible de le faire en C#, existe t il un moyen de le faire ?

Je vous remercie.

20 réponses

Messages postés
14778
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 septembre 2020
435
Bonjour
Si tu n’utilIses pas SetParent, le logiciel se lance t il comme il faut?

PS: voir ici pour utliser correctement les balises de code
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

Bonjour,

Merci d'avoir répondu si vite.
Si je met la ligne SetParent en commentaire, la calculatrice s'ouvre dans une autre fenêtre. Et ce n'est pas ce que je veux.

Avec la ligne SetParent actif, j'ai réussi à mettre dans la fenêtre l'application blocnote ou la calculatrice ou word ou internet explorer...

Quand j'utilise les programmes de mes fournisseurs cela les ouvre dans une fenêtre à part. Comment faire ? existe t il une solution ?
Ca fait 15 jours que j'essaye de trouver des infos sur le net mais ca ne fonctionne pas.

Merci pour votre aide
Messages postés
14778
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 septembre 2020
435
Que la calculatrice fonctionne ne m’étonne pas. Ma question concerne le logiciel que tu veux vraiment.
Pour voir si le problème se situe dans SetParent ou ailleurs.
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

J'ai enlevé le commentaire sur la ligne de mon programme fournisseur. Et mis en commentaires les lignes calc.exe et setparent.

Mon logiciel fournisseur s'ouvre dans une autre fenêtre :-(
Messages postés
14778
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 septembre 2020
435
Tant pis ça aurait sans doute été plus simple à régler.
Ligne de commande incorrecte, ou paramètre manquant.

Tu as un message d’erreur?
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

Je n'ai pas de message d'erreur.
Quand tu dis ligne de commande incorrecte ou paramètre manquant..
Que faut il que je mette par exemple? J'ai fait beaucoup de site et je n'ai pas vu d'autre paramètre.

Est il possible que le programme fournisseur que je lance soit incompatible avec ce type de fonction SetParent ?

Je ne suis pas obligé de faire le programme en C#, si il existe un autre langage ou un logiciel spécifique qui le fait, je suis preneur.

Merci de ton aide
Messages postés
14778
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 septembre 2020
435
Puisque ça marche sans l'intégration, c'est justement que la ligne de commande est bonne et qu'il ne manque pas de paramètres.

Il me semble qu'un collègue à fait un truc comme ça en C# WPF.
Une question, ton logiciel a une fenêtre propre ou c'est en ligne de commande?
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

Je ne comprend pas ta question, désolé!

J'utilise actuellement le logiciel SharpDevelop pour créer le programme.
Faut il que je créé un projet en C# WPF ? Actuellement le projet est en C# application Windows.

Je suis vraiment novice dans ce domaine en informatique
Messages postés
14778
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 septembre 2020
435
Faut il que je créé un projet en C# WPF ? Actuellement le projet est en C# application Windows.
Pas ce soir, j’ai demandé à mon collègue si c’est bien un truc comme ça qu’il a fait.
Attendons sa réponse.
Et puis je ne sais pas si sharpdevelop gère le wpf.

Je suis vraiment novice dans ce domaine en informatique
Alors peut-être faudrait-il commencer par le début.
Voici un bon cours pour apprendre C# http://tahe.developpez.com/dotnet/csharp/
Tu peux le suivre en quelques jours pour acquérir les bases nécessaires au développement. Il ne fera pas de toi un codeur hors pair, mais ce sera la fondation sur laquel tu construira un bon apprentissage.

Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

Dans SharDevelop il y a C#WPF.
Merci pour le lien, je vais regarder ca
Bonne soirée
Messages postés
14778
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 septembre 2020
435
Bonsoir

Mon collègue pense que ton programme affiche une fenêtre qui ne renvoie pas de handle (comme les boites de dialogue par exemple).
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

Bonsoir, merci de t'être renseigné.
Quand tu dis "Ton programme" c'est quoi? Mon programme fournisseur?
Si oui, est il possible de faire quand même mon logiciel, via un autre langage informatique ou via un logiciel ?

Merci beaucoup.
Messages postés
14778
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 septembre 2020
435
Quand tu dis "Ton programme" c'est quoi? Mon programme fournisseur?

oui

Si oui, est il possible de faire quand même mon logiciel, via un autre langage informatique ou via un logiciel ?
à priori pas avec un langage qui utiliserait la dll user32 (donc la majorité des langages windows) pour faire ça.

Peux tu poster une capture d'écran de ton logiciel fournisseur?
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

Je m'en occupe lundi.
Merci.
Bonne soirée et bon week end.
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

Bonjour,
Voici la capture d'écran de mes logiciels fournisseurs.





Je vous remercie pour votre aide.

Bonne journée.
J'ai un peu adapté
https://stackoverflow.com/questions/31465439/winform-showing-another-application-inside-a-picturebox
et ça marche avec calc.exe

            Process p = Process.Start("calc.exe");

            while (p.MainWindowHandle == IntPtr.Zero)
                Thread.Sleep(10);

            IntPtr h = p.MainWindowHandle;

            RECT r;
            GetWindowRect(h, out r);

            int longueur = r.Right - r.Left;
            int hauteur = r.Bottom - r.Top;

            SetParent(h, this.Handle);

            MoveWindow(h, 0, 0, longueur, hauteur, true);


Il semble que pour le cas de calc,
p.WaitForInputIdle();
ne fonctionne pas. Il faut atteindre que la valeur du handle soit remplie.

A toi de voir si cela fonctionne avec tes programmes.
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

Bonjour,

Ca ne fonctionne pas, toujours le même problème avec mes programmes fournisseurs
Merci pour le temps que tu passes sur mon programme.
Messages postés
14778
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 septembre 2020
435
Je ne peux pas faire plus, je ne dispose pas de te logiciels.
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

OK. En tout cas je te remercie beaucoup de ton aide.
Bonne continuation.
Messages postés
14778
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 septembre 2020
435
Pareil
Messages postés
14778
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 septembre 2020
435
Juste pour être sûr, tu as bien importé GetWindowRec et MoveWindow?
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Statut
Membre
Dernière intervention
26 février 2019

oui, j'ai bien rajouté ces lignes :
[DllImport("user32.dll")]
private static extern bool MoveWindow(IntPtr hWnd, int x, int y, int w, int h, bool repaint);

[DllImport("user32.dll")]
private static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
Messages postés
14778
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 septembre 2020
435
Ok