begivenheder - Sådan overvåger du proces/programkørsel i Windows?

Indlæg af Hanne Mølgaard Plasc

Problem



Vi forsøger at udvikle en lille applikation, der kan overvåge de programmer/processer, der udføres i en Windows-maskine.


Hvis programmet/processen ikke skal løbe, skal det blokeres. Det virker ligner et antivirusprogram.


Dette er den grundlæggende idé.


Jeg vil gerne vide, hvordan man kan køre ind i operativsystemet for at få besked om hvert enkelt program/proces, der forsøger at køre i maskinen.

Bedste reference


Den nemmeste måde er at bruge WMI. Specifikt overvåge Win32\_ProcessStartTrace. Dette er bedre end Win32\_Process, fordi det er setup til at bruge begivenheder, mens Win32\_Process kræver polling, som er mere CPU-intensiv. Nedenfor er, hvordan man gør det i C #. Først sørg for, at System.Management er konfigureret som reference til dit projekt.


    public System.Management.ManagementEventWatcher mgmtWtch;

    public Form1()
    {
        InitializeComponent();
        mgmtWtch = new System.Management.ManagementEventWatcher("Select * From Win32\_ProcessStartTrace");
        mgmtWtch.EventArrived += new System.Management.EventArrivedEventHandler(mgmtWtch\_EventArrived);
        mgmtWtch.Start();
    }

    void mgmtWtch\_EventArrived(object sender, System.Management.EventArrivedEventArgs e)
    {
        MessageBox.Show((string)e.NewEvent["ProcessName"]);
    }

    private void Form1\_FormClosing(object sender, FormClosingEventArgs e)
    {
        mgmtWtch.Stop();
    }


Koden vil generere en meddelelsesboks hver gang du starter en ny proces. Derfra kan du tjekke en hvidliste/sortliste og handle korrekt.

Andre referencer 1


Jeg har ikke prøvet at få besked i realtid. Hvordan nogensinde, Sådan får du kørende processer i C #


using System.Diagnostics;

 //Somewhere in your method

Process[] runningList = Process.GetProcesses();

foreach(Process p in runningList){
Console.WriteLine("Process: {0} ID: {1}", p.ProcessName, p.Id);
}


Du kan også bruge følgende rekvisitter af en proces



  • StartTime - Viser den tid processen startede

  • TotalProcessorTime - Viser mængden af ​​CPU-tid, processen har taget

  • Tråd - giver adgang til indsamling af tråde i processen


Andre referencer 2


Jeg vil kontrollere Win32-api SetWindowsHookEx med den konstante WH\_GETMESSAGE for at tilføje et tilbagekald til dit program, når et nyt vindue oprettes.


http://pinvoke.net/default.aspx/user32.SetWindowsHookEx[3]


Google API og WH\_GETMESSAGE for at finde ud af mere.


Tjek også følgende artikler/kodebiblioteker:
http://www.vbaccelerator.com/home/Vb/Code/Libraries/Hooks/vbAccelerator\_Hook\_Library/article.asp[4]


http://www.codeproject.com/KB/DLL/hooks.aspx?fid=2061u0026amp;df=90u0026amp;mpp=25u0026amp;noise=3u0026amp;sort=Positionu0026amp;view=Quicku0026amp;fr=76u0026amp;select=726975 [[[5]