ARRET,VEILLE ET VEILLE PROLONGEE ORDINATEUR-WIN XP
# 0000000620
ajouté le 16/06/2008 15:50:14 et modifié le 16/06/2008
consulté 8276 fois
Niveau
initié
Version(s) Foxpro : VFP 6.0
Description
L'API Keybd_event permet l'envoi de séquences de touches à une fenêtre.Elle est similaire à sendkeys
de Wscript et à un moindre titre à Keyboard de VFP(qui ne s'interesse qu'à la fenêtre de commande
foxpro et ne s'exporte pas ailleurs,si je ne me trompe).
Le programme suivant réalise une des 3 opérations suivantes sous windows XP(car il utilise sa boite
de dialogue,mais on peut faire le même programme pour les autres boites de dialogue 'arrêt' pour les autres
versions):
-Mise en veille de l'ordinateur
-Mise en veille prolongée
-Arrêt(shutdown)
C'est exactement semblable à la procédure manuelle et ne craignez rien ! (il y en a qui sont réticents pour
leurcarte vidéo, je les rassure : quelques morceaux de codes n'ont jamais fait de mal à une mouche !).
Les séquences sont données à titre d'exemples ,on peut les généraliser pour toutes les applications.
Un seule mise en garde les codes de touche doivent être entrés avec grand soin ,il y a risque de blocage
donc redémarrage( c'est la face cachée des API).
les codes d'origine des touches clavier peuvent être téléchargés au lien suivant chez le grand sachem:
http://msdn.microsoft.com/en-us/library/ms927178.aspx
Exécution : do yshutdown with 2 &&3,1
paramètres :
1.arrêt ordinateur
2 mise en veille
3 mise en veille prolongée
Code source :
*yshutdown.prg *benameuryousfi1@gmail.com El bayadh le 16 juin 2008 *programme sous windows XPSP2-Envoyer des séquences Keybd_event *Execution : do yshutdown with 3 &1,2 *paramètres : 1 mise en veille, 2 mise en veille prolongée, 3 Arrêter l'ordinateur ************************************************************** lparameters numb
ifparameters() #1 messagebox("Passer paramètre 1 arrêter,2 mettre enveille ,3 mise en veille prolongée",0+32,"ERREUR") return
endi
docase case numb=1 ifmessagebox("Voulez vous arrêter l'ordinateur ?",4+32)#6 return
endi
case numb=2 ifmessagebox("Voulez vous mettre en veille l'ordinateur ?",4+32)#6 return
endi
case numb=3 ifmessagebox("Voulez vous mettre en veille prolongée l'ordinateur ?",4+32)#6 return
endi
endcase
clea DECLARE keybd_event IN user32;
SHORT bVk,;
SHORT bScan,; INTEGER dwFlags,; INTEGER dwExtraInfo
*Miminimiser toutes les fenetres: touche WINDOWS + M
#DEFINE KEYEVENTF_KEYUP 2
#DEFINE KEYVALUE_Lwin 0x5C &&touche windows
#DEFINE KEYVALUE_M 0X4D **touche pressée
= keybd_event(KEYVALUE_Lwin, 0, 0, 0)
= keybd_event(KEYVALUE_M, 0, 0, 0) DOEVENTS ** touche relâchée
= keybd_event(KEYVALUE_Lwin, 0, KEYEVENTF_KEYUP, 0)
= keybd_event(KEYVALUE_M, 0, KEYEVENTF_KEYUP, 0) DOEVENTS inkey(0.5) ************************** &&ALT+F4 pour déclencher fermeture de la fenêtre desktop (on peut fermer aiisi vfp avec ALT+F4)
#DEFINE KEYVALUE_ALT 0x12
#DEFINE KEYVALUE_F4 0x73
= keybd_event(KEYVALUE_ALT, 0, 0, 0)
= keybd_event(KEYVALUE_F4, 0, 0, 0) DOEVENTS
= keybd_event(KEYVALUE_ALT, 0, KEYEVENTF_KEYUP, 0)
= keybd_event(KEYVALUE_F4, 0, KEYEVENTF_KEYUP, 0) DOEVENTS inkey(0.6) ************************** docase case numb=1 &&Option T arrêter l'ordinateur (absolument identique à la procédure manuelle)
#DEFINE KEYVALUE_T 0x54 &&Taper touche T sous winXP p/arrêter à l'apparition boite dialogue
= keybd_event(KEYVALUE_T, 0, 0, 0)
= keybd_event(KEYVALUE_T, 0, KEYEVENTF_KEYUP, 0) doevents inkey(0.5) ************************** case numb=2 &&Option M mettre en veille (absolument identique à la procédure manuelle)
#DEFINE KEYVALUE_M 0x4D &&Taper touche M pour mettre en veille
= keybd_event(KEYVALUE_M, 0, 0, 0)
= keybd_event(KEYVALUE_M, 0, KEYEVENTF_KEYUP, 0) doevents inkey(0.5) ******************* case numb=3 &&Option mettre en veille prolongée si elle est configurée sur winXP (idem)-(Shift+return ou V+return)
#DEFINE KEYVALUE_V 0x56
= keybd_event(KEYVALUE_V, 0, 0, 0)
= keybd_event(KEYVALUE_V, 0, KEYEVENTF_KEYUP, 0) doevents inkey(0.5) ************************** endcase
#DEFINE KEYVALUE_enter 0x0D &&touche return
= keybd_event(KEYVALUE_enter, 0, 0, 0)
= keybd_event(KEYVALUE_enter, 0, KEYEVENTF_KEYUP, 0) doevents
return
Commentaires
le 17/06/2008, Jean à Grenoble a écrit : Je ne sais pas comment tu fais, mais je n'arrive pas à suivre et à tester toutes tes contributions. Tu vas trop vite.
Deux remarques :
1) il faut éviter parameters() et remplacer cette fonction par PCOUNT() : elle donne le même résultat mais ne remet pas le compteur à 0 (si tu relances parameters(), le retour sera nul puisque le nombre de paramètre passé à parameters() est nul).
2) c'est bien beau mais elle est où la séquence de touches pour rallumer le PC ??? ;-)
je crois comme le stipule mon titre, je vais me mettre en veille prolongée! Merci pour la remarque..j'avais en tête pcount() mais au moment précis voulu je ne m'en suis pas souvenu (l'âge commence à nous amputer des neurones).En tous les cas ,ici,parameters() est appelée une seule fois.
Pour la séquence qui rallume le PC,Microsoft n'a jamais pensé à cela.Les codes humains ont téléguidé un robot sur Vénus, mais pas pour rallumer un terrien PC ! Tant que l'homme est la,on n'a pas besoin des robots ! (je prends ça pour une plaisanterie bien sûr!)
le 18/06/2008, Francis Faure a écrit : Jean Pour démarrer un pc a distance, voir : http://www.atoutfox.org/articles.asp?ACTION=FCONSULTER&ID=0000000200 Cordialement
le 19/06/2008, Jean à Grenoble a écrit : Tu es tombé à un moment où l'activité du site d'Atoutfox et du groupe de discussion est plutôt faible par rapport à d'autres moments bien plus actifs. Moi-même j'ai mis en 'stand by' un grand nombre d'activités ne serait-ce que tester tes contributions ... mais aussi la visite des gares et des chemins de fer ... Pour l'instant, je fais plus de la 'communication' que du travail efficace. Il y a un mouvement pour ouvrir Atoutfox vers l'Afrique; la preuve en est le 'sondage' pour la création d'une réunion "là-bas"; Cette ouverture est menée par Aumeric qui travaille beaucoup en Mauritanie (et où j'ai passé 8 jours sur le chemin de fer de la SNIM). Mais à part l'annonce, je n'ai pas de nouvelles ...
Je ne sais pas comment tu fais, mais je n'arrive pas à suivre et à tester toutes tes contributions. Tu vas trop vite.
Deux remarques :
1) il faut éviter parameters() et remplacer cette fonction par PCOUNT() : elle donne le même résultat mais ne remet pas le compteur à 0 (si tu relances parameters(), le retour sera nul puisque le nombre de paramètre passé à parameters() est nul).
2) c'est bien beau mais elle est où la séquence de touches pour rallumer le PC ??? ;-)
A+
Jean à Grenoble