OpenProcess

Résolu
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013 - 4 janv. 2005 à 19:23
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013 - 5 janv. 2005 à 21:56
Salut , j'aimerais savoi comment faire pour ouvrir un processus de la maniere

suivante :
(hList contient l'handle d'une listbox d'une autre application)

unsigned long cProcess;

sThread = GetWindowThreadProcessId(hListBox, &cProcess);
mThread = OpenProcess(PROCESS_ALL_ACCESS, false, cProcess);

Mais j'arrive pas il y'a tout le temps une erreure.
Pouvez vous m'aider ?

NeoUmbrella Corp.

11 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
5 janv. 2005 à 18:07
Oui car en VB il y a tellement d'autre trucs qui tournent en même temps que les handles ne sont pas les mêmes que dans un prog Win32 simple (il y en a sans doute plus d'ouverts). Mais du moment que OpenProcess ne renvoi pas NULL, c'est bon tu poura l'utiliser dans les fonctions demandant ce hProcess. De plus, si le PID du process a une signification pour l'ensemble des processus du système, le handle donné par OpenProcess n'aura qu'une signification que pour le process appelant (et ses futurs descendant si tu as ajouté l'option bIniherit).
3
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013
4 janv. 2005 à 23:14
En fait j'ecris ca :

long mThread;
unsigned long cProcess,sThread;

sThread = GetWindowThreadProcessId(hListBox, &cProcess);
mThread = (long)OpenProcess(PROCESS_ALL_ACCESS, true, cProcess);

sThread me donne la bonne valeure.
Mais mon probleme se situe au niveau de mThread qui me donne tout le temps
2000, je ne comprends pas pourquoi.

Heeelp meee plzzzz

NeoUmbrella Corp.
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
5 janv. 2005 à 09:33
Si OpenProcess ne te renvoi pas NULL, c'est que c'est bon. La valeur en elle-même du HANDLE retourné (nomme le hProcess, plutôt que mThread) n'a aucune signification particulière (sauf pour le système) et peut très bien être la même quel que soit le PID.
0
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013
5 janv. 2005 à 12:51
Pourtant de cette maniere (vb):

Dim cProcess As Long, sThread As Long, mThread As Long

sThread = GetWindowThreadProcessId(rList, cProcess)
mThread = OpenProcess(PROCESS_READ Or RIGHTS_REQUIRED, False, cProcess)

J'arrive a recupere une autre valeure que 2000 et qui change a chaque fois.

NeoUmbrella Corp.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
5 janv. 2005 à 13:12
Peut-être mais comme tu met pas les même paramètres à OpenProcess, ça va être dur de comparer...
0
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013
5 janv. 2005 à 17:16
Je pense que tu parles de PROCESS_READ Or RIGHTS_REQUIRED
Sachant que leur valeure est :

PROCESS_READ = &H10
RIGHTS_REQUIRED = &HF0000

(&H veut dire que ce sont des nombres hexadecimaux en vb)

Que dois je mettre comme parametre ?

NeoUmbrella Corp.
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
5 janv. 2005 à 17:27
J'ai fait quelques tests et en effet j'obtient toujours la même valeur pour le handle (peu importe les paramètres et le PID). Mais ce handle est valide alors on s'en fout un peu d'avoir toujours le même...

Par contre si tu ouvre un autre process en ayant le premier handle d'ouvert, tu doit avoir une autre valeur.

Il ne faut pas oublier que les handles n'ont une signification que pour le système alors il peut nous donner n'importe quoi du moment qu'en interne il sait à quoi cela correspond.
0
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013
5 janv. 2005 à 18:01
Ca serait donc normal qu'avec un code vb j'obtienne 804
et avec ce code la j'obtienne 2000 ?

Car apres je dois utiliser un ReadProcessMemory avec cette handle
comme parametre.

NeoUmbrella Corp.
0
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013
5 janv. 2005 à 20:13
Oki merci beaucoup pour tes explications ymca2003

NeoUmbrella Corp.
0
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013
5 janv. 2005 à 21:39
Heu en fait j'ai un autre probleme,

ReadProcessMemory(&mThread, &itmHold, &Pseudo, 4, rBytes);

rBytes me renvoit toujours 0, sais tu pourquoi ?

NeoUmbrella Corp.
0
NeoUmbrella Messages postés 117 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 15 janvier 2013
5 janv. 2005 à 21:56
Desolé pour la question, jme corrige tout seul ^^'

ReadProcessMemory((LPVOID)mThread, (LPCVOID)itmHold, Pseudo, 4, &rBytes);

Ca marche comme ca ^^

NeoUmbrella Corp.
0
Rejoignez-nous