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

Windows Forms Discussion :

[VB.NET] Trouver un handle, simuler clic sur bouton


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut [VB.NET] FindWindow et SendMessage
    Bonjour, j'aurais aimé savoir s'il était possible de prendre le controle ( simuler des clics sur boutons et menus ) d'une application avec un programme en vbnet.

    En C++ : (j'avais demandé sur le forum)

    Citation Envoyé par Médinoc
    Pour simuler un clic dessus, tu dois obtenir le handle de la fenêtre principale, puis poster un message WM_COMMAND:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PostMessage(
     hWnd,                           //Handle de la fenêtre mère
     WM_COMMAND,                     //message WM_COMMAND
     MAKELONG(CtrlID, BN_CLICKED),   //type de commande: clic sur bouton CtrlID
     GetDlgItem(hWnd, CtrlID)        //handle du bouton
     );
    Citation Envoyé par Médinoc
    Pour récupérer le handle de la fenêtre, utilise FindWindow() (tu as besoin du titre, visible au premier coup d'oeil, et de la classe de fenêtre, que spy++ te donne
    Pour avoir ce Handle il y a la fonction FindWindow()

    Que puis-je utiliser en VBNET ?

    De même quand il s'agit d'un menu et non d'un bouton

    Merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut
    : :

  3. #3
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    oui bien sûr que c'est posible,
    tu dois juste t'inscrire à l'événement click de ton bouton ( que t'as créé avec le code je pense) de la manière suivante:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    AddHandler CmdValider.Click, AddressOf  OnClick
    private sub OnClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
    'Traitement à effectué 
    end sub
    j'espere que ça v t'aider

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut
    Bonjour

    Merci pour ta réponse mais c'est une application exterieur que je chercher à utiliser en fait

  5. #5
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    mmmm là je n'y peux rien
    desolé!

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut
    tu peux peut etre m'aider pour autre chose,

    j'aimerais executer du code ou une procedure avant toute chose sans rien cliquer

    donc je créé un module avec un sub main (), je fais lancer le sub main dans les propriétés du projet ... mais apres je lance comment mon from ?

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 291
    Points
    291
    Par défaut
    mais apres je lance comment mon from ?
    Tu fais comme pout tous les autres objets graphiques From...

    1/ Tu instancies ton objets.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maForm = New MaClasseForm()
    2/ Tu le montres.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Module Module1
     
        Public formulaire As Form1
     
        Sub main()
     
            formulaire = New Form1
            formulaire.ShowDialog()
     
        End Sub
    End Module
    ca fonctionne, mais ...

    j'utilise aussi une NotifyIcon, et quand j'abaisse ma from dans le systray le soft se ferme ( ca fonctionnait avant d'utiliser le submain)

    ensuite ... ce que j'avais dans l'id, c'était :

    j'ouvre mon soft
    il fil direct dans la systray
    il ouvre les soft que je lui ai demandé et les utilisent ( les répertoires et nom des soft stocké dans un .ini configuré par la from avec des boutons parcourir et cie)

    c'est pour ca que je voulais un sub main

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 291
    Points
    291
    Par défaut
    C'est normal .... La méthode ShowDialog() attend la fermeture du formulaire pour continuer l'exécution de la procédure.

    Donc lorsque que tu fermes le formulaire (avec NotifyIcon) la procédure Main continue son exécution et donc termine le programme.

    Pour pallier à ca .... voici un petit bout de code.

    Ca, c'est pour la procédure Main.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub main()
       Dim maForm as New MaClasseForm
     
       Do While Not maForm.Fermeture
          maForm.ShowDialog()
       Loop
     
       maForm.Dispose()
    End Sub
    Ca, c'est le code de base de ta form.
    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
    19
    20
     
    private _fermeture As Boolean
     
    Public ReadOnly Property Fermeture() As Boolean
       Get
          Return _fermeture
       End Get
    End Property
     
    Public Sub New()
       _fermeture = False
     
       ...
    End Sub
     
    Public Sub MaClasseForm_Closed(byval sender as Object, ...) Handles MyBase.Closed
     
       ' Indique que l'application doit se terminé car la fermeture et demandée par la croix de la fenetre.
       If sender Is Me Then _fermeture = True
    End

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut
    .Fermeture il connait pas

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 291
    Points
    291
    Par défaut
    C'est normal si tu n'as fait la seconde partie de ce que je t'ai donné

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut
    les ... c'est quoi ?

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 291
    Points
    291
    Par défaut
    Dans le sub New c'est le reste du code de ton constructeur.

    Dans MaClasseForm_Closed, c'est le reste des paramètres que je ne connait pas par coeur (j'ai fait ce code de tête).

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub Form1_Closed(ByVal sender As Object, ByVal e As
    EventArgs) Handles MyBase.Closed
    c'est ca ?

    le soft ne se coupe plus quand je le minimise mais ... il ne fait que se minimiser, il ne se met plus dans la systray


    ce que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub from1_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
            If Me.WindowState = FormWindowState.Minimized Then
                NotifyIcon1.Visible = True
                Me.Hide()
            End If
    End Sub

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut
    pb résolu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    Module Module1
     
        Public MaFeuille1 As New Form1
     
        Public Sub main()
            Application.Run(MaFeuille1)
        End Sub
     
    End Module
    juste ca dans le module, et rien d'autre

    par contre j'aimerais bien faire disparaitre le from et aparaitre mon notifyicon

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Points : 286
    Points
    286
    Par défaut Re: [VB.NET] Trouver un handle, simuler clic sur bouton
    Citation Envoyé par 6su7
    Bonjour, j'aurais aimé savoir s'il était possible de prendre le controle ( simuler des clics sur boutons et menus ) d'une application avec un programme en vbnet.

    En C++ : (j'avais demandé sur le forum)

    Citation Envoyé par Médinoc
    Pour simuler un clic dessus, tu dois obtenir le handle de la fenêtre principale, puis poster un message WM_COMMAND:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PostMessage(
     hWnd,                           //Handle de la fenêtre mère
     WM_COMMAND,                     //message WM_COMMAND
     MAKELONG(CtrlID, BN_CLICKED),   //type de commande: clic sur bouton CtrlID
     GetDlgItem(hWnd, CtrlID)        //handle du bouton
     );
    Citation Envoyé par Médinoc
    Pour récupérer le handle de la fenêtre, utilise FindWindow() (tu as besoin du titre, visible au premier coup d'oeil, et de la classe de fenêtre, que spy++ te donne
    Pour avoir ce Handle il y a la fonction FindWindow()

    Que puis-je utiliser en VBNET ?

    De même quand il s'agit d'un menu et non d'un bouton

    Merci
    (Avec beaucoup de retard mais celà pourra peut-être encore servir : )
    Pour simuler un clic sur un bouton d'une autre application, il vaut mieux utiliser le message BM_CLICK.

    Citation Envoyé par MSDN
    BM_CLICK Message

    An application sends a BM_CLICK message to simulate the user clicking a button. This message causes the button to receive the WM_LBUTTONDOWN and WM_LBUTTONUP messages, and the button's parent window to receive a BN_CLICKED notification message.

    Syntax

    To send this message, call the SendMessage function as follows.

    lResult = SendMessage( // returns LRESULT in lResult
    (HWND) hWndControl, // handle to destination control
    (UINT) BM_CLICK, // message ID
    (WPARAM) wParam, // = 0; not used, must be zero
    (LPARAM) lParam // = 0; not used, must be zero
    );

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut
    Ho oui ca me sert Merci

    J'avais mis cette fonction en pause

    Je vais voir ca cette après midi

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut Re: [VB.NET] Trouver un handle, simuler clic sur bouton
    Citation Envoyé par NicolasJolet
    Citation Envoyé par 6su7
    Bonjour, j'aurais aimé savoir s'il était possible de prendre le controle ( simuler des clics sur boutons et menus ) d'une application avec un programme en vbnet.

    En C++ : (j'avais demandé sur le forum)

    Citation Envoyé par Médinoc
    Pour simuler un clic dessus, tu dois obtenir le handle de la fenêtre principale, puis poster un message WM_COMMAND:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PostMessage(
     hWnd,                           //Handle de la fenêtre mère
     WM_COMMAND,                     //message WM_COMMAND
     MAKELONG(CtrlID, BN_CLICKED),   //type de commande: clic sur bouton CtrlID
     GetDlgItem(hWnd, CtrlID)        //handle du bouton
     );
    Citation Envoyé par Médinoc
    Pour récupérer le handle de la fenêtre, utilise FindWindow() (tu as besoin du titre, visible au premier coup d'oeil, et de la classe de fenêtre, que spy++ te donne
    Pour avoir ce Handle il y a la fonction FindWindow()

    Que puis-je utiliser en VBNET ?

    De même quand il s'agit d'un menu et non d'un bouton

    Merci
    (Avec beaucoup de retard mais celà pourra peut-être encore servir : )
    Pour simuler un clic sur un bouton d'une autre application, il vaut mieux utiliser le message BM_CLICK.

    Citation Envoyé par MSDN
    BM_CLICK Message

    An application sends a BM_CLICK message to simulate the user clicking a button. This message causes the button to receive the WM_LBUTTONDOWN and WM_LBUTTONUP messages, and the button's parent window to receive a BN_CLICKED notification message.

    Syntax

    To send this message, call the SendMessage function as follows.

    lResult = SendMessage( // returns LRESULT in lResult
    (HWND) hWndControl, // handle to destination control
    (UINT) BM_CLICK, // message ID
    (WPARAM) wParam, // = 0; not used, must be zero
    (LPARAM) lParam // = 0; not used, must be zero
    );
    j'avais d'autre partie de mon projet à finir, je vais enfin me consacrer à celle ci

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut
    les details de la fenetre où se trouve le bonton que je veux commander:

    >>>>>>>>>>>> Window Details <<<<<<<<<<<<<
    Title: ACQ
    Class: #32770
    Size: X: 1761 Y: 914 W: 58 H: 142

    >>>>>>>>>>> Mouse Details <<<<<<<<<<<
    Screen: X: 1786 Y: 984
    Cursor ID: 0

    >>>>>>>>>>> Pixel Color Under Mouse <<<<<<<<<<<
    RGB: Hex: 0x2CC5B9 Dec: 2934201

    >>>>>>>>>>> Control Under Mouse <<<<<<<<<<<
    Size: X: 0 Y: 38 W: 52 H: 48
    Control ID: 120
    ClassNameNN: BOUTON3
    Text: BB:Import^Importer une radio, une image

    >>>>>>>>>>> Status Bar Text <<<<<<<<<<<

    >>>>>>>>>>> Visible Window Text <<<<<<<<<<<
    BB:Scanner une radio, une image (Bouton droit: Choix du scanner)
    BB:Prochaine radio
    BB:Import^Importer une radio, une image

    >>>>>>>>>>> Hidden Window Text <<<<<<<<<<<

    le bouton que je veux utiliser est "importer"

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Points : 146
    Points
    146
    Par défaut
    les details de la fenetre ouvrir qui me demande de selectionner l'image

    >>>>>>>>>>>> Window Details <<<<<<<<<<<<<
    Title: Ouvrir
    Class: #32770
    Size: X: 206 Y: 320 W: 748 H: 514
    >>>>>>>>>>> Mouse Details <<<<<<<<<<<
    Screen: X: 872 Y: 770
    Cursor ID: 2
    >>>>>>>>>>> Pixel Color Under Mouse <<<<<<<<<<<
    RGB: Hex: 0xECE9D8 Dec: 15526360

    >>>>>>>>>>> Control Under Mouse <<<<<<<<<<<
    Size: X: 632 Y: 404 W: 100 H: 28
    Control ID: 1
    ClassNameNN: Button2
    Text: &Ouvrir
    >>>>>>>>>>> Status Bar Text <<<<<<<<<<<
    >>>>>>>>>>> Visible Window Text <<<<<<<<<<<
    Regarder &dans :
    DPI-9000
    FolderView
    &Nom du fichier :
    Fichiers de &type :
    Images
    &Ouvrir
    Annuler
    >>>>>>>>>>> Hidden Window Text <<<<<<<<<<<
    Ouvrir en le&cture seule
    &Aide

Discussions similaires

  1. [Débutant] Lien HTML simulant clique sur Bouton ASP.net
    Par jck2003 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 28/07/2011, 14h09
  2. Simuler clic sur un lien
    Par hugo7 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/03/2011, 18h04
  3. Boucle sur formulaire de simulation de clic sur bouton
    Par arnolano0 dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/02/2010, 10h34
  4. Simuler clic sur bouton image sans nom
    Par andrebernard dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 11/03/2009, 14h00
  5. [pocket PC] simuler clic sur fenêtre alerte
    Par EMIexperience dans le forum Mobiles
    Réponses: 1
    Dernier message: 31/07/2008, 20h10

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