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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 13 oct. 2003 à 18:54
cs_Spawnrider Messages postés 254 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 9 avril 2007 - 1 déc. 2004 à 14:08
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

cs_Spawnrider Messages postés 254 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 9 avril 2007 1
1 déc. 2004 à 14:08
Mais si je me suis reconnu Crazynoper ....
Quand est ce kon va se faires kke affiches ???
Allé +++++++
crazynoper Messages postés 13 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 7 septembre 2005
28 févr. 2004 à 01:48
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
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
28 févr. 2004 à 00:28
on est d'accord :)
jcommencais a prendre peur :)
Hellaynnea Messages postés 57 Date d'inscription samedi 14 décembre 2002 Statut Membre Dernière intervention 2 mai 2005
28 févr. 2004 à 00:20
mouais ok :) j'avais pas lu le false oups
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
28 févr. 2004 à 00:18
mmh ... vs etes au courant sinon que
while(true);
est une boucle infinie, et que while(false);
est pas une boucle du tout ?
Hellaynnea Messages postés 57 Date d'inscription samedi 14 décembre 2002 Statut Membre Dernière intervention 2 mai 2005
28 févr. 2004 à 00:05
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) )
++
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
27 févr. 2004 à 23:53
while(false) ;
=> ca sert a rien ^^ un bon compilo va l'enlever, un mauvais va faire un test intutile
crazynoper Messages postés 13 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 7 septembre 2005
27 févr. 2004 à 18:40
> 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.
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
20 févr. 2004 à 01:55
while(false) ;

ah bin la c clair tu rsique pas d'avoir une boucle infinie ^^
crazynoper Messages postés 13 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 7 septembre 2005
20 oct. 2003 à 21:36
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).
Hellaynnea Messages postés 57 Date d'inscription samedi 14 décembre 2002 Statut Membre Dernière intervention 2 mai 2005
20 oct. 2003 à 14:29
> bonjour à Yohan du réseau (il se reconnaitra)

C moi ca ? :)
cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 mai 2011
15 oct. 2003 à 23:54
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++
crazynoper Messages postés 13 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 7 septembre 2005
15 oct. 2003 à 23:37
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
cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 mai 2011
14 oct. 2003 à 07:42
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++
crazynoper Messages postés 13 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 7 septembre 2005
13 oct. 2003 à 19:54
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.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 oct. 2003 à 18:54
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.