|
|||||||
| VB 6 et antérieur Visual basic 6 et versions antérieures. Avant de poster -> La FAQ VB6, Les tutoriels VB |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Membre Confirmé
![]() |
Salut à tous,
Est-ce qu'il est possible en VB de réduire la priorité d'un processus si je connait son nom? En fait mon but serait de détecter si un ou plusieurs processus nommés ntvdm.exe tournent sur Windows. Si c'est le cas, je voudrais réussir à changer leur priorité en LOW. C'est très important pour moi de trouver un moyen de bloquer un peu ce processus qui me bouffe 99% du CPU dés que j'ai un programme DOS 16 bit qui tourne sous win2k ou XP (NT koi). Si quelqu'un à un exemple, de la doc ou un API pour moi je suis preneur. Merci d'avance pour toute info.
__________________
WebAgency www.cpstyle.net BncAgency www.bncmasters.net |
|
|
|
|
|
#2 (permalink) | ||
![]() Date d'inscription: novembre 2003
Messages: 576
|
avec ceci
Code :
Declare Function SetPriorityClass Lib "kernel32" Alias "SetPriorityClass" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long Citation:
Ca va te prendre le handle du process et non pas le nom du process.
__________________
Remoting Context Matters Citation:
|
||
|
|
|
|
|
#3 (permalink) |
|
Guest
Messages: n/a
|
L'API de Shwin donnera sans doute satisfaction mais ce que tu demandes c'est plus de la maintenance systeme que du développement.
Une appli qui prend 99% des ressource c'est qu'il ya un pb Soit réinstaller l'appli soit le système. Si c'est une appli "maison" c'est qu'elle est mal programmée c.a.d. qu'elle contient un processus qui demande trop de ressources |
|
|
|
#4 (permalink) |
|
Membre Confirmé
![]() |
Merci pour l'info shwin, je vais tester ca cette semaine et voir si je peux retrouver le process nommé ntvdm pour en changer la priorité...
mat.M, le probème ne vient malheureusement pas de mon appli mais du fait que c'est tout simplement une application dos 16bit développé récemment par moi-même. Ce n'est pas mon programme qui demande 99% des ressources mais bien le processus Krosoft NTVDM (NT virtual dos machine) qui fait la gestion du cmd.exe pour l'exécution d'un programme 16bit. D'apres les articles que j'ai pu lire, ce processus se croit seul et prend toutes les ressources dispos (notamment pour lem ouse polling, keyboard polling) Aucune solution n'existe pour palier ce problème sauf un soft appelé Tame4.5 qui fait une gestion parfaite de ce problème et réduit l'utilsiation CPU au strict mnimum mais dans mon cas ca pose un prob de compatibilité avec telnet server que j'utilise... Je sais que tout ca semble compliqué mais je travaille sur des appareils de production industriel dos et je dois accèder des base access ... d'ou cette solution... Pour en revenir au bug de windows, cette solution, avec un timer, me permettrait de manuellement réduire la priorité des proces ntvdm dés leur mise en route. Si vous aviez un exemple pour moi ca m'aiderait car je suis pas très fort en ce qui concerne l'utilsiation des API. Il va aussi falloir que je trouve un moyen de retrouver mes process par leur nom encore merci pour les infos en tout cas....
__________________
WebAgency www.cpstyle.net BncAgency www.bncmasters.net |
|
|
|
|
|
#5 (permalink) |
|
Membre Confirmé
![]() |
Je viens de trouver un article avec du code VB qui pourrait m'aider à déterminer le processus et en complément avec la solution de shwin il serait possible de réduire sa priorité.
http://www.vbaccelerator.com/home/VB/Tips/Getting_Process_Information_Using_PSAPI/article.asp N'étant pas expert en API j'ai un peu de mal à comprendre comment faire mais apparement il récupère d'abord le nombre d eprocess (ca marche aussi pour moi). Ensuite il crée le handle en se basant sur l'ID du process et enfin il récupère le nom de ce fameux process. Malheureusement je bloque... Je n'arrive pas à récupèrer le nom du processus... En fait je suis bloqué dans l'étape juste avant. Si quelqu'un pouvait m'aider à finir ce code pour pourvoir énumèrer les process un par un avec leur nom comme ca je pourrais utiliser le handle pour réduire la priorité... Merci d'avance pour votre aide.
__________________
WebAgency www.cpstyle.net BncAgency www.bncmasters.net |
|
|
|
|
|
#6 (permalink) |
|
Membre Confirmé
![]() |
Les déclarations
Code :
Private Const MAX_PATH = 260 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 SetPriorityClass Lib "kernel32" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long Private Declare Function GetPriorityClass Lib "kernel32" (ByVal hProcess As Long) As Long Private Const PROCESS_VM_READ = &H10 Private Const PROCESS_SET_INFORMATION = &H200 Private Const PROCESS_QUERY_INFORMATION = &H400 Code :
Private Sub Timer_process_Timer() Dim aProcesses() As Long Dim cbNeeded As Long Dim cProcesses As Long Dim i As Long ' // Get the list of process identifiers. ReDim aProcesses(0 To 1023) As Long If (EnumProcesses(aProcesses(0), 1024 * 4, cbNeeded) <> 0) Then '// Calculate how many process identifiers were returned. cProcesses = cbNeeded / 4 '// Print the name and process identifier for each process. For i = 0 To cProcesses - 1 PrintProcessNameAndID (aProcesses(i)) Next i Else MsgBox "Failed to get process list.", vbCritical End If End Sub Code :
Public Sub PrintProcessNameAndID(ByVal lProcessID As Long) Dim szProcessName As String Dim lLen As Long Dim hProcess As Long Dim hMod(0 To 1023) As Long Dim cbNeeded As Long Dim i As Long Dim iMax As Long Dim lR As Long Dim tPMC As PROCESS_MEMORY_COUNTERS lLen = MAX_PATH hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ Or PROCESS_SET_INFORMATION, 0, lProcessID) '// get the process name If (hProcess <> 0) Then szProcessName = String$(lLen, 0) LSet szProcessName = "unknown" lR = GetModuleBaseName(hProcess, hMod(i), szProcessName, lLen) If InStr(1, szProcessName, "ntvdm.exe", 1) <> 0 Then If GetPriorityClass(hProcess) = 32 Then hProcess = SetPriorityClass(hProcess, 64) End If End If End If CloseHandle hProcess End Sub http://www.vbaccelerator.com/home/VB/Tips/Getting_Process_Information_Using_PSAPI/article.asp Voila, j'espère que ca pourra aider d'autre personnes après moi. En tout cas ca me permettra de dormir plus tranquilement et de ne plus avoir d'appel de mon client Bonne journée à tous et un immense merci à shwin pour son aide.
__________________
WebAgency www.cpstyle.net BncAgency www.bncmasters.net |
|
|
|
|
![]() |
![]() |
||
[Process] Changer la priorité d'un processus
|
||
| Outils de la discussion | |
|
|