begin process at 2010 02 10 06:21:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Windows

 > 

Formulaire / Winforms / Controls

 > 

Simuler un appui sur une boite de dialogue d’une autre appli.


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Simuler un appui sur une boite de dialogue d'une autre appli.

mardi 7 avril 2009 à 20:00:28 | Simuler un appui sur une boite de dialogue d'une autre appli.

breton51

Bonjour,


Je recherche une façon de simuler l'appui sur un bouton d'une boite de dialogue sans donnée le focus a la boite de dialogue.

Je récupère les hwnd des boutons « ouvrir », « enregistrer » et « annuler » ça pas de pb

 

Par contre impossible d'envoyer l'information au control sans lui donnée le focus.

En effet pour l'instant je fais comme ça :


    Public Const WM_LBUTTONDOWN = &H201
    Public Const WM_LBUTTONUP = &H202
    Public Const VK_LBUTTON = &H1


    SetForegroundWindow(HWND_Fenetre)

    Sleep(200)
    PostMessage(HWND_Bouton, WM_LBUTTONDOWN, VK_LBUTTON, 0)
    Sleep(200)
    PostMessage(HWND_Bouton, WM_LBUTTONUP, VK_LBUTTON, 0)


Le Pb de cette façon de faire est que si je clique sur une autre fenêtre pendant le traitement la fenêtre paire le focus et ne traite pas le message.


Merci d'avance



mardi 7 avril 2009 à 20:13:53 | Re : Simuler un appui sur une boite de dialogue d'une autre appli.

BruNews

Administrateur CodeS-SourceS
C'est à la fenetre parent du bouton qu'il faut causer:
PostMessage(hParent, WM_COMMAND, idButton, hButton);

ciao...
BruNews, MVP VC++
mardi 7 avril 2009 à 20:22:48 | Re : Simuler un appui sur une boite de dialogue d'une autre appli.

breton51

j'ai bien vu ça dans le forum mais mon pb c'est que je ne vois pas du tout comment récupérer "idButton"


mardi 7 avril 2009 à 20:30:33 | Re : Simuler un appui sur une boite de dialogue d'une autre appli.

BruNews

Administrateur CodeS-SourceS
Va lire GetWindowLong dans MSDN, c'est trivial.

ciao...
BruNews, MVP VC++
mardi 7 avril 2009 à 21:07:09 | Re : Simuler un appui sur une boite de dialogue d'une autre appli.

breton51

Déjà merci pour les infos
 
je viens de tester comme tu ma dis mais ça ne marche pas pour tous les boutons

code:

    Private Const WM_COMMAND = &H111
    Private Const GWL_ID = -12

    Dim Id As Integer = GetWindowLong(HWND_Bouton, GWL_ID)
    PostMessage(HWND_Fenetre, WM_COMMAND, Id, HWND_Bouton)

pour le bouton annuler ça marche bien Id = 2 et la fenêtre visé s'efface bien
par contre pour les autres boutons j'ai un Id = 4426 et Id = 4427 et la fenêtre ne semble pas traiter l'info

mercredi 8 avril 2009 à 06:26:52 | Re : Simuler un appui sur une boite de dialogue d'une autre appli.

Renfield

Administrateur CodeS-SourceS
prends Spy++ cible l'appli
et clique sur tes boutons.

tu n'aura qu'a reproduire le message qu'elle recoit (au hWnd pres)
mercredi 8 avril 2009 à 16:04:51 | Re : Simuler un appui sur une boite de dialogue d'une autre appli.

breton51

Je viens de testé avec Spy++ et mon Pb reste inchangé.

en effet la trace faite en cliquant sur le bouton de la fenêtre donne:

<01649> 000F0734 S WM_COMMAND wNotifyCode:BN_CLICKED wID:4426 hwndCtl:000A0756
<01650> 000F0734 S WM_NCACTIVATE fActive:False
<01651> 000F0734 S WM_GETTEXT cchTextMax:510 lpszText:02EE8DC8
<01652> 000F0734 R WM_GETTEXT cchCopied:26 lpszText:02EE9FE4 ("T")
<01653> 000F0734 R WM_NCACTIVATE fDeactivateOK:True
<01654> 000F0734 S WM_ACTIVATE fActive:WA_INACTIVE fMinimized:False hwndPrevious:00090704
<01655> 000F0734 R WM_ACTIVATE
<01656> 000F0734 S WM_WINDOWPOSCHANGING lpwp:02EEA6EC
<01657> 000F0734 R WM_WINDOWPOSCHANGING
<01658> 000F0734 S WM_WINDOWPOSCHANGING lpwp:02EEBE4C
<01659> 000F0734 R WM_WINDOWPOSCHANGING
<01660> 000F0734 S WM_WINDOWPOSCHANGED lpwp:02EEBE4C
<01661> 000F0734 R WM_WINDOWPOSCHANGED
<01662> 000F0734 R WM_COMMAND
<01663> 000F0734 S WM_DESTROY
<01664> 000F0734 R WM_DESTROY
<01665> 000F0734 S WM_NCDESTROY
<01666> 000F0734 R WM_NCDESTROY


celle faite quand j'envoie une commande donne:
<01345> 000F0734 P WM_COMMAND wNotifyCode:BN_CLICKED wID:4426 hwndCtl:000A0756
puis rien, pas de réaction de la fenêtre cible.

la différence entre les deux est que dans mon cas j'ai utiliser un PostMessage, j'ai donc refais le test avec un SendMessage et rien pas de réaction non plus de la pare de la fenêtre cible.

faut il que j'envoie aussi les autres messages

Ps: cette fenêtre est la seul a réagir de cette façon toutes les autres boites de dialogue (enregistrer sous que j'ai tester) fonctionne bien sur ce principe et traite bien les messages envoyer. pour info la boite de dialogue que ne traite pas l'info est celle afficher par IE lorsque l'on veux Télecharger un fichier "Téléchargement de fichiers" et c'est les boutons "Ouvrir" et "Enregistrer" qui ne prène pas la commande. Si vous voyer dautre façon de fair je suis preneur.

mercredi 8 avril 2009 à 17:48:38 | Re : Simuler un appui sur une boite de dialogue d'une autre appli.

Renfield

Administrateur CodeS-SourceS
adapte bien le hWnd ciblé
l'ID reste  inchangé.

comment récupères tu le hWnd cible ?
mercredi 8 avril 2009 à 18:54:58 | Re : Simuler un appui sur une boite de dialogue d'une autre appli.

breton51

je récupères les Hwnd des boutons avec FindWindowEx

ex pour le bouton Ouvrir
 FindWindowEx(Hwnd_Fenetre,NULL,Button,Ou&vrir)

j'ai vérifié avec Spy++ et j'obtiens bien les même Hwnd.
mardi 21 avril 2009 à 19:51:11 | Re : Simuler un appui sur une boite de dialogue d'une autre appli.

breton51

avez vous d'autre suggestion car la je bloque et je ne vois pas comment faire autrement.

L'ID de mes boutons sont OK
Les hWnd sont OK.

PostMessage(HWND_Fenetre, WM_COMMAND, Id_bouton, HWND_Bouton)
ou
SendMessage(HWND_Fenetre, WM_COMMAND, Id_bouton, HWND_Bouton)
n'ont aucun effet.

Merci d'avance.

1 2

Cette discussion est classée dans : style, font, boite, mso, 0cm


Répondre à ce message

Sujets en rapport avec ce message

mode de connection à une base de données [ par momoSahli ] <link rel="Fi Filtrer un dataTable [ par momoSahli ] <link rel="Fi keydown [ par hayk ] <link rel="Fi Crystal Report Vb.Net SQL Server [ par said_dias_01 ] <link rel="Fi Datagrid [ par said_dias_01 ] <link rel="Fi erreur d'exécution "438" [ par abdoumoh ] <link rel="Fi dll avec vb.net [ par hayk ] <link rel="Fi Problème lors de l'insertion d'une variable décimal dans la base de donnée [ par Flysteur ] Bonjour,<link rel="Fi supprimer des lignes [ par croky23 ] <link rel="Fi ouvrir le formulaire « insérer une fonction » d'Excel avec VB.NET [ par souma86 ] Bonjour, J'ai un projet à travailler avec le vb.net.Dans mon code, je ai besoin d'ouvrir le formulaire « insérer une fonction » d'Excel, mais je ne sa


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,234 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales