LandTech
Messages postés73Date d'inscriptiondimanche 14 octobre 2007StatutMembreDernière intervention28 février 2011 12 nov. 2008 à 14:53
Salut,
Super source. 9
>daetips : ntdll.dll n'est présente que sous XP, donc ça ne marche pas pour tous les OS Windows.
Voilà.
daetips
Messages postés142Date d'inscriptionjeudi 10 juillet 2003StatutMembreDernière intervention10 novembre 2007 11 mars 2008 à 01:31
Je sais que ce code est un peu vieux mais bon
pour geler un processus:
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function NtSuspendProcess Lib "ntdll.dll" (ByVal hProc As Long) As Long
Private Declare Function NtResumeProcess Lib "ntdll.dll" (ByVal hProc As Long) As Long
Private Const PROCESS_SUSPEND_RESUME As Long = &H800
Public Function SuspendProcess(ByVal PID As Long) As Long
Dim lProcess As Long
lProcess = OpenProcess(PROCESS_SUSPEND_RESUME, 0&, PID)
SuspendProcess = NtSuspendProcess(lProcess)
CloseHandle lProcess
End Function
Public Function ResumeProcess(ByVal PID As Long) As Long
Dim lProcess As Long
lProcess = OpenProcess(PROCESS_SUSPEND_RESUME, 0&, PID)
ResumeProcess = NtResumeProcess(lProcess)
CloseHandle lProcess
End Function
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 10 juil. 2006 à 22:28
Ah oui (désolé pour le multi post:()
J'ai pas encore testé la fonction qui liste les threads, dites moi si vous trouvez des fautes ou bugs.
Merci
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 10 juil. 2006 à 22:25
Wouhou !!!
J'ai enfin.... trouvé l'api pour récupérer la liste de tous les threads du système, et par la meme occasion la liste des threads d'un processus.
Donc voilà, j'ai mis le tout sous forme de fonction et j'ai balancé ça en haut dans la partie code.
Par contre j'ai pas mis à jour le zip, j'ai une crise de flemmagite aigue la, mais si y'en a qui en ont besoin demandez moi je le ferais.
(Pour ceux qui ont pas compris maintenant on peut geler les processus multi-threads;)
Bonne prog !
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 9 juil. 2006 à 17:45
SkyRocko > je répond un peu tard désolé, mais au cas ou ça puisse servir quelqu'un. A mon avis quand on gèle le process, tous les évenements sont mis dans une file, et quand on dégèle le process reprend les évenements enregistrés. Comme ça je ne saurais pas trop comment faire pour empecher ça, mais peut etre en faisant du subclassing, comme ça on intercepte tous les evenements qui surviennent dans la fenetre et on les supprime.
Enfin facile à dire quoi ^^, perso je ne m'y connais pas trop encore en subclassing, mais ça peut rester un bon projet, avec en + la gestion des processus multi-thread...
Ahhhh il reste encore tellement à faire...
SkyRocKo
Messages postés174Date d'inscriptionsamedi 10 mai 2003StatutMembreDernière intervention18 février 2006 24 déc. 2005 à 20:31
Superbe source, intéressant !
Par contre, j'ai vu que quand on gèle WordPad et que l'on clique sur "Ouvrir", rien ne se passe mais le CommonDialog "Ouvrir" apparaît dès que l'on dégèle.
Y-a-t'il moyen de pouvoir geler complètement (les évênements n'apparaissent pas quand l'on dégèle) ?
Bonne continuation !
SkyRocKo
cs_azerty25
Messages postés1114Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention 6 mai 2007 7 mai 2005 à 21:26
mdr
acrcorp
Messages postés96Date d'inscriptiondimanche 16 février 2003StatutMembreDernière intervention23 septembre 2007 5 avril 2005 à 22:31
hi hi :)
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 5 avril 2005 à 22:06
mdrrr jme sens complétement con la...
Faudrait que j'arrete d'etre serieu des fois lol
bien vu kan meme ;)
acrcorp
Messages postés96Date d'inscriptiondimanche 16 février 2003StatutMembreDernière intervention23 septembre 2007 4 avril 2005 à 00:55
le thread belle mère est une sorte de référence pendante qui découle du thread femme. Ce dernier a en effet la facheuse abitude de solicité des ressources pour passer des boucles de temps dans dans le thread Belle mère. Il en résulte une énorme perte de cycle...
C'est très affreux le thread belle mère :)
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 3 avril 2005 à 19:53
Cool chu content pour toi ;)...
Détaille... Ou est ce que ça a planté?
C'est quoi "Belle mère" ?
Je pense que c'est du au fait que certains processus ont des privilèges, donc on ne peut ptet pas agir dessus...
Dis moi quel processus c'est, ou quel programme... Et comment tu a procédé.
Merci a+
acrcorp
Messages postés96Date d'inscriptiondimanche 16 février 2003StatutMembreDernière intervention23 septembre 2007 2 avril 2005 à 14:00
J'ai essayé de suspendre le thread "Belle mère".
C fut un lamentable échec...
Dommage, c'était prometteur...
cs_azerty25
Messages postés1114Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention 6 mai 2007 24 mars 2005 à 21:37
Je regardé avec le alt ctrl suppr, il suffit dans le menu affichage de sélectionner les colonnes et puis afficher les threads. Pour Winsock, je suis en train de regarder, j'ai déja vaguement entendu parlé qu'il fallait conserver la routine "threadée" sinon, elle était bien sure détruite, l'astuce consisterai à faire une boucle. Mais je me demandai si, rien qu'a travers le fait de créé plusieurs fois le controle, plusieurs threads n'étaient pas créés automatiquement, car au démarrage, j'en ai 4, et en pleine réception des mails avec 2 serveurs, donc 3 controles winsock (le 9999 que je ne touche jamais, le 0 et 1), j'ai 3 treads en plus....
Voila, merci pour ta réponse en tout cas ;-)
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 24 mars 2005 à 19:35
Euh perso je ne m'y connais pas assez en thread et je cherche des sources en vain...
Tu dis que tu a 4 threads déjà quand tu lance ton prog, mais comment tu vois ça ? Ctrl Alt Suppr ?
ou alors une source ?? parce que c'est ce que je cherche : visualiser, récupérer ... les threads d'un processus.
Parce qu'ici je récupère le thread lié à la fenetre et non au processus... enfin bon si qqn a une source ça ferait très plaisir.
Sinon Azerty, merki pour ton commentaire, pour faire un programme multithread c'est assez simple j'ai trouvé, il y a pas mal d'exemple sur vbfrance. Si j'avais bien compris les sources en fait le multithread c'est juste tu demande à l'api adequat d'executer une fonction, sub... en parallèleà ton prog, donc je pense que pour tes winsock c'est possible si tu arrive a faire en sorte que tout ton code qui gère ton winsock s'execute dans une seule fonction, enfin il faudrait qu'il y ait tjrs une fonction d'active pour conserver ton thread "vivant", car dès que la fonction est finie normalement le thread se supprime...
Est ce que tu me suis lol ?? Regarde des exemples tu verras je pense que tu comprendras ce que je veux dire.
A+
cs_azerty25
Messages postés1114Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention 6 mai 2007 23 mars 2005 à 23:01
C'est une super source ! J'ai testé sous Word, qui a 2 threads, et ça à fonctionné, comme wordpad, lui aussi a plusieurs threads (2).
Sinon, vu qu'il y a des connaisseurs en threads, je vais en profiter pour demander une ptite chose ...^^
Je fait un client mail en ce moment, et quand le programme démarre, j'ai déja 4 threads, alors qu'il n'est pas volontairement multithreads. Ca viendrai des OCX externes que j'utilise dedans ? Et celon vous, si j'ai un control Winsock sur la form, d'index 9999, et que j'en charge 2 autres dynamiquement (le 0 et le 1), peuvent-il travailler undépendament l'un de l'autre avec 2 serveurs diffiférents "simultanément" (ceux d'index 0 et 1)? parce que, je sais pas si c'est une erreur de moi ou quoi, mais quand un recoi/envoi des données, aléatoirement, il s'arrete et laisse place à l'autre, il y a une sorte de parasitage.
Merci à ceux qui me répondront s'ils y en a ;-)
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 24 févr. 2005 à 11:26
C'est exactement une question que je me posais PostIt,
à la limite je testerai sous Word, mais le mieux pour geler un processus serait alors de geler tous les threads qui ont comme parent le processus visé non ?
Enfin au moins avec ça on sait geler un processus, depuis le temps que je cherchais c'était tout con, mais personne ne l'avais jamais mis sur vbfrance, c'est rare...
Et merci pour vos commentaires ;)
cs_PostIt
Messages postés1Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention24 février 2005 24 févr. 2005 à 09:53
Ptit question à la con...
Pour une application multi-thread (comme Word par exemple), comment se comporte ton programme ?
D'après les API utilisés, il semblerait que tu ne gèle que le thread de la fenêtre courante de l'application visé. Hors si d'autre thread on besoin d'interagir avec le thread de la fenêtre courante, que se passe-t-il ?
A creuser...
cs_legion91
Messages postés216Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention15 décembre 2010 24 févr. 2005 à 00:40
très interressant.
odan71
Messages postés140Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention11 décembre 2007 23 févr. 2005 à 08:26
Même si c'est "simple" à mettre en oeuvre, les histoires de threads c'est pas du niveau 1...
en tout cas merci, ça peut etre utile.
12 nov. 2008 à 14:53
Super source. 9
>daetips : ntdll.dll n'est présente que sous XP, donc ça ne marche pas pour tous les OS Windows.
Voilà.
11 mars 2008 à 01:31
pour geler un processus:
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function NtSuspendProcess Lib "ntdll.dll" (ByVal hProc As Long) As Long
Private Declare Function NtResumeProcess Lib "ntdll.dll" (ByVal hProc As Long) As Long
Private Const PROCESS_SUSPEND_RESUME As Long = &H800
Public Function SuspendProcess(ByVal PID As Long) As Long
Dim lProcess As Long
lProcess = OpenProcess(PROCESS_SUSPEND_RESUME, 0&, PID)
SuspendProcess = NtSuspendProcess(lProcess)
CloseHandle lProcess
End Function
Public Function ResumeProcess(ByVal PID As Long) As Long
Dim lProcess As Long
lProcess = OpenProcess(PROCESS_SUSPEND_RESUME, 0&, PID)
ResumeProcess = NtResumeProcess(lProcess)
CloseHandle lProcess
End Function
10 juil. 2006 à 22:28
J'ai pas encore testé la fonction qui liste les threads, dites moi si vous trouvez des fautes ou bugs.
Merci
10 juil. 2006 à 22:25
J'ai enfin.... trouvé l'api pour récupérer la liste de tous les threads du système, et par la meme occasion la liste des threads d'un processus.
Donc voilà, j'ai mis le tout sous forme de fonction et j'ai balancé ça en haut dans la partie code.
Par contre j'ai pas mis à jour le zip, j'ai une crise de flemmagite aigue la, mais si y'en a qui en ont besoin demandez moi je le ferais.
(Pour ceux qui ont pas compris maintenant on peut geler les processus multi-threads;)
Bonne prog !
9 juil. 2006 à 17:45
Enfin facile à dire quoi ^^, perso je ne m'y connais pas trop encore en subclassing, mais ça peut rester un bon projet, avec en + la gestion des processus multi-thread...
Ahhhh il reste encore tellement à faire...
24 déc. 2005 à 20:31
Par contre, j'ai vu que quand on gèle WordPad et que l'on clique sur "Ouvrir", rien ne se passe mais le CommonDialog "Ouvrir" apparaît dès que l'on dégèle.
Y-a-t'il moyen de pouvoir geler complètement (les évênements n'apparaissent pas quand l'on dégèle) ?
Bonne continuation !
SkyRocKo
7 mai 2005 à 21:26
5 avril 2005 à 22:31
5 avril 2005 à 22:06
Faudrait que j'arrete d'etre serieu des fois lol
bien vu kan meme ;)
4 avril 2005 à 00:55
C'est très affreux le thread belle mère :)
3 avril 2005 à 19:53
Détaille... Ou est ce que ça a planté?
C'est quoi "Belle mère" ?
Je pense que c'est du au fait que certains processus ont des privilèges, donc on ne peut ptet pas agir dessus...
Dis moi quel processus c'est, ou quel programme... Et comment tu a procédé.
Merci a+
2 avril 2005 à 14:00
C fut un lamentable échec...
Dommage, c'était prometteur...
24 mars 2005 à 21:37
Voila, merci pour ta réponse en tout cas ;-)
24 mars 2005 à 19:35
Tu dis que tu a 4 threads déjà quand tu lance ton prog, mais comment tu vois ça ? Ctrl Alt Suppr ?
ou alors une source ?? parce que c'est ce que je cherche : visualiser, récupérer ... les threads d'un processus.
Parce qu'ici je récupère le thread lié à la fenetre et non au processus... enfin bon si qqn a une source ça ferait très plaisir.
Sinon Azerty, merki pour ton commentaire, pour faire un programme multithread c'est assez simple j'ai trouvé, il y a pas mal d'exemple sur vbfrance. Si j'avais bien compris les sources en fait le multithread c'est juste tu demande à l'api adequat d'executer une fonction, sub... en parallèleà ton prog, donc je pense que pour tes winsock c'est possible si tu arrive a faire en sorte que tout ton code qui gère ton winsock s'execute dans une seule fonction, enfin il faudrait qu'il y ait tjrs une fonction d'active pour conserver ton thread "vivant", car dès que la fonction est finie normalement le thread se supprime...
Est ce que tu me suis lol ?? Regarde des exemples tu verras je pense que tu comprendras ce que je veux dire.
A+
23 mars 2005 à 23:01
Sinon, vu qu'il y a des connaisseurs en threads, je vais en profiter pour demander une ptite chose ...^^
Je fait un client mail en ce moment, et quand le programme démarre, j'ai déja 4 threads, alors qu'il n'est pas volontairement multithreads. Ca viendrai des OCX externes que j'utilise dedans ? Et celon vous, si j'ai un control Winsock sur la form, d'index 9999, et que j'en charge 2 autres dynamiquement (le 0 et le 1), peuvent-il travailler undépendament l'un de l'autre avec 2 serveurs diffiférents "simultanément" (ceux d'index 0 et 1)? parce que, je sais pas si c'est une erreur de moi ou quoi, mais quand un recoi/envoi des données, aléatoirement, il s'arrete et laisse place à l'autre, il y a une sorte de parasitage.
Merci à ceux qui me répondront s'ils y en a ;-)
24 févr. 2005 à 11:26
à la limite je testerai sous Word, mais le mieux pour geler un processus serait alors de geler tous les threads qui ont comme parent le processus visé non ?
Enfin au moins avec ça on sait geler un processus, depuis le temps que je cherchais c'était tout con, mais personne ne l'avais jamais mis sur vbfrance, c'est rare...
Et merci pour vos commentaires ;)
24 févr. 2005 à 09:53
Pour une application multi-thread (comme Word par exemple), comment se comporte ton programme ?
D'après les API utilisés, il semblerait que tu ne gèle que le thread de la fenêtre courante de l'application visé. Hors si d'autre thread on besoin d'interagir avec le thread de la fenêtre courante, que se passe-t-il ?
A creuser...
24 févr. 2005 à 00:40
23 févr. 2005 à 08:26
en tout cas merci, ça peut etre utile.