Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : PostMessage [ Système / Exécution ] (la_gavorade)

mardi 27 juin 2006 à 14:52:20 | PostMessage

la_gavorade

Membre Club
Bonjour à tous, J'ai un soucis avec PostMessage (ça va être un peu long, je vous préviens) : Voilà, j'ai fait une appli qui entre autres lance un programme externe (programme de stats dont l'interface ressemble bcp à une invite de commande), et j'ai besoin de simuler des entrées clavier pour lancer les macros de ce programme externe. Alors quand je le lance sur mon poste, pas de pb, je fais des keybd_event et ça marche. Le pb est que je veux également qu'elle fonctionne à partir d'un serveur virtuel auquel j'accède par une connexion bureau à distance. Là encore, si je reste sur le bureau du serveur virtuel, ça marche, mais dès que je ferme ou minimise la fenêtre de ce serveur, alors le keybd_event ne marche plus. J'ai bien essayé de forcer la mise au premier plan de la fenêtre du prg en utilisant SetForeGround, et c'est OK....là encore si je reste sur le bureau du serveur, sinon ça marche pas. Ma piste d'aujourd'hui, c'est d'utiliser un PostMessage en indiquant le handle de la fenêtre du prg, puis les touches à simuler, mais là bizarre, mon PostMessage ne fait rien du tout. (J'ai bientôt fini). J'ai donc créé un petit test qui met une fenêtre Notepad en premier plan puis écrit dedans, et ça marche pas. Je vous montre le code correspondant : J'utilise un FindWindow(Notepad) pour trouver le handle du Notepad, puis un SetForeGround(handle_notepad). Tout ça, ça marche C'est maintenant que ça marche plus, et pourtant la fenêtre Notepad est bien en surbrillance : PostMessage(handle_notepad, WM_KEYDOWN, VK_DECIMAL, 0) ; PostMessage(handle_notepad, WM_KEYUP, VK_DECIMAL, 0) ; // Là, il ne se passe rien, et pourtant le programme va bien au delà de ces deux lignes de code, il n'est pas bloqué... J'y comprends pas grand chose... Merci de votre aide !

mardi 27 juin 2006 à 16:03:37 | Re : PostMessage

Francky23012301

Membre Club
Salut, D'apres ce que je comprends des que tu quittes la pièce ton appli fonctionne plus ? et si tu utilisais un épouvantail ?? Peut etre que ca fonctionnerait. L'autre solution est de faire appel à un exorsiste. Je crois que fOxi a une incatation spéciale ou il faut se mettre tout nu et danser la coucaratcha avec un balai à la main. Mais ca fonction qu'à la pleine lune. Plus sérieusement, pourrais tu reformuler ta question de facon plus claire car la il est assez difficile de comprendre (trop d'informations pas tres clairs) Merci à toi A+ ;)

mardi 27 juin 2006 à 16:32:37 | Re : PostMessage

la_gavorade

Membre Club
Alors pour Francky, dont l'humour n'a rien à envier à celui de Guy Montagné pour ne citer que lui, je donne une définition du terme "bureau", qu'on peut trouver facilement sur internet : "Ecran qui s'affiche après le démarrage de l'ordinateur. Y apparaissent différentes icônes : Poste de travail, corbeille, etc..." De la même façon, cliquer sur une souris ne signifie pas pour autant qu'on fait du mal à un petit rongeur... Quand je quitte "le bureau du serveur virtuel", en termes plus clairs, je clique sur la petite croix en haut à gauche de la fenêtre dans laquelle s'affiche le bureau du serveur virtuel. Pas besoin d'exorciste (avec un "c") pour tout ça... Bref, désolé d'avoir été un peu obscur, je ré-explique mon pb en vous donnant le code du test : handle_notepad := findwindow('notepad', nil) ; //jusque là, OK Setforeground(handle_notepad) ; // Encore OK, la fenêtre Notepad est active PostMessage(handle_notepad, WM_KEYDOWN, VK_DECIMAL, 0) ; PostMessage(handle_notepad, WM_KEYUP, VK_DECIMAL, 0) ; //Pas OK, le point (ou la virgule, bref le symbole décimal) ne s'affiche pas dans ma fenêtre. Je reprécise qu'en utilisant keybd_event ça marche mais ça ne résoud pas mon pb (je vais pas répéter mon histoire de bureau virtuel à minimiser et de connexion à distance...mais faudrait que je puisse utiliser soit PostMessage, soit SendMessage). Alors, y'a quoi qui coince avec mon PostMessage ??? Merci d'avance !

mardi 27 juin 2006 à 19:09:53 | Re : PostMessage

Matt 261

Membre Club
Je la trouve très bien moi la réponse de Francky.

@+
 Matt


La paresse est la mère du génie...
http://www.delphilab.com

mercredi 28 juin 2006 à 11:51:14 | Re : PostMessage

la_gavorade

Membre Club
Bon, Matt et Francky, j'ai vu sur DelphiLab que vous étiez copains comme cochons, pas étonnant donc qu'une solidarité amicale se dégage pour me renvoyer dans mes 22... Désolé d'avoir été un peu agressif, si vous l'avez ressenti comme ça, mais l'énervement dû au bug que je rencontre depuis deux jours et qui bloque le travail d'une équipe de 8 personnes qui attendent sa résolution additionné à la désagréable impression d'être pris pour un gros blaireau (plus le stress d'un 1/8 de finale à venir le soir même) m'ont fait perdre ma retenue habituelle. Encore désolé. Est-ce que l'absence de réponses depuis est due à un boycott-punition, au fait que ma demande n'est toujours pas claire, ou au fait que personne ne trouve la solution ? Merci d'avance. Thomas.

mercredi 28 juin 2006 à 12:01:49 | Re : PostMessage

Matt 261

Membre Club
Disons que tout est un peu confondu dans ce que essaye de nous expliquer. Mais nous sommes là pour t'aider donc si tu peux réexpliquer plus clairement, nous ferons notre possible pour t'aider.

@+
 Matt


La paresse est la mère du génie...
http://www.delphilab.com

mercredi 28 juin 2006 à 14:05:17 | Re : PostMessage

la_gavorade

Membre Club
Ok, on oublie (pour le moment) les pb de connexion à distance, etc etc et on se concentre sur mon petit test qui marche pas et qui me déconcerte. J'ai créé un tout petit prog pour tester l'utilisation de PostMessage ou SendMessage, qui contient juste un bouton avec les lignes de codes ci-dessous lorsqu'il est activé (j'ai une fenêtre Notepad ouverte au préalable): handle_notepad := findwindow('notepad', nil) ; //jusque là, OK, je trouve le handle de ma fenêtre Notepad. Setforeground(handle_notepad) ; // Encore OK, la fenêtre Notepad est activée et mise au premier plan. PostMessage(handle_notepad, WM_KEYDOWN, VK_DECIMAL, 0) ; PostMessage(handle_notepad, WM_KEYUP, VK_DECIMAL, 0) ; //Pas OK, le point (ou la virgule, bref le symbole décimal) ne s'affiche pas dans ma fenêtre. Je veux juste savoir pourquoi j'arrive pas à afficher mon symbole décimal dans cette fenêtre Notepad grâce à PostMessage... A+

mercredi 28 juin 2006 à 14:17:32 | Re : PostMessage

Francky23012301

Membre Club
Bon vu le poste apres le tien, je tiens à intervenir ;) : Si je t'ai vexé j'en suis navré. Sincèrement dans ma réponse, je souhaitais faire de l'humour en aucune facon te porter atteinte dans ton intégrité (qu'est ce que je parle bien en ce moment : j'ai eu des doigts tout neufs). Je me suis simplement permis de te signaler que tu avais donné trop d'infos : conséquences une grosse difficulté à analyser le probleme. Si je te l'ai signalé c'est que l'on puisse t'aider. Effectivement j'ai un lien d'amitié avec Matt et d'autres membres actifs (JLen, Cirec,fOxi, Delphiprog, Florenth,Nico ect ect ect). Maintenant il peut m'arriver de me planter (et c'est vrai pour les autres) et de déraper : si tel est le cas, je peux t'assurer que je serai remis à ma place (et ca déjà été le cas) malgré l'amitié que l'on peut avoir entre nous (question d'honneté). Si Matt a posté ce message ce n'est pas (uniquement) par solidarité ou amitié mais parce qu'il n'avait rien de mal dans mes propos. Par rapport à DelphiLab (Au fait merci de leur faire de la pub ^^), on m'a proposé d'y devenir Administrateur : décision que j'avais accepté puis enfin de compte décliné pour une question de loyauté envers CS (ce qui ne vas pas dire que je ne vais pas leur donné un coup de main : ;)). J'apprécie cette communauté et la respecte (donc toi aussi). Désolé si je t'ai vexé. Reformule et recadre ta question et si je peux aider, je le ferai A+

mercredi 28 juin 2006 à 14:41:32 | Re : PostMessage

Francky23012301

Membre Club
Une petite recherche sur Google (avec les mots : delphi+Handle+PostMessage) t'aurais expliquer le pourquoi du comment : http://tcharles.developpez.com/simul/?delphi=1. ... la fonction PostMessage() et l'utilisation de keybd_event() ne permet pas de limiter l'évènement à une application cible. Par ailleurs, une combinaison de ces deux fonction ne résoud pasle problème à coup sûr. Le problème vient du fait que la fonction PostMessage() n'attends pas que le message ai été traité par l'application cible avant de rendre la main à notre programme de contrôle. Pour parer à ce problème, on est obligé d'utiliser la fonction SendMessage() qui a le même prototype que PostMessage() mais qui attend que le message ai été traité pour rendre la main. Cependant, si l'application cible ne rend pas la main très rapidement il y a de grande chances pour que l'utilisateur appuye sur touche du clavier pendant ce laps de temps et on ne peut pas mesurer les conséquences de cette interférence. La seule solution qui nous reste est donc d'espèrer que l'utilisateur sera loin de son clavier au moment où on effectuera la simulation. Il faut utiliser SendMessage : PostMessage est non bloquant. Voila déjà un début d'explication et un début de solution. De plus je te conseille de faire un petit test : tu inverses des deux PostMessages. Et la tu aurais ciblé ton probleme réellement. A+

mercredi 28 juin 2006 à 15:11:54 | Re : PostMessage

la_gavorade

Membre Club
Merci Francky pour ces pistes. Malheureusement, le post de GRrosminet que tu as mis en lien, c'est un des premiers trucs que je suis allé voir et que j'ai imprimé avant même de poster mon message sur le forum. C'est très bien fait, et ça m'a éclairci pas mal de trucs sur les simu clavier / souris.....mais même avec des SendMessage à la place des PostMessage ça marche toujours pas ! Et l'ajout à la fin de mon code d'un petit "ShowMessage('fin du test');" m'a malheureusement prouvé que le SendMessage n'est pas bloquant non plus dans mon cas, et rend la main très vite. Il envoie donc la requête, mais je sais pas où, en tout cas pas vers la fenêtre Notepad... ??? A+, merci pour votre aide.


1 2

Cette discussion est classé dans : handle, marche, fenêtre, postmessage, notepad


Répondre à ce message

Sujets en rapport avec ce message

handle de la fenêtre lister les composants [ par yvessimon ] Bonjour,A partir d'une application principale je récupére le handle d'une autre fénêtre .Comment récupérer la liste des composants de cette autre fénê Probleme avec postmessage [ par darkst ] je veut envoyer des touche a une autre application avec postmessageje reussi a envoyer les lettre mais elle double et les touche f1-f2-..- ..  ne marc Récupérer tous les handles des contrôles d'une fenêtre (avec TabControl) [ par jnmchl ] Bonjour,La question est dans le titre est bien qu'un post existe quelques lignes auparavant ... Cirec me dirait : cherche au topic :<a href="http://ww Handle-savonnette à la c.. [ par Caribensila ] Bonjour,Je fais un bench et j'ai besoin du gestionnaire des tâches de Windows pour contrôler certains trucs.Je me suis dit, confiant (et décontracté a récupérer le nom (ou le handle) de la fenêtre actuellement active du windows) [ par bazbazus ] salut a tous je veut récupérer le nom (ou le handle) de la fenêtre actuellement active du windows)? . j'ai chercher sur le site et jai pas trouver. Taille d'une TForm plus grande que la largeur de l'écran [ par speedman31 ] Bonjour,J'ai une question toute simple : pour faire un test de capture Bitmap, j'aurai besoin de dimensionner une fenêtre plus grande que la taille de RichEdit et Threads [ par Gerard ] Bonjour,Je souhaite pouvoir créer des fenêtre RichEdit en dynamique afin de traiter du texte avec un format enrichi qu'on peut ensuite sauvegarder dan ShellExecute et SW_Hide [ par torest666 ] Bonjour,J'utilise ShellExecute pour effectuer une commande de conversion de fichier. Au moment de son exécution j'aimerais que la fenêtre MS Dos en s' Mettre un TBitmap en mémoire [ par Matware456 ] Bonjour, Comme le titre l'indique j'aimerais placer un TBitmap en mémoire, c'est à dire le placer entièrement dans la RAM pour pouvoir le réutiliser d Problème fenêtre mdi [ par Wiska ] Bonjour,Je rencontre actuellement des problèmes lors de l'execution d'une application mdi.Dans celle-ci, j'utilise des fenêtre modales. Mon problème e


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,452 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.