Intégrer un logiciel dans une fenêtre

GuillaumeJe Messages postés 12 Date d'inscription jeudi 21 février 2019 Statut Membre Dernière intervention 26 février 2019 - 21 févr. 2019 à 15:31
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 - 26 févr. 2019 à 18:15
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

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
21 févr. 2019 à 15:45
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
0
GuillaumeJe Messages postés 12 Date d'inscription jeudi 21 février 2019 Statut Membre Dernière intervention 26 février 2019
21 févr. 2019 à 15:52
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
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
21 févr. 2019 à 15:56
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.
0
GuillaumeJe Messages postés 12 Date d'inscription jeudi 21 février 2019 Statut Membre Dernière intervention 26 février 2019
21 févr. 2019 à 16:00
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 :-(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
21 févr. 2019 à 16:19
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?
0
GuillaumeJe Messages postés 12 Date d'inscription jeudi 21 février 2019 Statut Membre Dernière intervention 26 février 2019
21 févr. 2019 à 16:29
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
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
21 févr. 2019 à 17:43
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?
0
GuillaumeJe Messages postés 12 Date d'inscription jeudi 21 février 2019 Statut Membre Dernière intervention 26 février 2019
21 févr. 2019 à 18:05
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
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
21 févr. 2019 à 18:16
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.

0
GuillaumeJe Messages postés 12 Date d'inscription jeudi 21 février 2019 Statut Membre Dernière intervention 26 février 2019
21 févr. 2019 à 18:52
Dans SharDevelop il y a C#WPF.
Merci pour le lien, je vais regarder ca
Bonne soirée
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
22 févr. 2019 à 17:13
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).
0
GuillaumeJe Messages postés 12 Date d'inscription jeudi 21 février 2019 Statut Membre Dernière intervention 26 février 2019
22 févr. 2019 à 17:20
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.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
22 févr. 2019 à 18:02
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?
0
GuillaumeJe Messages postés 12 Date d'inscription jeudi 21 février 2019 Statut Membre Dernière intervention 26 février 2019
22 févr. 2019 à 18:17
Je m'en occupe lundi.
Merci.
Bonne soirée et bon week end.
0
GuillaumeJe Messages postés 12 Date d'inscription jeudi 21 février 2019 Statut Membre Dernière intervention 26 février 2019
25 févr. 2019 à 09:02
Bonjour,
Voici la capture d'écran de mes logiciels fournisseurs.





Je vous remercie pour votre aide.

Bonne journée.
0
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.
0
GuillaumeJe Messages postés 12 Date d'inscription jeudi 21 février 2019 Statut Membre Dernière intervention 26 février 2019
26 févr. 2019 à 09:23
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.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
26 févr. 2019 à 09:28
Je ne peux pas faire plus, je ne dispose pas de te logiciels.
0
GuillaumeJe Messages postés 12 Date d'inscription jeudi 21 février 2019 Statut Membre Dernière intervention 26 février 2019
Modifié le 26 févr. 2019 à 09:50
OK. En tout cas je te remercie beaucoup de ton aide.
Bonne continuation.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
26 févr. 2019 à 10:19
Pareil
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
26 févr. 2019 à 16:10
Juste pour être sûr, tu as bien importé GetWindowRec et MoveWindow?
0
GuillaumeJe Messages postés 12 Date d'inscription jeudi 21 février 2019 Statut Membre Dernière intervention 26 février 2019
26 févr. 2019 à 16:14
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);
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
26 févr. 2019 à 18:15
Ok
0
Rejoignez-nous