Intégrer un logiciel dans une fenêtre

Messages postés
12
Date d'inscription
jeudi 21 février 2019
Dernière intervention
26 février 2019
- - Dernière réponse : Whismeril
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
- 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.
Afficher la suite 

Votre réponse

20 réponses

Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350
0
Merci
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
Commenter la réponse de Whismeril
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Dernière intervention
26 février 2019
0
Merci
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
Commenter la réponse de GuillaumeJe
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350
0
Merci
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.
Commenter la réponse de Whismeril
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Dernière intervention
26 février 2019
0
Merci
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 :-(
Commenter la réponse de GuillaumeJe
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350
0
Merci
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?
Commenter la réponse de Whismeril
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Dernière intervention
26 février 2019
0
Merci
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
Commenter la réponse de GuillaumeJe
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350
0
Merci
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?
Commenter la réponse de Whismeril
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Dernière intervention
26 février 2019
0
Merci
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
Commenter la réponse de GuillaumeJe
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350
0
Merci
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.

Commenter la réponse de Whismeril
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Dernière intervention
26 février 2019
0
Merci
Dans SharDevelop il y a C#WPF.
Merci pour le lien, je vais regarder ca
Bonne soirée
Commenter la réponse de GuillaumeJe
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350
0
Merci
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).
GuillaumeJe
Messages postés
12
Date d'inscription
jeudi 21 février 2019
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.
Whismeril
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350 -
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?
GuillaumeJe
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Dernière intervention
26 février 2019
-
Je m'en occupe lundi.
Merci.
Bonne soirée et bon week end.
Commenter la réponse de Whismeril
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Dernière intervention
26 février 2019
0
Merci
Bonjour,
Voici la capture d'écran de mes logiciels fournisseurs.





Je vous remercie pour votre aide.

Bonne journée.
Commenter la réponse de GuillaumeJe
0
Merci
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.
Commenter la réponse de Whismeril
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Dernière intervention
26 février 2019
0
Merci
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.
Commenter la réponse de GuillaumeJe
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350
0
Merci
Je ne peux pas faire plus, je ne dispose pas de te logiciels.
Commenter la réponse de Whismeril
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Dernière intervention
26 février 2019
0
Merci
OK. En tout cas je te remercie beaucoup de ton aide.
Bonne continuation.
Commenter la réponse de GuillaumeJe
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350
0
Merci
Pareil
Commenter la réponse de Whismeril
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350
0
Merci
Juste pour être sûr, tu as bien importé GetWindowRec et MoveWindow?
Commenter la réponse de Whismeril
Messages postés
12
Date d'inscription
jeudi 21 février 2019
Dernière intervention
26 février 2019
0
Merci
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);
Commenter la réponse de GuillaumeJe
Messages postés
12932
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 mars 2019
350
0
Merci
Ok
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.