ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

ARRET,VEILLE ET VEILLE PROLONGEE ORDINATEUR-WIN XP   



L'auteur

ybenam
Algérie Algérie
Membre Simple
# 0000002080
enregistré le 21/04/2008


Fiche personnelle


Note des membres
pas de note

Contributions > 05 - API et appels systèmes

ARRET,VEILLE ET VEILLE PROLONGEE ORDINATEUR-WIN XP
# 0000000620
ajouté le 16/06/2008 15:50:14 et modifié le 16/06/2008
consulté 8073 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

if parameters() #1
messagebox("Passer paramètre 1 arrêter,2 mettre enveille ,3 mise en veille prolongée",0+32,"ERREUR")
return
endi

do case
case numb=1
if messagebox("Voulez vous arrêter l'ordinateur ?",4+32)#6
return
endi

case numb=2
if messagebox("Voulez vous mettre en veille l'ordinateur ?",4+32)#6
return
endi

case numb=3
if messagebox("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)
**************************
do case
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 ??? ;-)

A+
Jean à Grenoble

le 17/06/2008, ybenam a écrit :
Bonjour Jean !

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 ...

Bonne journée ...


www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3