Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1211 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Resolu/VBA] Priorité des applications

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu/VBA] Priorité des applications

n°1568380
merenptah4​4
Posté le 01-06-2007 à 09:25:39  profilanswer
 

Bonjour à tous,
voilà ma petite question je souhaite lancer un programme depuis une macro Excel/VBA, ç aje sais faire, mais je ne sais pas comment on peut régler la priorité de l'application (à savoir je souhaite la passer en below normal).
 
Quelqu'un sait-il comment faire ?
 
Merci
 
Benj


Message édité par merenptah44 le 06-06-2007 à 15:03:19
mood
Publicité
Posté le 01-06-2007 à 09:25:39  profilanswer
 

n°1568426
tegu
Posté le 01-06-2007 à 10:27:52  profilanswer
 

À part passer par des API Windows pour le lancement de ton programme je ne sais pas.
Genre l'API CreateProcessA() (c'est juste un exemple de ce qui me vient à l'esprit ; je ne suis pas sûr que ça irait pour ton besoin)

n°1568479
merenptah4​4
Posté le 01-06-2007 à 11:17:39  profilanswer
 

Ok j'ai pas tout compris à ce que tu m'as dit
Je lance mon programme avec une petite routine comme ça :
(c pas de moi j'e l'ai récupéré, peut-être bien ici d'ailleurs)

Code :
  1. Public hProcess, nRet, Retour As Long
  2. Const PROCESS_QUERY_INFORMATION = &H400
  3. Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  4. Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  5. Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
  6. Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
  7. Sub launch_orcaflex()
  8. ' Pour lancer le programme :
  9. Retour = Shell("C:\Program Files\Orcina\OrcaFlex\OrcaFlex.exe", 1)
  10. ' Pour Fermer le programme :
  11. hProcess = OpenProcess(fdwAccess, False, Retour)
  12. GetExitCodeProcess hProcess, nRet
  13. Call TerminateProcess(hProcess, nRet)
  14. Call CloseHandle(hProcess)
  15. End Sub


je me demande si ça serait pas en jouant sur  :Const PROCESS_QUERY_INFORMATION = &H400
mais j'en suis pas sur

n°1568484
merenptah4​4
Posté le 01-06-2007 à 11:20:24  profilanswer
 

Bon à priori c ça :
Public Const BELOW_NORMAL_PRIORITY_CLASS = &H4000
et on peut utiliser la commande API (proche de ce que tu suggérait) :
SetPriorityClass  
 
j'ai fait ça mais c pas encore concluant :

Code :
  1. InRet = SetPriorityClass(hProcess, BELOW_NORMAL_PRIORITY_CLASS)


mais j'arrive pas à réutiliser InRet et la valeur, je vois pas où ça s'utilise encore...
 


Message édité par merenptah44 le 01-06-2007 à 11:28:41
n°1568507
merenptah4​4
Posté le 01-06-2007 à 11:38:55  profilanswer
 

j'ai fait ça (enfin en utilisant un code glanés sur la toile):

Code :
  1. Public hProcess, nRet, Retour As Long
  2. Const PROCESS_QUERY_INFORMATION = &H400
  3. ' Constantes des priorités (6 niveaux de priorités)
  4. Public Const IDLE_PRIORITY_CLASS As Long = &H40 ' minimum
  5. Public Const BELOW_NORMAL_PRIORITY_CLASS As Long = &H4000 ' normal -
  6. Public Const NORMAL_PRIORITY_CLASS As Long = &H20 ' normal
  7. Public Const ABOVE_NORMAL_PRIORITY_CLASS As Long = &H8000 ' normal +
  8. Public Const HIGH_PRIORITY_CLASS As Long = &H80 ' haute
  9. Public Const REALTIME_PRIORITY_CLASS As Long = &H100 ' maximum
  10. '
  11. Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  12. Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  13. Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
  14. Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
  15. Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long
  16. ' Constante paramètre de l'API OpenProcess
  17. Private Const PROCESS_SET_INFORMATION As Long = &H200
  18. ' Defini la priorité d'un processus
  19. Public Function SetProcessPriority(ByVal ProcessID As Long, ByVal Level As Long)
  20.     Dim hProcess As Long
  21.     ' Ouvre en ecriture
  22.     hProcess = OpenProcess(PROCESS_SET_INFORMATION, 0, ProcessID)
  23.     ' On définit la priorité
  24.     SetPriorityClass hProcess, Level
  25.     ' On ferme le pointeur ouvert
  26.     CloseHandle hProcess
  27. End Function
  28. Sub launch_orcaflex()
  29. ' Pour lancer le programme :
  30. Level = BELOW_NORMAL_PRIORITY_CLASS
  31. Retour = Shell("C:\Program Files\Orcina\OrcaFlex\OrcaFlex.exe", 1)
  32. ' Pour Fermer le programme :
  33. hProcess = OpenProcess(fdwAccess, False, Retour)
  34. GetExitCodeProcess hProcess, nRet
  35. SetProcessPriority hProcess, Level
  36. Call CloseHandle(hProcess)
  37. End Sub


Mais ça marche pas plus
 
quid ? :??:


Message édité par merenptah44 le 01-06-2007 à 11:41:20
n°1568553
tegu
Posté le 01-06-2007 à 12:50:38  profilanswer
 

N'ayant pas moi-même utilisé ces fonctions, je ne pouvais que t'indiquer la piste.
J'espère que quelqu'un d'autre pourra mieux te guider sur ce sujet.

n°1569841
merenptah4​4
Posté le 04-06-2007 à 15:57:56  profilanswer
 

up

n°1569842
merenptah4​4
Posté le 04-06-2007 à 15:58:30  profilanswer
 

question :  
aux connaisseurs est -ce que je veux faire est-il tout simplement faisable sous Windows 98 (ben quoi, c'est pas moi c'est le boulot)

n°1569853
tegu
Posté le 04-06-2007 à 16:06:16  profilanswer
 

Je crains que les connaisseurs de ce genre de pratique (changer la priorité d'un programme) ne soient pas dans la catégorie VB :)
(p'ti up de soutien déguisé)

n°1569875
merenptah4​4
Posté le 04-06-2007 à 16:30:51  profilanswer
 

tu dois avoir raison, jegarde espoir cela dit(un merci déguisé pour le soutient et le up accompagnant)


Message édité par merenptah44 le 04-06-2007 à 16:31:03
mood
Publicité
Posté le 04-06-2007 à 16:30:51  profilanswer
 

n°1570799
jpcheck
Pioupiou
Posté le 06-06-2007 à 11:38:01  profilanswer
 
n°1570996
merenptah4​4
Posté le 06-06-2007 à 15:02:42  profilanswer
 

ben en fait j'ai essayé ce qu'il disait mais bizarrement les commandes qqch.exe /HIGh ne sont pas reconnues quand tu fais SHELL en vba.
cela dit j'ai résolu qd m^me le pb, si un jour ça intéresse quelqu'un ce n'est peut etre pas le meilleur code mais ça marche

Code :
  1. Public hProcess, nRet, Retour As Long
  2. Const PROCESS_QUERY_INFORMATION = &H400
  3. ' Constantes des priorités (6 niveaux de priorités)
  4. Public Const IDLE_PRIORITY_CLASS As Long = &H40 ' minimum
  5. Public Const BELOW_NORMAL_PRIORITY_CLASS As Long = &H4000 ' normal -
  6. Public Const NORMAL_PRIORITY_CLASS As Long = &H20 ' normal
  7. Public Const ABOVE_NORMAL_PRIORITY_CLASS As Long = &H8000 ' normal +
  8. Public Const HIGH_PRIORITY_CLASS As Long = &H80 ' haute
  9. Public Const REALTIME_PRIORITY_CLASS As Long = &H100 ' maximum
  10. '
  11. Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  12. Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  13. Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
  14. Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
  15. Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long
  16. Declare Function GetCurrentProcessId Lib "kernel32" () As Long
  17. ' Constante paramètre de l'API OpenProcess
  18. Private Const PROCESS_SET_INFORMATION As Long = &H200
  19. Sub launch_orcaflex()
  20. ' Pour lancer le programme :
  21. Level = BELOW_NORMAL_PRIORITY_CLASS
  22. Retour = Shell("C:\Program Files\Orcina\OrcaFlex\OrcaFlex.exe ", 1)
  23. hProcess = OpenProcess(&H200, False, Retour)
  24. SetPriorityClass hProcess, Level
  25. Call CloseHandle(hProcess)
  26. End Sub


 
c quand même beau le web, comment a-t'on pu s'en passer  :bounce:  ?

n°1571020
jpcheck
Pioupiou
Posté le 06-06-2007 à 15:20:43  profilanswer
 

merenptah44 a écrit :


c quand même beau le web, comment a-t'on pu s'en passer  :bounce:  ?


 
[totalement  HS, mais pas tant que ca]
 un ancien sujet de philo :
"Est-on responsable de ce dont on a pas conscience ?" :sol:  
[/HS]

n°1571062
tegu
Posté le 06-06-2007 à 15:52:39  profilanswer
 

En fait merenptah44, par rapport à ton premier essai tu as juste rétabli la bonne valeur de premier paramètre lors de l'appel à l'API OpenProcess() ?
À savoir tu as remplacé
hProcess = OpenProcess(fdwAccess, False, Retour)
par
hProcess = OpenProcess(&H200, False, Retour)
 
Or je remarque dans ton code qu'une constante semble être dédiée à cette utilisation.
Le code devrait donc être (pour être complet)
hProcess = OpenProcess(PROCESS_SET_INFORMATION, False, Retour)
 
Je ne pensais pas que ça pouvait être aussi simple en fait.
Bravo d'avoir gardé espoir :)

n°1571110
merenptah4​4
Posté le 06-06-2007 à 16:30:59  profilanswer
 

tegu a écrit :

En fait merenptah44, par rapport à ton premier essai tu as juste rétabli la bonne valeur de premier paramètre lors de l'appel à l'API OpenProcess() ?
À savoir tu as remplacé
hProcess = OpenProcess(fdwAccess, False, Retour)
par
hProcess = OpenProcess(&H200, False, Retour)
 
Or je remarque dans ton code qu'une constante semble être dédiée à cette utilisation.
Le code devrait donc être (pour être complet)
hProcess = OpenProcess(PROCESS_SET_INFORMATION, False, Retour)
 
Je ne pensais pas que ça pouvait être aussi simple en fait.
Bravo d'avoir gardé espoir :)


en fait c exactement ça, je m'étais pas aperçu que j'avais viré la constante fdwaccess=PROCESS_SET_INFORMATION... y a des jours comme ça ...


---------------
Un pur groupe de musique à connaitre avant tout le monde :http://perso.numericable.fr/~bebrault/hollymess (site down pour le moment)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Resolu/VBA] Priorité des applications

 

Sujets relatifs
surcharger l'opérateur '+=' ? [résolu]Problème de Makefile [Résolu]
[Résolu] Ajax - [object HTMLTextAreaElement][JAVASCRIPT] chargement fichier lors de lappel d'une fonction
[Résolu] Problème avec Firefox[resolu] Apache et php : Pages qui ne s'affichent pas.
[Résolu] Créer macro importé un .csv dans excel[RESOLU] FPDF probleme mise en page tableau
[RESOLU]Calcul nombre de jours ouvrables entre 2 datesComment organiser la superposition de QLabel (Résolu)
Plus de sujets relatifs à : [Resolu/VBA] Priorité des applications


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR