IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

SetParent - Pourquoi cela ne fonctionne-t-il pas avec toutes les applications [Débutant]


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 135
    Points : 61
    Points
    61
    Par défaut SetParent - Pourquoi cela ne fonctionne-t-il pas avec toutes les applications
    Salut

    J'ai pu lire plusieurs posts au sujet de la fonction SetParent. et il ressort a plusieurs reprises que cela ne fonctionne pas avec toutes les applications

    Pour ma part, j'ai essayé avec le code suivant :
    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
    Public Class Form1
     
     
     
        Declare Auto Function SetParent Lib "user32.dll" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As Integer
        Declare Auto Function SendMessage Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
        Private Const WM_SYSCOMMAND As Integer = 274
        Private Const SC_MAXIMIZE As Integer = 61488
        Dim proc As Process
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            proc = Process.Start("MON APPLICATION")
            proc.WaitForInputIdle()
     
            SetParent(proc.MainWindowHandle, Panel1.Handle)
                SendMessage(proc.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
        End Sub
    End Class
    En lieu et place de "MON APPLICATION", j'ai mis plusieurs chemin d'accès à différentes applications et le constat est là. Cela ne fonctionne pas pour toutes les applications et malheureusement, celle qui m'intéressait, KaraFun (Logiciel de lecture de karaokés) ne fonctionne pas. Y aurait-il un moyen pour que ce non fonctionnement soit contourné ?

    Merci par avance pour vos réponses.

    @+ Martipit

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    sur certains processus le mainwindowhandle n'existe pas ou de manière très éphémère

    alors il faudrait peut etre trouver un autre appel d'api qui permet d'obtenir tous les handles de window d'un processus

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 135
    Points : 61
    Points
    61
    Par défaut
    Salut Pol

    Selon toi quelle APi pourrait convenir ?

    @+ Martipit

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    si je le savais je pense que je te l'aurais dit ^^

    google a l'air de dire qu'on peut retrouver un handle de fenetre selon son nom (findwindow et findwindowlike)

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 135
    Points : 61
    Points
    61
    Par défaut
    J'ai pu récupérer les infos de karafun

    ProcessName : KaraFunPlayer
    ID : Change à chaque tests
    Handle = Change à chaque tests.

    Est-ce suffisant ces renseignements pour faire quelque chose de potable ?

    Merci par avance.

    @+ Martipit

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 135
    Points : 61
    Points
    61
    Par défaut
    Salut avec un bouton et le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim processes As Process() = Process.GetProcessesByName("KaraFunPlayer")
            SetParent(processes(0).MainWindowHandle, Panel1.Handle)
            SendMessage(processes(0).MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
    La fenêtre karafun est toujours visible que je clique dessus ou que je clique dans ma form

    Par contre, elle n'est pas ancrée au panel1 (Elle ne se trouve pas dedsan, ce qui peut être génant lorsque l'on déplace la form.

    Ca avance mais là, j'avoue que je ne sais plus comment faire

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 135
    Points : 61
    Points
    61
    Par défaut
    Ca Y est c'est réglé ... Enfin presque ...

    Pour le code pour afficher la fenetre KaraFun dans le panel c'est ok.
    J'ai eu une réponse del pa part d'un développeur

    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
    Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
        Declare Auto Function SetParent Lib "user32.dll" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As Integer
        Declare Auto Function SendMessage Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
        Private Const WM_SYSCOMMAND As Integer = 274
        Private Const SC_MAXIMIZE As Integer = 61488
        Dim proc As Process
     
    proc = Process.Start("C:\Musique\KaraFun Player\KaraFunPlayer.exe")
                proc.WaitForInputIdle()
                Dim hWnd As Long
                hWnd = FindWindow("TPlayFrm", "KaraFun Player")
                If hWnd <> 0 Then
                    SetParent(hWnd, Me.PAN_KARAFUNPLAYER.Handle)
                    SendMessage(hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
                End If
    Maintenant subsiste un petit soucis si on déplace la fenetre karafun dans le panel, elle disparait.

    Y aurait-il un moyen de bloquer le déplacement de cette fenetre ?

    Merci par avance.

    @+ Martipit.

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    maximize la fenetre, et retire sa bordure

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 135
    Points : 61
    Points
    61
    Par défaut
    Salut Pol

    Ce n'est pas possible avec La fenetre de Karafun car elle n'est pas prévue avec ce genre de paramètres.

    Par contre, je vais me pencher sur un masque qui ne donnera accès qu'aux boutons de la fenetre de KaraFun pour ne pas que les utilisateurs puissent la déplacer.

    @+ Martipit

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/04/2015, 20h51
  2. [CakePHP] Behavior Cakephp 3 qui ne fonctionne pas avec toutes les entity associées
    Par HBPOM dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/03/2015, 13h34
  3. Réponses: 4
    Dernier message: 29/08/2012, 11h15
  4. Réponses: 1
    Dernier message: 22/05/2007, 12h51
  5. Requete qui ne fonctionne pas sur toutes les versions de MySQL
    Par goldorax113 dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/06/2006, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo