PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
18 oct. 2005 à 19:25
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
6 mars 2009 à 10:27
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 6 mars 2009 à 10:27
on ne peux pas envoyer de fichier ici.
concernant mon outil, je ne te propose pas, bien entendu de survoller la barre d'outils ^^
simplement repiquer du code de cet outil ; de t'arranger (FindWindow/FindWindowEx) pour récupérer un hWnd vers la fenêtre souhaitée (barre d'etat).
concernant les APIs, lire la MSDN... c'est écrit pour le C, mais c'est aisément transposable en VB6
rol64
Messages postés33Date d'inscriptionlundi 21 janvier 2008StatutMembreDernière intervention28 novembre 2011 6 mars 2009 à 10:21
Salut,
JE te remercie pour tes réponses, j'avais pas compris l'idée de survoler la barre d'outils...
En effet j'ai autant de temps que je veux avant de lancer la séquence d'évènements souris/clavier.
Je vais t'envoyer mon projet VB si tu veux. Peux tu m'expliquer comment uploader des fichiers sur ce forum stp.
En fait lorsque je démarre mon application VB, ma fenêtre me propose un choix de 5 boutons command_click auquels sont attachées différentes séquences. De plus il y a une liste box qui me permet de visualiser toutes les fenêtres ouvertes sur le bureau et de récupérer le handle de la fenêtre sur laquelle je souhaite agir par la suite, par simple clique dans la listbox.
Ensuite je dois entrer dans un textbox la valeur correspondant au nombre de répétition de la tâche.
Je n'ai pas encore testé le code que tu m'as donné (
tick =>
oldVAR = newVAR
newVAR = texte de la "barre"
)
Je dois travailler sur autre chose aujourd'hui mais je ne manque pas dem'y pencher ce we.
Je veux vraiment te remercier pour ton aide. Ca me fais gagner un temps énorme!!!! Encore merci!!
Ps: Eventuellement, connais tu un bon ouvrage sur la programmation des API Windows universel (indépendant d'un lanage de programmation...)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 6 mars 2009 à 07:30
tu n'a pas su adapter le code que je t'ai soumis pour récupérer le texte de la barre d'état, en face ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 6 mars 2009 à 00:53
(on s'écarte de la source.. ^^)
comme tu peux te permettre de faire quelques manips au démarrage de ton appli (comme tu le fais actuellement avant de lancer ensuite le reste du code), j'entendais en étape 1 de récupérer le handle de la barre voulue
au plus simple : un timer, tu survoles la barre et tu as le handle par windowdfrompoint.
rol64
Messages postés33Date d'inscriptionlundi 21 janvier 2008StatutMembreDernière intervention28 novembre 2011 5 mars 2009 à 22:22
Merci PCPT ( je me demandais si il y a un petit jeu de mot avec ton pseudo et PC pété comme PC cassé!!! Mais bons vu comme tu sembles maitriser, ca me parait exclu ou sinon c'est un joli pied de nez!!!)
C'est vraiment sympa de ta part de répondre aussi rapidement! Je vais me pencher sur le timer...
En revanche pourrait tu m'expliquer de facon plus détaillée ce que signifie "récupérer le handle de cette barre par WindowFromPoint en calibrage au lancement de ton appli" STP?
A+
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 5 mars 2009 à 20:56
un sleep ne "bouffe" rien.
ton appli est freezée pendant le temps du sleep, si ton CPU monte, c'est de l'appli SAP ou d'autre chose, mais plus rien ne se passe dans ton appli
et forcément si tu effectues une tache tous les X, entrecoupée de sleep, tu ne récupèreras jamais la main sur ton appli (donc pas possible de la fermer sans la killer)
tu ferais mieux de jouer avec un timer
tick =>
oldVAR = newVAR
newVAR = texte de la "barre"
si old<>new, tu as tes actions à faire (et bien stop timer, sur old = new, puis relance le timer à la fin de tes actions)
la barre dont tu parles est une statusbar, tu peux en effet intercepter les refresh par exemple (wm_paint) mais il te faut d'abord récupérer le handle de cette barre par findwindowsex et getclassname par exemple, ou par WindowFromPoint en calibrage au lancement de ton appli
tu peux ensuite récupérer le texte par sendmessage
pas possible (à ma connaissance) de savoir quand l'action executée par un bouton externe à l'appli est terminée
bonne chance :)
rol64
Messages postés33Date d'inscriptionlundi 21 janvier 2008StatutMembreDernière intervention28 novembre 2011 5 mars 2009 à 20:18
Ou alors comment récupérer le message qui spécifie que la tâche générée par l'appui d'un bouton s'est terminée?
Merci d'avance,
A+Roland
Et VIVE les API!!!!
rol64
Messages postés33Date d'inscriptionlundi 21 janvier 2008StatutMembreDernière intervention28 novembre 2011 5 mars 2009 à 20:13
En fait je lis ca dans un tutoriel sur le subclassing:
"Retenez tout d'abord qu'une fenêtre peut être un bouton de commande, une feuille, une zone de texte, une zone de liste,... bref tout contrôle. Et qu'une fenêtre est basée sur une classe. Chaque classe (fenêtre) possède une propriété dont la valeur est une adresse vers une "Procédure Windows" (WndProc) qui est chargée de gérer les messages arrivant à cette classe."
Si c'est vrai ma question est : comment récupérer l'adresse du WNDProc qui gère ma barre d'état sous une application définie (en l'occurence SAP)?
rol64
Messages postés33Date d'inscriptionlundi 21 janvier 2008StatutMembreDernière intervention28 novembre 2011 5 mars 2009 à 20:08
Ok!! Je te remercie!!! Ca marche tip top nickel!!! Merci beaucoup et encore félicitation!!! TOn travail est impréssionant, dans le sens où il est propre jusqu'au moindre détail!!!
En fait j'ai besoin de récupérer les coordonées du curseur une seule fois (bon un peu plus mais c'est tout comme...) et comme je n'arrive pas à me détacher de la feuille sans setCapture, ca me va très bien. En fait une fois que j'ai les coordonnées, je les rentres en constantes et mon soft éxéxute une séquence raccourci clavier et clic souris à un endroit bien déterminé, de sorte à ce que la tâche puisse s'enchainé toute seule... Pour te situer le pbm, je dois répéter cette séquence de clic et raccourci clavier une centaine de fois d'affiler... Donc vive l'automatisme!!!
Par contre vu que tu as l'air bien calé en API et thread (faut vraiment que je me forme en processus!!!), je voulais te demander un petit conseil. En fait entre deux simulations d'évènement clavier je dois attendre un certain temps qui est variable d'une fois à une autre (le CPU réagit plus ou moins vite selon les cas...) Et cela me pose pbm car pour attendre entre mes deux simulations j'effectue un sleep qui est fixe!!!! En plus le sleep me bouffe le CPU pendant tout ce temps la et impossible de gérer un bouton d'arrêt de l'application. Le seul moyen de sortir de mon application est Ctrl+Maj+Esc (vraiment bourin comme méthode...). Donc je souhaiterais me servir du message qui s'affiche dans la barre d'état (ou de dialogue, je sais pas trop le nom de la barre la plus en bas de ma page...) à la fin de chaque tâche. Apparemment en passant par du subclassing je serais en mesure d'intercepter ce message mais je n'arrive pas à trouver la variable susceptible de contenir les iformations affichées dans la barrre d'état... Pourrez tu m'aider stp?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 5 mars 2009 à 18:50
bonjour rol64,
l'API SetCapture est liée au thread en cours
en ide le thread est VB (et non ton exe)
en compilé, pour l'exemple, il faut forcer l'attachement à la fenêtre en cours
click sur le bouton capture, puis click (gauche) sur la form et déplace la souris, tu auras alors les coordonnées tant que le bouton de la souris reste enfoncé
nb : du besoin que tu décris, setcapture n'est pas forcément la meilleure manière de faire. à voir...
rol64
Messages postés33Date d'inscriptionlundi 21 janvier 2008StatutMembreDernière intervention28 novembre 2011 5 mars 2009 à 15:49
Salut PCPT,
Tout d'abord félicitation pour ce tutoriel!!! Il est vraiment bien construit... Je ne comprends pas trop la remarque de VBTOTRASH...
En revanche je rencontre une certaine difficulté à faire marcher le tuto lorsque je créer l'executable et que je la lance en dehors de l'IDE VB6. Je m'explique. La partie qui m'intéresse est celle concernant la récupération des coordonnées du curseur de la souris en dehors de la feuille de l'application VB, avec l'API SetCapture. Lorsque je lance le tutoriel depuis l'IDE VB6, la capture de coordonnées fonctionne bien même lorsque je survole l'écran au dela de la feuille. En revanche lorsque je lance le tuto depuis l'executable sans passer par l'IDE, le positionement du curseur cesse dès que je quitte la feuille de l'application.... et même si j'ai lancé le bouton "Capture" au préalable...
En fait j'aurai besoin de définir les coordonnées d'un bouton d'un application SAP afin de faire un petit soft qui exécute une séquence d'appui sur différents boutons, afin faire une tâche répétitive en châine... Mon soft est bien avancé mais je suis bloqué par l'impossibilité de récupérer les coordonnées des points ou il faudra que je simule les évènement souris avec l'API SetCursorPos...
Merci pour votre aide!
Roland
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 1 oct. 2008 à 22:33
Qu'est ce qu'on en a rien à faire de ta vie !
Va jouer ailleurs.
VBtoTRASH
Messages postés59Date d'inscriptionvendredi 18 juillet 2008StatutMembreDernière intervention31 mars 2011 1 oct. 2008 à 22:29
Salut PCPT,
Je n'arrive pas à comprendre comment tu peux avoir de bonnes appréciations, avec la daube que tu fais.
Pour moi, c'est la preuve qu'il y a beaucoup de lèches-cul ici, ou que tu payes les mecs, ou que tu as plusieurs comptes ouverts. Gros malin !
Pas la peine de me répondre, j'étais de passage.
Je suis passé à la vitesse supérieure. Je fais beaucoup d'InterPoub (html, ftp .... )
Même Mozilla devient pourri ! Pour te décrire la merde.
A vrai dire, toute l'informatique, c'est de la daube de A à Z.
Evite d'associer mon nom au tien, çà me dérange. Je suis tombé sur toi en cherchant un de mes liens.
Avoue, tu fais cela pour me faire chier.
Je croyais que tu avais suivi mon conseil.
Tech de surface, chez MicroDaube in USA.
A plus jamais, du con!
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 9 août 2007 à 08:47
"mis à jour" ?
vbnet n'est pas une simple mise a jour de VB6, c'est un tout autre language, une toute autre architecture...
podan
Messages postés12Date d'inscriptionlundi 24 juillet 2006StatutMembreDernière intervention14 novembre 2009 9 août 2007 à 04:47
bonjour
ce code est-il mis à jour en vbnet
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 4 nov. 2006 à 12:07
salut MadM@tt,
comme indique sur Form_OutOver :
"On récupère le WM_MOUSEMOVE pour déclencher les WM_MOUSEHOVER et WM_MOUSELEAVE, gérés comme le Timer"
autrement dit, on DOIT faire le TrackMouseEvent sur le MOVE pour que les HOVER et LEAVE soient récupérables (et détectés).
++
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 4 nov. 2006 à 11:31
Salut PCPT,
J'ai une petite question, sur tous les code avec TrackMouseEvent, on relance le TrackMouseEvent à chaque MouseMove.
On pourrait pas faire :
...
Select Case Message
Case WM_MOUSEHOVER
TrackMouseEvent {pour MouseLeave}
Case WM_MOUSELEAVE
TrackMouseEvent {pour MouseHover}
...
Comme ça on économise des ressources ?
En tout cas bon tutoriel
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 1 oct. 2006 à 01:42
Bonsoir PCPT,
Suite à notre conversation en privé,
j' ai suivi tes conseils et je me suis inspiré de cette même source pour
faire ,en deux temps, un Drag/Drop avec simulation du déplacement de texte.
D' abord avec une PictureBox puis avec un UC pour la Transparence.
Voici le lien :
http://www.vbfrance.com/codes/GLISSER-DEPOSER-AVEC- SIMULATION-DEPLACEMENT-TEXTE-ITEM-LISTBOX_39729.aspx
Mon commentaire sur ta source, tu le sais déjà.
j' attenderais le tiens
chaibat
JessicaR44
Messages postés116Date d'inscriptionmardi 8 août 2006StatutMembreDernière intervention29 septembre 2013 12 août 2006 à 23:02
Une pure merveille ! 10/10 !!
Simple, clair net, et sutout efficace. BRAVO et MERCI !!
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 24 juil. 2006 à 02:03
salut,
CodeA -> pour répondre à ta question "comment récupérer l'évènement de TrackPopupMenu", tu peux jeter un oeil ici : http://www.vbfrance.com/code.aspx?ID=38745 ++ ;)
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 22 févr. 2006 à 16:35
merci Warning & Kokise ;)
j'avais promis d'autres Drag&Drop, les voici enfin :
***DragDrop une ligne d'une ListBox en ajout vers l'autre
***DragDrop d'un fichier externe à l'appli vers un Label de l'appli
***DragDrop d'une partie d'une TxtBox vers une autre
voir Form_DragDrop2.frm
@+
PCPT [AFCK]
kokise
Messages postés120Date d'inscriptionjeudi 5 mai 2005StatutMembreDernière intervention21 décembre 2017 8 nov. 2005 à 17:13
Bravo des exemples simples et fonctionnels.
cs_Warning
Messages postés516Date d'inscriptionsamedi 3 février 2001StatutMembreDernière intervention24 octobre 20062 25 oct. 2005 à 01:47
Bonne initiative bravo ! ;)
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 24 oct. 2005 à 13:51
Merci beaucoup Tigroo ;)
tigroo974
Messages postés6Date d'inscriptionmardi 5 août 2003StatutMembreDernière intervention18 juillet 2006 24 oct. 2005 à 08:36
Wouah je reçois la liste des nouveaux postes et deux posts magnifiques de M.PCPT, vraiment interressant et instructif. je ne peux dire que merci pour cet aide.
ricky 10/10 pour les 2 posts
Oki, merci, je vais voir ce que je peut faire.
Merci pour ton aide.
PS, j'adore le titre de ta source.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 23 oct. 2005 à 17:40
salut,
tu simules un déplacement par le caption.
le seul moyen qui me vient en tête est donc de lâcher le bouton de la souris.
c'est à dire que comme tu es en MouseMove, tu as les coordonnées X Y. si la position est hors de la zone RECT que tu veux, tu envoies un MouseUp par Mouse_Event.
Juste une petite question :
J'ai repris une application vb6 et j'ai utilisé l'api SendMessage pour déplacer une image sur la form. Jusque là, tout va bien. Mais je voudrais que cette image ne puisse pas sortir de la form.
En gros qu'elle soit bloquée si on la déplace trop sur un bord.
Merci
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 22 oct. 2005 à 13:13
merci, encore et toujours ;)
CodeA-> les "Declare" sont les déclarations des API, donc de certaines fonctions contenues dans la librairie indiquée (ex : GetCursorPos -> user32.dll).
ce n'est pas une question de rapidité, c'est une obligation. vois çà comme une réservation mémoire.
pour le menu dynamique, il n'a aucune fonctionnalité (à part être "Tracké"). rapproche toi des vraies sources abordant ce sujet, VbFrance en regorge ;) (y'a à prendre et à laisser...)
@+
PCPT [AFCK]
codea
Messages postés94Date d'inscriptiondimanche 9 mai 2004StatutMembreDernière intervention 6 août 2006 22 oct. 2005 à 03:57
J'ai une petite question :
Apres que la fonction TrackPopupMenu est exécutée... on fais comment pour récupérer l'événement du click sur un choix du menu contextuel? ... Je regarde et j'y trouve pas la solution ....
Merci à l'avance,
CoDeA
codea
Messages postés94Date d'inscriptiondimanche 9 mai 2004StatutMembreDernière intervention 6 août 2006 22 oct. 2005 à 03:40
Genial ta source PCPT, déja dit mais c très pro comme code.... J'ai l'impression de suivre un cours :o)
Est-ce que l'utilisation des appels de librairie dynamique (declare) augmentent de bcp la rapidité d'execution d'un programme vb ? ... (Le fond de ma question ca ressemble+ a Vb Vs C++)
P__ROMEO
Messages postés294Date d'inscriptionvendredi 25 février 2005StatutMembreDernière intervention 9 mars 20061 20 oct. 2005 à 01:40
je pense que beaucoup connaissaient tout ca, mais peu comme ca.
ce qui est apprécié ici, c'est l'idée de réunir les fontions les plus demandée sur la souris, dans un seul zip.
de 2, le code bien fait (en tout cas, mieu que celui que j'utilisais)
de 3, et tu l'as dit, belle présentation, travail propre, ce qui est vraiment Rare ici. (je ne dis pas que les autres sources ne sont pas biens présentées, mais 34236 l'est très bien)
Remarque, il ya une précision la haut: Débutant
ici PCPT pensait aux débutant en déposant sa source(et aussi au moin débutant, qui veulent changer de code)
Parfois le travail simple et bien fait, et mieu que le plus dur, mais mal fait.
Je connaissais tout ça chapeau pour la présentation.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 19 oct. 2005 à 17:40
Yoda_Xp, Djamalbe, P_Romeo, philippe,
merci beaucoup pour toutes vos remarques. je ne m'attendais pas à un tel engouement....
je vous réserve encore une petite mise à jour peut-être cette semaine, concernant encore le Drag&Drop (plus ou moins) de 2 différentes manières. surprise ;)
philippe-> ok, demande-moi, j'essayerai de répondre au mieux.
++
PCPT [AFCK]
philippe laschweng 1
Messages postés278Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention13 avril 20132 19 oct. 2005 à 16:59
Bravo !!
C'est vraiment intéressant et ludique ! C'est là que je me rend compte que je suis plus que débutant ..
En dehors des fonctionalités de la souris, y'a un tas de trucs supers intéressant niveau graphisme. J'essaye de comprendre des trucs mais je galère ! Comme le liseré vert autour de la form sans mettre le bandeau habituel d'une Form... enfin j'essaye de comprendre, et si je bloque sur un truc j'essairai de te demander de l'aide !
En tout cas 10/10 sans hésiter !!!
Phil
P__ROMEO
Messages postés294Date d'inscriptionvendredi 25 février 2005StatutMembreDernière intervention 9 mars 20061 19 oct. 2005 à 15:22
en plus, c'est beau à voir. je recherche celui qui a poser la question du glissé déposé, et le transfère vers ce tuto. il trouvera son bonheur.
34236 répond vraiment a beaucoup de question. :)
Merci Pcpt
Bonne programation.
djamalbe
Messages postés17Date d'inscriptiondimanche 15 février 2004StatutMembreDernière intervention 2 septembre 2006 19 oct. 2005 à 14:47
Excellent travail, merci et bonne continuation.
Yoda_XP
Messages postés21Date d'inscriptionmardi 14 juin 2005StatutMembreDernière intervention28 mars 2006 19 oct. 2005 à 09:19
Que peut on ajouter ? Cela répond déja à tellement de questions. Enfin pour moi ! Merci de nous montrer la lumière maitre. 10/10.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 19 oct. 2005 à 08:13
Merci de ton commentaire P_Romeo.
j'ai mis à jour selon ta suggestion :
***DragDrop classique avec déplacement d'objet
***Déplacement d'objet par caption (SendMessage)
***Dessin de texte au MouseUp sur tout objet, même hors Form (ExtTextOut)
y'a pu qu'à ...
PCPT [AFCK]
P__ROMEO
Messages postés294Date d'inscriptionvendredi 25 février 2005StatutMembreDernière intervention 9 mars 20061 19 oct. 2005 à 03:18
Moi, je l'ai toujours dit. Plus claire qu'une explication venant de Pcpt, tu es bien pour devenir prof.
on le sais déjas, toujours simple pcpt. toujours compréhensible, et surtout éfficace.
moi, j'aime.
pcpt>> tu parlais d'ajouter d'autre fonction, il ya le déplacement d'un objet avec la souris "glisser, déposer". cette question a été posé hièr, et les réponses, je les ai toutes testées, mais, pas très pro.
sauf erreur de ma part, je n'ai pas vu cela dans le tuto.
BONNE SOURCE.
et, BONNE CONTINUATION.
9,5/10. mais, on peut pas. donc, 10/10 (bien sur, en me disant que les mises a jours suiveront :) )
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 18 oct. 2005 à 23:08
Merci à tous les 2. çà donne envie de continuer à partager...
Pour donner peut-être plus envie de regarder, voici les points abordés :
***Ajouter l'évènement Scroll Up et Down à un Objet (SubClassing)
***Faire disparaître et apparaître le curseur sur un objet (ShowCursor)
***Capture la position de la souris sur la surface de l'écran à l'évènement MouseMove d'un objet (SetCapture)
***Ajouter les évènements MouseOut et MouseOver à un objet (Timer GetCursorPos)
***Ajouter les évènements MouseOut et MouseOver à un objet (SubClassing)
***Définir une zone de mouvement inférieur à celle de l'écran, exemplée pour un Objet (ClipCursor)
***Modifier les coordonnées du pointeur (SetCursorPos)
***Déclencher différents Click MouseDown Up Droit Gauche Middle (Mouse_Event)
et en bonus pour mettre tout çà en forme, différentes petites fonctions maison ou API...
(lecture facile de fichier, mise en page standard de Form, menu popup, etc...)
y'a déjà de quoi faire, mais le principe du tutorial est aussi d'évoluer, alors y'a qu'à demander ;)
Ouah, Très bonne source et originale.
De bonnes idées. 9/10
Ps pour l'auteur du 10/10 inconnu
Vaut mieux un commentaire sans note, qu'une note sans commentaire. Mais un commentaire avec une note est toujours mieux.
CsM Skate
Messages postés60Date d'inscriptiondimanche 8 mai 2005StatutMembreDernière intervention20 mai 2007 18 oct. 2005 à 20:58
Comme d'hab commentaire et comme d'hab tout simplement génial
9/10 ;)
Nico
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 18 oct. 2005 à 19:25
laissez vos commentaires svp
(et merci à j'sais pas qui...)
6 mars 2009 à 10:27
concernant mon outil, je ne te propose pas, bien entendu de survoller la barre d'outils ^^
simplement repiquer du code de cet outil ; de t'arranger (FindWindow/FindWindowEx) pour récupérer un hWnd vers la fenêtre souhaitée (barre d'etat).
concernant les APIs, lire la MSDN... c'est écrit pour le C, mais c'est aisément transposable en VB6
6 mars 2009 à 10:21
JE te remercie pour tes réponses, j'avais pas compris l'idée de survoler la barre d'outils...
En effet j'ai autant de temps que je veux avant de lancer la séquence d'évènements souris/clavier.
Je vais t'envoyer mon projet VB si tu veux. Peux tu m'expliquer comment uploader des fichiers sur ce forum stp.
En fait lorsque je démarre mon application VB, ma fenêtre me propose un choix de 5 boutons command_click auquels sont attachées différentes séquences. De plus il y a une liste box qui me permet de visualiser toutes les fenêtres ouvertes sur le bureau et de récupérer le handle de la fenêtre sur laquelle je souhaite agir par la suite, par simple clique dans la listbox.
Ensuite je dois entrer dans un textbox la valeur correspondant au nombre de répétition de la tâche.
Je n'ai pas encore testé le code que tu m'as donné (
tick =>
oldVAR = newVAR
newVAR = texte de la "barre"
)
Je dois travailler sur autre chose aujourd'hui mais je ne manque pas dem'y pencher ce we.
Je veux vraiment te remercier pour ton aide. Ca me fais gagner un temps énorme!!!! Encore merci!!
Ps: Eventuellement, connais tu un bon ouvrage sur la programmation des API Windows universel (indépendant d'un lanage de programmation...)
6 mars 2009 à 07:30
pour rappel:
http://www.vbfrance.com/codes/EXTRAIRE-TEXTE-FENETRES-APPLICATIONS-TIERCES-LISTBOX-LISTVIEW-TEXTBOXES_46390.aspx
6 mars 2009 à 00:53
comme tu peux te permettre de faire quelques manips au démarrage de ton appli (comme tu le fais actuellement avant de lancer ensuite le reste du code), j'entendais en étape 1 de récupérer le handle de la barre voulue
au plus simple : un timer, tu survoles la barre et tu as le handle par windowdfrompoint.
handle sauvé, reste du code
tu peux aussi dragdroper...
voir ces api dans le tuto, et la msdn pour plus d'infos
http://msdn.microsoft.com/fr-fr/library/default.aspx
5 mars 2009 à 22:22
C'est vraiment sympa de ta part de répondre aussi rapidement! Je vais me pencher sur le timer...
En revanche pourrait tu m'expliquer de facon plus détaillée ce que signifie "récupérer le handle de cette barre par WindowFromPoint en calibrage au lancement de ton appli" STP?
A+
5 mars 2009 à 20:56
ton appli est freezée pendant le temps du sleep, si ton CPU monte, c'est de l'appli SAP ou d'autre chose, mais plus rien ne se passe dans ton appli
et forcément si tu effectues une tache tous les X, entrecoupée de sleep, tu ne récupèreras jamais la main sur ton appli (donc pas possible de la fermer sans la killer)
tu ferais mieux de jouer avec un timer
tick =>
oldVAR = newVAR
newVAR = texte de la "barre"
si old<>new, tu as tes actions à faire (et bien stop timer, sur old = new, puis relance le timer à la fin de tes actions)
la barre dont tu parles est une statusbar, tu peux en effet intercepter les refresh par exemple (wm_paint) mais il te faut d'abord récupérer le handle de cette barre par findwindowsex et getclassname par exemple, ou par WindowFromPoint en calibrage au lancement de ton appli
tu peux ensuite récupérer le texte par sendmessage
pas possible (à ma connaissance) de savoir quand l'action executée par un bouton externe à l'appli est terminée
bonne chance :)
5 mars 2009 à 20:18
Merci d'avance,
A+Roland
Et VIVE les API!!!!
5 mars 2009 à 20:13
"Retenez tout d'abord qu'une fenêtre peut être un bouton de commande, une feuille, une zone de texte, une zone de liste,... bref tout contrôle. Et qu'une fenêtre est basée sur une classe. Chaque classe (fenêtre) possède une propriété dont la valeur est une adresse vers une "Procédure Windows" (WndProc) qui est chargée de gérer les messages arrivant à cette classe."
Si c'est vrai ma question est : comment récupérer l'adresse du WNDProc qui gère ma barre d'état sous une application définie (en l'occurence SAP)?
5 mars 2009 à 20:08
En fait j'ai besoin de récupérer les coordonées du curseur une seule fois (bon un peu plus mais c'est tout comme...) et comme je n'arrive pas à me détacher de la feuille sans setCapture, ca me va très bien. En fait une fois que j'ai les coordonnées, je les rentres en constantes et mon soft éxéxute une séquence raccourci clavier et clic souris à un endroit bien déterminé, de sorte à ce que la tâche puisse s'enchainé toute seule... Pour te situer le pbm, je dois répéter cette séquence de clic et raccourci clavier une centaine de fois d'affiler... Donc vive l'automatisme!!!
Par contre vu que tu as l'air bien calé en API et thread (faut vraiment que je me forme en processus!!!), je voulais te demander un petit conseil. En fait entre deux simulations d'évènement clavier je dois attendre un certain temps qui est variable d'une fois à une autre (le CPU réagit plus ou moins vite selon les cas...) Et cela me pose pbm car pour attendre entre mes deux simulations j'effectue un sleep qui est fixe!!!! En plus le sleep me bouffe le CPU pendant tout ce temps la et impossible de gérer un bouton d'arrêt de l'application. Le seul moyen de sortir de mon application est Ctrl+Maj+Esc (vraiment bourin comme méthode...). Donc je souhaiterais me servir du message qui s'affiche dans la barre d'état (ou de dialogue, je sais pas trop le nom de la barre la plus en bas de ma page...) à la fin de chaque tâche. Apparemment en passant par du subclassing je serais en mesure d'intercepter ce message mais je n'arrive pas à trouver la variable susceptible de contenir les iformations affichées dans la barrre d'état... Pourrez tu m'aider stp?
5 mars 2009 à 18:50
l'API SetCapture est liée au thread en cours
en ide le thread est VB (et non ton exe)
en compilé, pour l'exemple, il faut forcer l'attachement à la fenêtre en cours
click sur le bouton capture, puis click (gauche) sur la form et déplace la souris, tu auras alors les coordonnées tant que le bouton de la souris reste enfoncé
nb : du besoin que tu décris, setcapture n'est pas forcément la meilleure manière de faire. à voir...
5 mars 2009 à 15:49
Tout d'abord félicitation pour ce tutoriel!!! Il est vraiment bien construit... Je ne comprends pas trop la remarque de VBTOTRASH...
En revanche je rencontre une certaine difficulté à faire marcher le tuto lorsque je créer l'executable et que je la lance en dehors de l'IDE VB6. Je m'explique. La partie qui m'intéresse est celle concernant la récupération des coordonnées du curseur de la souris en dehors de la feuille de l'application VB, avec l'API SetCapture. Lorsque je lance le tutoriel depuis l'IDE VB6, la capture de coordonnées fonctionne bien même lorsque je survole l'écran au dela de la feuille. En revanche lorsque je lance le tuto depuis l'executable sans passer par l'IDE, le positionement du curseur cesse dès que je quitte la feuille de l'application.... et même si j'ai lancé le bouton "Capture" au préalable...
En fait j'aurai besoin de définir les coordonnées d'un bouton d'un application SAP afin de faire un petit soft qui exécute une séquence d'appui sur différents boutons, afin faire une tâche répétitive en châine... Mon soft est bien avancé mais je suis bloqué par l'impossibilité de récupérer les coordonnées des points ou il faudra que je simule les évènement souris avec l'API SetCursorPos...
Merci pour votre aide!
Roland
1 oct. 2008 à 22:33
Va jouer ailleurs.
1 oct. 2008 à 22:29
Je n'arrive pas à comprendre comment tu peux avoir de bonnes appréciations, avec la daube que tu fais.
Pour moi, c'est la preuve qu'il y a beaucoup de lèches-cul ici, ou que tu payes les mecs, ou que tu as plusieurs comptes ouverts. Gros malin !
Pas la peine de me répondre, j'étais de passage.
Je suis passé à la vitesse supérieure. Je fais beaucoup d'InterPoub (html, ftp .... )
Même Mozilla devient pourri ! Pour te décrire la merde.
A vrai dire, toute l'informatique, c'est de la daube de A à Z.
Evite d'associer mon nom au tien, çà me dérange. Je suis tombé sur toi en cherchant un de mes liens.
Avoue, tu fais cela pour me faire chier.
Je croyais que tu avais suivi mon conseil.
Tech de surface, chez MicroDaube in USA.
A plus jamais, du con!
9 août 2007 à 08:47
vbnet n'est pas une simple mise a jour de VB6, c'est un tout autre language, une toute autre architecture...
9 août 2007 à 04:47
ce code est-il mis à jour en vbnet
4 nov. 2006 à 12:07
comme indique sur Form_OutOver :
"On récupère le WM_MOUSEMOVE pour déclencher les WM_MOUSEHOVER et WM_MOUSELEAVE, gérés comme le Timer"
autrement dit, on DOIT faire le TrackMouseEvent sur le MOVE pour que les HOVER et LEAVE soient récupérables (et détectés).
++
4 nov. 2006 à 11:31
J'ai une petite question, sur tous les code avec TrackMouseEvent, on relance le TrackMouseEvent à chaque MouseMove.
On pourrait pas faire :
...
Select Case Message
Case WM_MOUSEHOVER
TrackMouseEvent {pour MouseLeave}
Case WM_MOUSELEAVE
TrackMouseEvent {pour MouseHover}
...
Comme ça on économise des ressources ?
En tout cas bon tutoriel
1 oct. 2006 à 01:42
Suite à notre conversation en privé,
j' ai suivi tes conseils et je me suis inspiré de cette même source pour
faire ,en deux temps, un Drag/Drop avec simulation du déplacement de texte.
D' abord avec une PictureBox puis avec un UC pour la Transparence.
Voici le lien :
http://www.vbfrance.com/codes/GLISSER-DEPOSER-AVEC-
SIMULATION-DEPLACEMENT-TEXTE-ITEM-LISTBOX_39729.aspx
Mon commentaire sur ta source, tu le sais déjà.
j' attenderais le tiens
chaibat
12 août 2006 à 23:02
Simple, clair net, et sutout efficace. BRAVO et MERCI !!
24 juil. 2006 à 02:03
CodeA -> pour répondre à ta question "comment récupérer l'évènement de TrackPopupMenu", tu peux jeter un oeil ici : http://www.vbfrance.com/code.aspx?ID=38745
++ ;)
22 févr. 2006 à 16:35
j'avais promis d'autres Drag&Drop, les voici enfin :
***DragDrop une ligne d'une ListBox en ajout vers l'autre
***DragDrop d'un fichier externe à l'appli vers un Label de l'appli
***DragDrop d'une partie d'une TxtBox vers une autre
voir Form_DragDrop2.frm
@+
PCPT [AFCK]
8 nov. 2005 à 17:13
25 oct. 2005 à 01:47
24 oct. 2005 à 13:51
24 oct. 2005 à 08:36
ricky 10/10 pour les 2 posts
23 oct. 2005 à 18:01
Merci pour ton aide.
PS, j'adore le titre de ta source.
23 oct. 2005 à 17:40
tu simules un déplacement par le caption.
le seul moyen qui me vient en tête est donc de lâcher le bouton de la souris.
c'est à dire que comme tu es en MouseMove, tu as les coordonnées X Y. si la position est hors de la zone RECT que tu veux, tu envoies un MouseUp par Mouse_Event.
@+ ;)
PCPT [AFCK]
23 oct. 2005 à 16:02
J'ai repris une application vb6 et j'ai utilisé l'api SendMessage pour déplacer une image sur la form. Jusque là, tout va bien. Mais je voudrais que cette image ne puisse pas sortir de la form.
En gros qu'elle soit bloquée si on la déplace trop sur un bord.
Merci
22 oct. 2005 à 13:13
CodeA-> les "Declare" sont les déclarations des API, donc de certaines fonctions contenues dans la librairie indiquée (ex : GetCursorPos -> user32.dll).
ce n'est pas une question de rapidité, c'est une obligation. vois çà comme une réservation mémoire.
pour le menu dynamique, il n'a aucune fonctionnalité (à part être "Tracké"). rapproche toi des vraies sources abordant ce sujet, VbFrance en regorge ;) (y'a à prendre et à laisser...)
@+
PCPT [AFCK]
22 oct. 2005 à 03:57
Apres que la fonction TrackPopupMenu est exécutée... on fais comment pour récupérer l'événement du click sur un choix du menu contextuel? ... Je regarde et j'y trouve pas la solution ....
Merci à l'avance,
CoDeA
22 oct. 2005 à 03:40
Est-ce que l'utilisation des appels de librairie dynamique (declare) augmentent de bcp la rapidité d'execution d'un programme vb ? ... (Le fond de ma question ca ressemble+ a Vb Vs C++)
20 oct. 2005 à 01:40
ce qui est apprécié ici, c'est l'idée de réunir les fontions les plus demandée sur la souris, dans un seul zip.
de 2, le code bien fait (en tout cas, mieu que celui que j'utilisais)
de 3, et tu l'as dit, belle présentation, travail propre, ce qui est vraiment Rare ici. (je ne dis pas que les autres sources ne sont pas biens présentées, mais 34236 l'est très bien)
Remarque, il ya une précision la haut: Débutant
ici PCPT pensait aux débutant en déposant sa source(et aussi au moin débutant, qui veulent changer de code)
Parfois le travail simple et bien fait, et mieu que le plus dur, mais mal fait.
A+
20 oct. 2005 à 00:16
19 oct. 2005 à 17:40
merci beaucoup pour toutes vos remarques. je ne m'attendais pas à un tel engouement....
je vous réserve encore une petite mise à jour peut-être cette semaine, concernant encore le Drag&Drop (plus ou moins) de 2 différentes manières. surprise ;)
philippe-> ok, demande-moi, j'essayerai de répondre au mieux.
++
PCPT [AFCK]
19 oct. 2005 à 16:59
C'est vraiment intéressant et ludique ! C'est là que je me rend compte que je suis plus que débutant ..
En dehors des fonctionalités de la souris, y'a un tas de trucs supers intéressant niveau graphisme. J'essaye de comprendre des trucs mais je galère ! Comme le liseré vert autour de la form sans mettre le bandeau habituel d'une Form... enfin j'essaye de comprendre, et si je bloque sur un truc j'essairai de te demander de l'aide !
En tout cas 10/10 sans hésiter !!!
Phil
19 oct. 2005 à 15:22
34236 répond vraiment a beaucoup de question. :)
Merci Pcpt
Bonne programation.
19 oct. 2005 à 14:47
19 oct. 2005 à 09:19
19 oct. 2005 à 08:13
j'ai mis à jour selon ta suggestion :
***DragDrop classique avec déplacement d'objet
***Déplacement d'objet par caption (SendMessage)
***Dessin de texte au MouseUp sur tout objet, même hors Form (ExtTextOut)
y'a pu qu'à ...
PCPT [AFCK]
19 oct. 2005 à 03:18
on le sais déjas, toujours simple pcpt. toujours compréhensible, et surtout éfficace.
moi, j'aime.
pcpt>> tu parlais d'ajouter d'autre fonction, il ya le déplacement d'un objet avec la souris "glisser, déposer". cette question a été posé hièr, et les réponses, je les ai toutes testées, mais, pas très pro.
sauf erreur de ma part, je n'ai pas vu cela dans le tuto.
BONNE SOURCE.
et, BONNE CONTINUATION.
9,5/10. mais, on peut pas. donc, 10/10 (bien sur, en me disant que les mises a jours suiveront :) )
18 oct. 2005 à 23:08
Pour donner peut-être plus envie de regarder, voici les points abordés :
***Ajouter l'évènement Scroll Up et Down à un Objet (SubClassing)
***Faire disparaître et apparaître le curseur sur un objet (ShowCursor)
***Capture la position de la souris sur la surface de l'écran à l'évènement MouseMove d'un objet (SetCapture)
***Ajouter les évènements MouseOut et MouseOver à un objet (Timer GetCursorPos)
***Ajouter les évènements MouseOut et MouseOver à un objet (SubClassing)
***Définir une zone de mouvement inférieur à celle de l'écran, exemplée pour un Objet (ClipCursor)
***Modifier les coordonnées du pointeur (SetCursorPos)
***Déclencher différents Click MouseDown Up Droit Gauche Middle (Mouse_Event)
et en bonus pour mettre tout çà en forme, différentes petites fonctions maison ou API...
(lecture facile de fichier, mise en page standard de Form, menu popup, etc...)
y'a déjà de quoi faire, mais le principe du tutorial est aussi d'évoluer, alors y'a qu'à demander ;)
PCPT [AFCK]
18 oct. 2005 à 22:40
De bonnes idées. 9/10
Ps pour l'auteur du 10/10 inconnu
Vaut mieux un commentaire sans note, qu'une note sans commentaire. Mais un commentaire avec une note est toujours mieux.
18 oct. 2005 à 20:58
9/10 ;)
Nico
18 oct. 2005 à 19:25
(et merci à j'sais pas qui...)
PCPT [AFCK]