APPEL D'UNE PROCÉDURE D'UN PROGRAMME RÉSIDENT EN MÉMOIRE SANS AUCUN HOOK

Signaler
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Messages postés
254
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2007
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/17062-appel-d-une-procedure-d-un-programme-resident-en-memoire-sans-aucun-hook

Messages postés
254
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
9 avril 2007
1
Mais si je me suis reconnu Crazynoper ....
Quand est ce kon va se faires kke affiches ???
Allé +++++++
Messages postés
13
Date d'inscription
vendredi 28 février 2003
Statut
Membre
Dernière intervention
7 septembre 2005

le but était quand même de faire ma boucle, donc un truc du style while(true) à la base, je sais pas si je m'était bien fait comprendre.

c'est pour sa que je précisai qu'avant je codé sur du pascal,
utilisant tt le temps repeat / until

la condition doit être faux pour continuer une autre itération contrairement au C.

et puis oui, y a le ";" qui serait remplacé par la routine de traitement des messages
Messages postés
338
Date d'inscription
jeudi 22 août 2002
Statut
Membre
Dernière intervention
14 juin 2005

on est d'accord :)
jcommencais a prendre peur :)
Messages postés
57
Date d'inscription
samedi 14 décembre 2002
Statut
Membre
Dernière intervention
2 mai 2005

mouais ok :) j'avais pas lu le false oups
Messages postés
338
Date d'inscription
jeudi 22 août 2002
Statut
Membre
Dernière intervention
14 juin 2005

mmh ... vs etes au courant sinon que
while(true);
est une boucle infinie, et que while(false);
est pas une boucle du tout ?
Messages postés
57
Date d'inscription
samedi 14 décembre 2002
Statut
Membre
Dernière intervention
2 mai 2005

Hum je comprends pas pourquoi un compilo devrait enlever l'instructions, les codeurs peuvent mettre des instructions comme ca si ils le veulent, mm si ca sert à rien, ca bloque l'execution du programme (en prenant 100% des ressources) mais dans un contexte multithread ya aucune raison de l'enlever (un codeur ne sachant pas joindre les threads par exemple va faire attendre son prog comme ca (avec un sleep, je sais c crade) )
++
Messages postés
338
Date d'inscription
jeudi 22 août 2002
Statut
Membre
Dernière intervention
14 juin 2005

while(false) ;
=> ca sert a rien ^^ un bon compilo va l'enlever, un mauvais va faire un test intutile
Messages postés
13
Date d'inscription
vendredi 28 février 2003
Statut
Membre
Dernière intervention
7 septembre 2005

> while(false) ;
>
> ah bin la c clair tu rsique pas d'avoir une boucle infinie ^^

lol, oui la preuve que j'ai bien fait de rechoper cette boucle qqpart...
avant le C, j'ai appris le pascal, donc habitué au traditionnel (repeat/until).
je débute, mais bon, je m'en sort mieu maintenant qu'au moment ou j'avais poster ce code.
Messages postés
338
Date d'inscription
jeudi 22 août 2002
Statut
Membre
Dernière intervention
14 juin 2005

while(false) ;

ah bin la c clair tu rsique pas d'avoir une boucle infinie ^^
Messages postés
13
Date d'inscription
vendredi 28 février 2003
Statut
Membre
Dernière intervention
7 septembre 2005

Heu... Hellaynnea à la base non, mais je te passe volontier le bonjour à toi aussi. En fait c'était pour un copain qui en LAN avec moi à l'université (donc un gars que je cotois tous les jours).
Voili Voilou (et pis au passage, il c'est pas reconnu, j'ai du lui dire).
Messages postés
57
Date d'inscription
samedi 14 décembre 2002
Statut
Membre
Dernière intervention
2 mai 2005

> bonjour à Yohan du réseau (il se reconnaitra)

C moi ca ? :)
Messages postés
540
Date d'inscription
dimanche 29 décembre 2002
Statut
Modérateur
Dernière intervention
13 mai 2011

Le développement sous Windows en C est une quête longue et périlleuse...mais ça pourra peut être te mener à un job (on m'a engagé parceque j'étais capable de faire des activeX en C donc pas besoin de payer la licence Kro pour ceux en VB).

Malgré tout si tu es très motivé, sache que les newsgroup (sur google par exemple pour faire de la recherche) seront tes meilleures amies ;o)

Stef++
Messages postés
13
Date d'inscription
vendredi 28 février 2003
Statut
Membre
Dernière intervention
7 septembre 2005

merci poppyto pour ton aide, je vais méditer tout ça
Surtout si je me met à developper sous windows, ton aide
me sera préciseuse (je reprendrais cette routine de base)
quand aux macros, elles m'ont l'air interressantes à utiliser :-p
chao
Messages postés
540
Date d'inscription
dimanche 29 décembre 2002
Statut
Modérateur
Dernière intervention
13 mai 2011

salut crazynoper :o)

> msg = (LPMSG)malloc(sizeof(tagMSG));

je trouve que ce ce malloc n'a pas tellement d'intérêt ....Tout le monde utilise une variable locale (de toute façon, toutes les variables locales de WinMain ne seront supprimées qu'à la fermeture du programme...) et dans ton cas, tu ne retourne même pas le membre wParam de la structure MSG....
D'ailleurs si tu devais le faire, tu devrais passer par une variable locale pour récupérer le wParam de MSG et la retourner car l'allocation avec malloc se ballade dans la nature.

> >WPARAM Retour = msg->wParam;
> >free(msg);
> > return Retour;

Voilà, je pense que c'est un truc à améliorer et puis aussi un autre truc :

Au lieu de faire ça :

> unsigned short sKeyAol 0x80, sKeyProg 0x80;
> // Touche controle :
> sKeyProg = sKeyAol &= GetKeyState(VK_CONTROL);

Tu devrais créer une macro comme ceci:

#define KEYDOWN(vk) ((GetKeyState(vk) & 0x80) ? 1 : 0 )

et après ça donnerait :

if(KEYDOWN(VK_CONTROL))
.....

C'est tout de même plus lisible :o)

Allez je te laisse en espérant t'avoir filé de bons tuyaux ;o)
Stef++
Messages postés
13
Date d'inscription
vendredi 28 février 2003
Statut
Membre
Dernière intervention
7 septembre 2005

J'ai rajouté des commentaires dans mon code, pour qu'on voit mieu à quoi sert chaque inscruction.

> BruNews, oui une partie vien de la msdn directement :

while (GetMessage(msg, (HWND) NULL, 0, 0)) {
if (!TranslateMDISysAccel(hwndMDIClient, msg) &&
!TranslateAccelerator(hwndFrame, hAccel, msg)) {
TranslateMessage(msg);
DispatchMessage(msg);
}

En fait, elle fait tourner le programme en boucle infiniment, pcq je voyais mal un truc du genre

while(false) ;

et je ne voulais pas non plus utiliser la mfc (je débute, donc je preférerais m'habituer à faire sans).
Le reste du code c'est de moi.

Il s'agit de la boucle principal du programme, WinMain n'ira pas directement à return 0.

Et puis sinon la source est testée chez moi et marche impecable sous VC++ 6, alors normalement pas de pb.

J'espère que mes commentaires dans la source t'aiderons à mieu comprendre.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Tu as fait un copier coller, il manque des morceaux. WinMain va aller tout droit a return 0 sans rien faire. Un prog C n'a pas a appeler ExitProcess(0); il y a un runtime pour cela.
while(GetMessage(msg.... SERT A QUOI ?
On comprend vite pourquoi il n'y a pas de zip.