Passer word en priorité haute (SetPriorityClass) [Résolu]

Messages postés
3
Date d'inscription
samedi 5 septembre 2009
Dernière intervention
11 janvier 2014
- - Dernière réponse : cs_Thibaut77
Messages postés
3
Date d'inscription
samedi 5 septembre 2009
Dernière intervention
11 janvier 2014
- 28 juil. 2011 à 10:51
Bonjour à tous,

J'ai développé une petite appli qui au cours du déroulement rédige un rapport sous word. Pour des problèmes de performances, j'ai besoin de passer word en priorité haute.
Un jeu d'enfant me direz vous !
Eh ben pas pour moi ! j'ai épluché toutes les sources, forums et autres tuto de codes-sources et je n'y arrive pas?
Je développe sous VB express 2008 et le PC est sous XP SP3.
Je vous expose ci-dessous les 2 méthodes essayées. J'ai aussi tenté de donner les privilèges adéquats à mon appli (tout en bas) mais rien ne fonctionne.
J'ai essayé de modifier le paramètre d'accès (&H200 puis PROCESS_ALL_ACCESS, ? pour openprocess) et plein d'autres trucs mais rien n'y fait.
La boulette doit certainement être énorme mais je n'arrive pas à la voir.
HELP !
Merci !



1ere méthode : par WMI en recherchant le processus winword.exe (car je sais qu'il existe puisque créer par mon appli) :

Dim hProcess As Long
Dim objWMIService As Object
Dim sQuery As String
Dim oproc
Dim colItems As Collection
Dim valeur_priorite, res As Long
Const PROCESS_ALL_ACCESS = &H1F0FFF

objWMIService = GetObject("winmgmts:\\.\root\cimv2")
For Each oproc In objWMIService.Execquery("SELECT * FROM Win32_Process WHERE name= 'WINWORD.EXE'")
hProcess = OpenProcess(&H200, 0, oproc.processID) ' plante ici : hProcess=0 code erreur=87 => parametre incorrect
valeur_priorite = &H80
res = SetPriorityClass(hProcess, valeur_priorite)
Next



2éme méthode : par la fenêtre de word dont je connais le nom :

Dim handle_fen, handle_process, r, hproc_ouvert As Long
Const PROCESS_ALL_ACCESS = &H1F0FFF

handle_fen = FindWindow(vbNullString, "Document1 - Microsoft Word")

'A partir de ce handle de fenêtre, il est possible d'obtenir le handle du processus correspondant:
r = GetWindowThreadProcessId(handle_fen, handle_process) 'Plante ici : message d'erreur « tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée. »


' ouvre le processus en mode 'Interrogation et Définition', ce qui permettra d'obtenir le niveau de priorité du processus et de le changer:
hproc_ouvert = OpenProcess(&H200, False, handle_process)

'changer le niveau de priorité du processus pour le définir à "haute" (&H80):
r = SetPriorityClass(hproc_ouvert, &H80)

'L'opération étant terminée, il ne reste plus qu'à libérer le handle du processus ouvert.
CloseHandle(hproc_ouvert)




J'ai aussi tenté de donner les privilèges à mon appli qui pilote word :
(je vous passe les déclarations fastidieuses?)

'obtient le handle de ce process
hProc = GetCurrentProcess

'change les droits de cette application
OpenProcessToken(hProc, TOKEN_ALL_ACCESS, lhTokenHandle)
LookupPrivilegeValue(vbNullString, SE_DEBUG_NAME, tLuid) 'plante ici

'détermine le nombre de privileges à changer
tTokenPriv.PrivilegeCount = 1
tTokenPriv.TheLuid = tLuid
tTokenPriv.Attributes = SE_PRIVILEGE_ENABLED

'autorise le privilege SE_DEBUG_NAME
AdjustTokenPrivileges(lhTokenHandle, False, tTokenPriv, Len(tTokenPrivNew), tTokenPrivNew, lBufferNeeded)
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
5
Merci
Petite remarque :
Si word est dejà lancé :
Dim p() As Process = Process.GetProcesses
For Each item As Process In p
    If item.ProcessName = "WINWORD" Then
        item.PriorityClass = ProcessPriorityClass.High
        Exit For
    End If
Next

Bonne soirée.

Dire « Merci » 5

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
1
Merci
Bonsoir,

As-tu essayé ceci ? :
Dim p As New Process
p.StartInfo.FileName = "WINWORD.exe"
p.Start()
p.PriorityClass = ProcessPriorityClass.High

Bonne soirée.
Commenter la réponse de Utilisateur anonyme
Messages postés
3
Date d'inscription
samedi 5 septembre 2009
Dernière intervention
11 janvier 2014
0
Merci
Ahhhh! du code comme j'aimerais en faire plus souvent...
Code court, simple, efficace, rapide et en prime qui fonctionne à merveille...
Merci banana32 !

Je n'ai testé que la version avec word déjà lancé puisque c'est mon cas.
Pour info, il ne faut pas rajouter l'extension du processus (".exe") sinon ca ne fonctionne pas!

Merci!
Commenter la réponse de cs_Thibaut77

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.