Aller au menu - Aller au contenu
Inscris-toi au e-camp "Héberge ton jeu Facebook sur Azure" de Microsoft vendredi 25 mai à 13h30 !

Fermer et réouvrir processus

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page 1 
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page 1 
Hors ligne coco271 # Posté le 09/07/2009 à 21:51:39
Avatar

Ville : Mazeyrat d'allier
Pays : France métropolitaine

Bonsoir, j'aimerais savoir comment fermer et réouvrir un processus (calc.exe par exemple).
Dans mes recherches j'ai souvent trouvé "TerminateProcess()", mais je ne comprend pas comment l'utiliser.
Pour la réouverture, je souhaiterais le faire par le chemin de destination : C:\Windows\System32\calc.exe.
Merci pour votre future aide !
Édité le 12/07/2009 à 22:39:31 par coco271
Publicité # Posté le 09/07/2009 à 21:51:39

Hors ligne Tados # Posté le 09/07/2009 à 22:05:23
YOU … are The Chosen One …
Avatar

Les Règles du Forum précisent qu'il faut chercher avant de poster.

Tiens, lis ça : http://www.siteduzero.com/forum-83-197 [...] cessus-c.html
Édité le 09/07/2009 à 22:05:59 par Tados

Image utilisateur[Tutoriel]
Débuguer facilement
avec valgrind

" … the one who will deliver The Message … "





Image utilisateur[En rédaction]
Accélérer l'allocation
dynamique en C







Image utilisateur





Image utilisateur
"C is a sharp tool"
 
Hors ligne coco271 # Posté le 10/07/2009 à 11:02:18
Avatar

Ville : Mazeyrat d'allier
Pays : France métropolitaine

Citation : coco271
Dans mes recherches j'ai souvent trouvé "TerminateProcess()", mais je ne comprend pas comment l'utiliser.

J'ai bien cherché et j'ai trouvé les explications "officielles" et d'autre trucs, mais comme je le disais je ne comprend pas comment l'utiliser. :euh:
Citation : coco271 en IRL
Le "HANDLE" ?! Keskecé ?
Édité le 10/07/2009 à 11:04:09 par coco271
Hors ligne coco271 # Posté le 11/07/2009 à 11:39:38
Avatar

Ville : Mazeyrat d'allier
Pays : France métropolitaine

Up !
Hors ligne coco271 # Posté le 12/07/2009 à 21:54:13
Avatar

Ville : Mazeyrat d'allier
Pays : France métropolitaine

Up !
Hors ligne rz0 # Posté le 12/07/2009 à 22:09:37
Papa Ours.
Avatar
Flux RSS

Études : Ensimag

Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Si t'utilises ShellExecute t'auras du mal mais si tu utilises CreateProcess() pour lancer le programme tu récupéreras le handle du nouveau process que tu pourras passer à TerminateProcess(). Enfin, si jme rappelle bien.

Le handle ça identifie un objet dans Windows.
 
Hors ligne coco271 # Posté le 12/07/2009 à 22:38:36
Avatar

Ville : Mazeyrat d'allier
Pays : France métropolitaine

Bon sérieusement, je m'en sort pas...

Es qu'une âme charitable pourrais me sortir le code pour lancer la calculatrice windows avec les droits d'admin (Et la fermer) ?

Ou alors une explication (Française) de CreateProcess() et de TerminateProcess() ?

(Sauf si handle change...)

Merci d'avance.
Hors ligne coco271 # Posté le 16/07/2009 à 11:18:06
Avatar

Ville : Mazeyrat d'allier
Pays : France métropolitaine

Up !
Hors ligne Polgara # Posté le 16/07/2009 à 11:35:16
Avatar

Si tu travailles sous windows sans besoin de portabilité tu peux utiliser la commande system pour simplifier ton besoin :
Code : C
1
2
system("start firefox.exe");//pour lancer l'appli
system("TASKKILL /f /im firefox.exe ");//et pour fermer :)

En espérant que ca t'aide ;)
Hors ligne coco271 # Posté le 16/07/2009 à 11:45:34
Avatar

Ville : Mazeyrat d'allier
Pays : France métropolitaine

Hum, system n'est pas assez complet, il me faudrait du C. (Le batch...)
Hors ligne Polgara # Posté le 16/07/2009 à 11:55:49
Avatar

Vi le batch c'est pas très propre mais ca évite bien des problèmes parfois :D Qui a dit espèce de gros flemmard :-°
Hors ligne magma # Posté le 16/07/2009 à 13:07:50
Avatar

Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <windows.h>

int WINAPI WinMain(HINSTANCE a, HINSTANCE b, LPSTR c, int d)
{
  int i;
  STARTUPINFO si;
  PROCESS_INFORMATION pi;
  char cmd[] = "calc";

  for(i = 0; i < 5; i++)
  {
    ZeroMemory(&si, sizeof(si));
    ZeroMemory(&pi, sizeof(pi));
    si.cb = sizeof(si);

    if(!CreateProcess(0, cmd, 0, 0, 0, 0, 0, 0, &si, &pi))
      break;

    Sleep(3000);
    TerminateProcess(pi.hProcess, 0);
    Sleep(2000);
  }

  return 0;
}

 
 
Hors ligne coco271 # Posté le 16/07/2009 à 13:25:40
Avatar

Ville : Mazeyrat d'allier
Pays : France métropolitaine

Ha ?
Merci ?
(Demande des explications de code)

Merci, je vais essayer.
Hors ligne Anonymee # Posté le 16/07/2009 à 19:36:16
Avatar

Bonjour moi je voudrait savoir comment lancer un programme au démarage dans le code sans mettre le programme dans menu démarrage ect ..

Graphiste,codeur c/c++ , c/c++ reseaux , scénariste ou musicien ? Alors rejoins l'équipe :

Darckfrag recrute


Image utilisateur

Citation
Anthony dit :
ils ont eu leur leçon
 
Hors ligne personne3000 # Posté le 16/07/2009 à 22:21:18
Avatar

Ville : Paris
Pays : France métropolitaine

Toujours dans l'optique de ton keylogger? (qui devient franchement louche d'ailleurs)
Ce ne sera pas du tout le même problème et la même méthode de résolution, il faut créer un autre sujet.
Hors ligne lorenzo_s # Posté le 18/07/2009 à 09:48:18
Groupe : Bannis

Code : C
1
2
3
4
5
for(i = 0; i < 5; i++)
  {
    ZeroMemory(&si, sizeof(si));
 ....
}


Ce code n'est pas bon : plein d'erreurs (réinitialisation dans une boucle (!), pas Unicode , etc)
Hors ligne Tados # Posté le 18/07/2009 à 18:06:54
YOU … are The Chosen One …
Avatar

Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Citation : magma
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
int WINAPI WinMain(HINSTANCE a, HINSTANCE b, LPSTR c, int d)
{
  int i;
  STARTUPINFO si;
  PROCESS_INFORMATION pi;
  char cmd[] = "calc";
  /* *** */
  ZeroMemory(&pi, sizeof(pi));
  /* *** */
  CreateProcess(0, cmd, 0, 0, 0, 0, 0, 0, &si, &pi)
Apparemment, STARTUPINFO ne sert à rien, cmd n'a pas le bon type, la macro ZeroMemory et à proscrire, et le premier argument de CreateProcess doit être non-nul.
Tout ça d'après MSDN :
Citation : MSDN
psiStartInfo
[in] Not supported; set to NULL.
(...)
typedef wchar_t* LPWSTR, *PWSTR;
(...)
To avoid any undesired effects of optimizing compilers, use the SecureZeroMemory function
(...)
The lpszImageName parameter must be non-NULL






Citation : coco271
(Demande des explications de code)
Mais il suffit de lire ce qu'il y a sur MSDN :
CreateProcess()
PROCESS_INFORMATION
TerminateProcess()
DWORD
LPCWSTR

Ceci devrait marcher :
Code : C
1
2
3
4
5
6
7
8
9
/* --- */
wchar_t wfilename[20]; /* on ne peut assigner une chaine de caractères qu'avec le type char */
PROCESS_INFORMATION pi;

swprintf(wfilename,20,L"C:\\monprogramme.exe"); /* EDIT : oubli de l'indispensable L */
CreateProcess(wfilename,NULL,NULL,NULL,FALSE,0,NULL,NULL,NULL, &pi);
 /* --- */
TerminateProcess(pi.hProcess, 0);
/* --- */
Tout est dans les liens juste au-dessus.
(J'insiste sur le devrait puisque je n'avais encore hier jamais rien lu sur MSDN :p )





Ensuite, SI tu veux tuer un processus que tu n'as pas exécuté toi-même avec CreateProcess(),
ma première recherche nous donna ceci :
http://www.siteduzero.com/forum-83-202 [...] -son-nom.html
Ce qui nous donne cela :
http://www.commentcamarche.net/forum/a [...] -un-processus
Puis enfin :
Process and Thread Functions
COMMENT FAIRE : Énumérer des applications à l'aide des API Win32
Le deuxième lien est particulièrement intéressant.

Il ne reste plus qu'à chercher le descriptif des différentes fonctions utilisées, ce qui ne prend que deux minutes de plus et donne, dans l'ordre :
EnumProcesses()
OpenProcess()
EnumProcessModules()
GetModuleBaseName()
J'ai pas lu en détail le fonctionnement de ces fonctions, mais ça ne devrait pas être fondamentalement plus compliqué que ce qu'il y a au-dessus. (enfin j'espère... enfin, je te le souhaite quoi !)

C'est néanmoins un peu plus long.
La méthode expliquée permet d'obtenir, pour chaque processus en cours d'exécution, le chemin d'accès complet de l'executable pour l'identifier et le HANDLE pour pouvoir le tuer. :)

Voila, maintenant je t'en prie, dis-moi que je n'ai pas écrit tout ça pour rien ! :'(


EDIT: correction de deux erreurs, signalées à coco271 par MP.
Édité le 21/07/2009 à 20:07:54 par Tados

Image utilisateur[Tutoriel]
Débuguer facilement
avec valgrind

" … the one who will deliver The Message … "





Image utilisateur[En rédaction]
Accélérer l'allocation
dynamique en C







Image utilisateur





Image utilisateur
"C is a sharp tool"
 
Hors ligne coco271 # Posté le 18/07/2009 à 22:22:02
Avatar

Ville : Mazeyrat d'allier
Pays : France métropolitaine

Woaw ! Méga complet, je regarde TOUT ça !
Merci beaucoup !

Retour au forum "Langage C" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx