[ programmation systeme] => lisez donc

=> lisez donc [ programmation systeme] - Programmation

Marsh Posté le 27-08-2001 à 16:03:46    

Je cherche à faire un prog du style des programmes systemes.  
Je m'explique avec un exemple : Sous win, qd on clique droit une fenetre apparait. Un p'tit ctr_alt_del va faire de même qu'on soit sous photoshop en train de faire de jolie graph, ou sous un autre prog. C'est qu'en faite le systeme fait une boucle infinie pour savoir si l'user à fait un ctr_alt_del ou un clique droit. Bref, comment creer un programme de ce genre. Qui va ecouter gentiment que l'user fasse si ou ca bien que son programme n'ai pas la main.


---------------
From Pymousses.
Reply

Marsh Posté le 27-08-2001 à 16:03:46   

Reply

Marsh Posté le 27-08-2001 à 16:22:06    

pymousses a écrit a écrit :

Je cherche à faire un prog du style des programmes systemes.  
Je m'explique avec un exemple : Sous win, qd on clique droit une fenetre apparait. Un p'tit ctr_alt_del va faire de même qu'on soit sous photoshop en train de faire de jolie graph, ou sous un autre prog. C'est qu'en faite le systeme fait une boucle infinie pour savoir si l'user à fait un ctr_alt_del ou un clique droit. Bref, comment creer un programme de ce genre. Qui va ecouter gentiment que l'user fasse si ou ca bien que son programme n'ai pas la main.  




 
ça m'étonnerait :sarcastic:

Reply

Marsh Posté le 27-08-2001 à 16:26:19    

Le menu du click droit, c'est l'application sur laquelle on clique qui le gère/génère. Si c'est le bureau, c'est Windows qui sait quoi faire, si c'est sur ma feuille, c'est moi qui sait ce que je veux qu'on affiche (par soft). :)  
 
 :??: C'est pour détourner les messages interceptés par Windows avant lui pour prendre la main dessus ?

Reply

Marsh Posté le 27-08-2001 à 16:52:51    

C_Po_Ma_Faute a écrit a écrit :

 
 
ça m'étonnerait :sarcastic:  




 
explique toa.


---------------
From Pymousses.
Reply

Marsh Posté le 27-08-2001 à 16:57:24    

CARBON_14 a écrit a écrit :

Le menu du click droit, c'est l'application sur laquelle on clique qui le gère/génère. Si c'est le bureau, c'est Windows qui sait quoi faire, si c'est sur ma feuille, c'est moi qui sait ce que je veux qu'on affiche (par soft). :)  
 
 :??: C'est pour détourner les messages interceptés par Windows avant lui pour prendre la main dessus ?  




 
Un exemple concret (encore un) :
Style, pour ceux ki connaisse softice, le prog est chargé en memoire au lancement du systeme. Et un controle-d lance le debugger. Je cherche à faire un prog du style qui va effectuer une action suivant une autre à n'importe quel endroit.
 
par exemple un contrôle-d à un moment donné va faire appraître une boite de message "C cool CA marche".
 
Putain!!!!!!! Ouf.


---------------
From Pymousses.
Reply

Marsh Posté le 27-08-2001 à 18:04:41    

pymousses a écrit a écrit :

 
 
explique toa.  




 
et bien tu trouves pas que pour réagir à des évênements utilisateur, une boucle infinie vériant à chaque fois si une touche a été enfoncée ce serait lourd ?
le clavier (comme tous les périphériques) génère une interruption matérielle lorsqu'il est activé, cette interruption est ensuite traitée par le système... je ne m'étends pas sur le sujet, tu trouveras facilement des tas de sites qui expliquent ça mieux que moi ;)
 
 
Il faut simplement que ton appli (qui tournera en tache de fond) intercepte le message window correspondant à l'évênement que tu souhaite traiter :D

Reply

Marsh Posté le 27-08-2001 à 20:35:48    

euh, oui, c'est à peu près ca, sauf que dans le cas présent c'est pas une iterruption matériel, ca serait beaucoup trop lourd pour les périph si chaque action de ce type était traité comme interruption matériel. Ici, c'est une interruption soft.
Si tu veux plus de doc, cherche dans les moteur de recherche a programmation évennementielle.

Reply

Marsh Posté le 27-08-2001 à 22:11:32    

Je pense qu'en effet une boucle infinie c'est lourd!!!
Mais intercepter une intéruption matérielle sous Win32.... c'est pas le plus simple non plus...
Le coup du message windows, c pas possible non plus car il sera envoyé a l'appplication qui a le focus; Non, le mieux ce serait de faire la boucle infinie, de vérifier la touche avec GetAsyncKeyState; Mais définir une priorité minimale a l'application grace a SetPriorityClass et SetThreadPriority
Et si ca ne suffit pas completer avec des Sleep qui pendant l'attente attribuent toute la priorité aux autres processus..

Reply

Marsh Posté le 27-08-2001 à 22:37:52    

je persiste à dire que le clavier génère une interruption matérielle (IRQ1) à chaque appui de touche :sol:  
 
pour les racourcis clavier (comme ceux de Windows), ce sont des interruptions soft, si on peut employer ce terme :/ mouais

Reply

Marsh Posté le 27-08-2001 à 22:47:29    

C_Po_Ma_Faute a écrit a écrit :

je persiste à dire que le clavier génère une interruption matérielle (IRQ1) à chaque appui de touche :sol:  
 
pour les racourcis clavier (comme ceux de Windows), ce sont des interruptions soft, si on peut employer ce terme :/ mouais  




 
Oui, moi on m'a appris a diférencier, les interruptions comme écriture sur un périph ou libération d'une ressource et les interruptions "classiques" comme le clavier et la souris qui ne sont pas traitées de la même manière.

Reply

Marsh Posté le 27-08-2001 à 22:47:29   

Reply

Marsh Posté le 28-08-2001 à 02:14:58    

:bounce: Comment faire pour ke le programme se lance automatiquement en tâche de fond. Existe t'il une api?
Mais sous windows je précise. Donc pas de & !!!

Reply

Marsh Posté le 28-08-2001 à 02:46:02    

pour le clavier, y'a bcp plus simple ca s'appelle les HOOK.
Regarde l'aide de SetWindowsHookEx avec comme idHook WH_KEYBOARD.
Ta fonction qui va intercepter les frappes au clavier, faut qu'elle soit dans une dll, pour intercepter toutes les frappes (sauf je crois le ctrl+alt+del qui est gere directement par le driver).
 
En lisant attentivement la msdn, on s'en sort tres vite et tu est prevenu de chaque frappe au clavier, les mots de passe, n'y resistent pas trop ;) .

Reply

Marsh Posté le 28-08-2001 à 02:58:31    

aqwsezsxdr a écrit a écrit :

pour le clavier, y'a bcp plus simple ca s'appelle les HOOK.
Regarde l'aide de SetWindowsHookEx avec comme idHook WH_KEYBOARD.
Ta fonction qui va intercepter les frappes au clavier, faut qu'elle soit dans une dll, pour intercepter toutes les frappes (sauf je crois le ctrl+alt+del qui est gere directement par le driver).
 
En lisant attentivement la msdn, on s'en sort tres vite et tu est prevenu de chaque frappe au clavier, les mots de passe, n'y resistent pas trop ;) .  




 
Peut tu m'expliquer le mecanisme de la dll pour eclaircir le fait que la fonction doit se trouver dans une dll. Merci.


---------------
From Pymousses.
Reply

Marsh Posté le 28-08-2001 à 03:12:14    

bah, tu cree une dll tout ce qu'il y a de plus banal avec une fonction qui a ce protoype
 
LRESULT CALLBACK KeyboardProc(
  int code,       // hook code
  WPARAM wParam,  // virtual-key code
  LPARAM lParam   // keystroke-message information
);
 
tu peux changer le nom KeyboardProc si tu veux.  
Ensuite ds ton prog qui installe le hook, tu appelle un loadlibrary qui te retourne un handle. Ce handle, tu le passe au SetWindowsHookEx en 3eme param et il te permet aussi de recuperer un ptr sur ta fct : GetProcAddress, ptr que tu fournit aussi au SetWindowsHookEx en 2eme param . Et voila le travail d'une simplicite biblique.
 
Si tu veux seulement ecouter les events clavier pour ton appli, t'as pas besoin de dll.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed