|
|
|
|
J'ai beau relire mais il me manque des éléments/précisions...
Peux-tu etre plus exaustif stp. Enfin détail-nous l'objectif, le materiel et méthodes retenues pour atteindre l'objectif. @+ ~°sidarus°~ |
Bonjour,
Puisque que vous avez commencer avec VBA, je vous conseille d'utiliser VBS (un sous-ensemble) qui s'insère très bien sous VBA et vous permettra d'effectuer tous les opérations requises en mode DOS. Enfin, c'est un avis ! Lupin |
|
Merci de votre réponse, je vais tenter d'être plus compréhensible.
NB: ce post aurait dû figurer dans la rubrique programmation mais je me suis tromper! Mon appareil communique déja avec mon pc via le port série et le protocole RS 232. Cette communication est assurée par le biais d'un programme qui s'éxécute dans une fenêtre DOS. Le programme lorsqu'il aprt en lecture peut acquérir les données dans un fichier texte avec séparateurs. Moi j'arrive sans problème à exploiter ce fichier texte et faire tout ce que je veux avec. En revanche, pour que ce fichier texte soit généré, je dois activer mon programme en dos et lui donner des isntructions. Dorénavent le but est donc de parvenir à ouvrir le programe dos en question et lui faire lancer l'acquisition des données auromatiquement. Pour l'ouvrir je fais appel à la comamnde shell. Ensuite il me faut signifier au programme qu'il doit démarrer l'acquisition des données dans un fichier texte spécifié son nom et enfin arrêter le programme. Ensuite il me faut donc émmuler une saisie clavier sur ce programme dos des touches F2(démarrage), A (pour le nom de mon fichier texte) entrée(pour le valider), F3(pour arrêter le prog) et esc (pour terminer le prog). Donc le problème c'est q'uen VBA la fonction sendkeys et la fonction keybd_event qui sont sensé immulé l'appuie sur une touche en directin d'un programme ne marche d'une part que pour les programmes qui ont la main (on peut l'obtenir avec la fonction applactivate) et avec les programmes souwindows donc pas les programmes en dos comme le mien. La question est donc sacahnt cela, une âme généreuse et créative aurait-elle une idée de fonction pouva&nt faire l'affaire n VBA ou à défaut une solution dans un autre langage de programmation, sachant que pour ainsi dire, je n'en maitrise aucun.
|
ARf bonne question!
Je tablerai pour un fichier comiler en .exe, donc il est pas évident de connaître le langage dans lequel il est porgrammé. Je ne sais si je suis très clair! En tout cas merci de s'intéresser à mon problème! |
|
ARf bonne question!
Je tablerai pour un fichier comiler en .exe, donc il est pas évident de connaître le langage dans lequel il est porgrammé. Je ne sais si je suis très clair! En tout cas merci de s'intéresser à mon problème! |
|
Bonjour,
Ouf ! Un logiciel compiler, il n'y a pas grand chose à faire de ce côté. Je crois bien que je pencherais encore pour le vbscript, celui-ci pouvant être exécuter en mode console (DOS), il est possible de monitorer cette application. Toutefois, la démarche est relativement complexe. Le site de microsoft "Script Center" devrait vous permettre de trouver les objets à inclure sous VBA pour exécuter et monitorer une application DOS. http://www.microsoft.com/technet/community/scriptcenter/default.mspx http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/wsmthregread.asp Ça ne vous aideras peut-être pas mais enfin, c'est une opinion. Lupin |
|
Bonjour Arsène!
Ba merci pour ces raccourcis, j'ai peut-être bien trouvé mon bohneur. Je vais potasser la focntion ce week-end et essayer de mettre en application celle-ci lundi, si le redémarrage de l'usine m'en laisse le temps. Je vous tiens au courant. Et encore merci. Si une fois le script VB opérationnel vous êtes intéressé par celui-ci faites moi signe! Merci encore. |
Salut a tous
je pense que la solutions est dans l'utilisation d'uneAPI, je l'ai utilisée, je la retrouve et je vous la donne A+ |
Voila je l'ai retrouvé
Fonction keybd_event Declare Sub keybd_event Lib "user32" Alias "keybd_event" ( _ ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) Versions : . Windows 95/98 : Oui . Windows NT : A partir de 3.1 . Windows 2000/XP : Oui Description : Cette API permet de simuler des frappes au clavier tout comme vous le feriez. bVk est le code ascii de la touche à envoyer au buffer clavier. bScan est utilisé pour définir l'action de certaines touches spéciales comme "Imprime écran". dwFlags est l'évènement que l'on souhaite génèrer comme KeyUp ou l'utilisation des touches étendues sur les claviers spéciaux. dwExtraInfo permet d'ajouter une valeur supplémentaire à la touche actionnée. Exemple d'utilisation : ' Exemple de Phil (Plancon@Onetelnet.fr) Option Explicit Private Declare Sub keybd_event Lib "user32" Alias "keybd_event" ( _ ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) ' bVk est le code ascii de la touche Private Const VK_LWIN = &H5B Private Const VK_APPS = &H5D ' Pour d'autres touches... ' a à z 65 à 90 ' Home 36 ' End 35 ' Flêche vers le haut 38 ' Flêche vers le bas 40 ' Flêche vers la gauche 37 ' Flêche vers la droite 39 ' Echap 27 ' Impr écran 44 (= vbKeySnapshot) ' Page haut 33 ' Page bas 34 ' Insert 45 ' F1 à F12 112 à 123 ' Barre d'espace 32 ' Ctrl 17 ' Alt 18 ' Maj 16 ' Verr Num 144 ' Arrêt défil 145 ' Tab 9 ' Shift 16 ' bscan (Lorsque l'on utilise la touche imprime écran) Const TheScreen = 1 ' Copie l'écran Const TheForm = 0 ' Copie la fenêtre active ' dwFlags (le drapeau) : Const KEYEVENTF_EXTENDEDKEY = &H1 ' Pour actionner les touches étendues Const KEYEVENTF_KEYUP = &H2 ' Relache la touche ' ---Cet exemple montre comment gérer Windows--- Sub GestionWindows(Index As Integer) ' ---déclarations des variables--- Dim VK_ACTION As Long ' ---Traite l'action--- Select Case Index Case 0 ' Ouverture de l'Exploreur VK_ACTION = &H45 ' La lettre e (ascii 69) Case 1 ' Rechercher des fichiers VK_ACTION = &H46 ' La lettre f (ascii 70) Case 2 ' Réduire toutes les fenêtres VK_ACTION = &H4D ' La lettre m (ascii 77) Case 3 ' Ouverture du menu exécuter VK_ACTION = &H52 ' La lettre r (ascii 82) Case 4 ' Actionner le menu démarrer VK_ACTION = &H5B ' Le bouton démarrer de windows sur le clavier (ascci 91) End Select ' ---Envoie de la séquence de touche--- Call keybd_event(VK_LWIN, 0, 0, 0) Call keybd_event(VK_ACTION, 0, 0, 0) Call keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0) End Sub Private Sub Command1_Click() ' ---Copie d'écran de la forme active (pour l'écran utiliser "TheScreen")--- keybd_event vbKeySnapshot, TheForm, 0&, 0& ' ---On laisse le temps à Windows de charger l'image en mémoire--- DoEvents ' ---Copie du presse-papier dans le contrôle image1--- Image1 = Clipboard.GetData(vbCFBitmap) End Sub Merci, a docvb.free.fr et a RVTT (vbfrance.com) |
j'ai lu dans votre premier msg que vous aviez utilise cette fonction, sans succés, mais je vous l'ai copier comme je l'ai eu. ces explication mon permis de piloter un automate.
a vous de voir salut |
Merci Luckymonaco de t'intéresser à moi et de me proposer cette solution, malheureusement, j'avais déja envisager keydb_event!
Néanmoins peut-être est-ce une erreur de synthaxe de ma part, étant un parfait débutant (1 semaine de porgrammation à tout casser), ce serait très probable. Voile le programme tel qu'il est avec les deux fonctions d'emmulation calvier: Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Declare Sub keybd_event Lib "user32" Alias "keybd_event" ( _ ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) Sub rappatriement() Dim I As Long I = Shell ("c:\WINNT\bureau\RS232\T.exe") ' ouverture du prog en Dos AppActivate I ' Prise de main sur le prog en DOS Sleep 5000 ' attente d'éxécution SendKeys ({F2}) ' emmule F2 sur le programme qui a la main, lance le prog Sleep 2000 SendKeys (A) ' nom du fichier texte généré par le prog en dos Sleep 500 SendKeys (~) ' validation du nom ' emmule entré Sleep 120000 SendKeys ({F3}) ' emmule F3 arrêt du prog Sleep 1000 SendKeys ({esc}) ' emmule echap, termine le prog DOS End Sub Sub Rappatriement2() Dim I As Long Const VK_démarre = 71 Const VK_arrete = 72 Const VK_termine = 1B Const VK_nom = 41 'Const VK_ok = 'ba la comme ça je me rappelle plus du code ascii correspondant à entree I = Shell ("c:\WINNT\bureau\RS232\T.exe") ' ouverture du prog en Dos AppActivate (I) ' Prise de main sur le prog en DOS Sleep 5000 ' attente d'éxécution Call keybd_event(Vk_démmarre, 0, 0, 0) ' emmule F2 sur le programme qui a la main, lance le prog Sleep 2000 Call keybd_event(Vk_nom, 0, 0, 0) ' nom du fichier texte généré par le prog en dos Sleep 500 Call keybd_event(Vk_ok, 0, 0, 0) ' validation du nom ' emmule entré Sleep 120000 Call keydb_event(Vk_arrete, 0, 0, 0) ' emmule F3 arrêt du prog Sleep 1000 Call keydb_event(Vk_termine, 0, 0, 0) ' emmule echap, termine le prog DOS end sub Donc voila, si vous voyez une grossière erreur, merci de me faire signe. Très cordialement Dimi |
Salut,
Pour passer des touches dans une fenêtre Dos moi j'ai utilisé le logiciel BillRedirect. C'est un logiciel qui se spécialise dans la redirection des données va voir ... www.BillProduction.com Bonne chance ... Steph |
Résultats pour VBA et le sendkeys au dos
Résultats pour VBA et le sendkeys au dos
Résultats pour VBA et le sendkeys au dos