AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Benachrichtigung wenn Prozess gestartet wurde
Thema durchsuchen
Ansicht
Themen-Optionen

Benachrichtigung wenn Prozess gestartet wurde

Ein Thema von diabox · begonnen am 2. Jun 2012 · letzter Beitrag vom 15. Jul 2012
 
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Benachrichtigung wenn Prozess gestartet wurde

  Alt 3. Jun 2012, 02:39
Ich hab noch nie damit gearbeitet, habe aber durch stöbern in der C++ Docu den Code zusammen geschusstert. Du musst nur noch es nur noch in nem Thread auslagern, da er die Anwendung so auf eisleget und du hast deine Abfrage. Im Anhang die Interfaces Datei, die ich per Delphi erstellen gelassen hab, nur die die meisten müsste man umändern, damit man die Errorcodes zurückbekommt, aber beim Debuggen übernihmt das die VCL meistens von selbst. Die Funktionen für diesen Ablauf habe ich bereits umgeändert.
Die Eigenschaften musst du im String suchen. Es gibt auch eine Möglichkeit, sie über die Interfaces abzurufen, aber dies führte bei mir nur zu Fehlern. Kannst es ja mal versuchen, wenn du durchblickst xD
Hier der Code:
Delphi-Quellcode:
var hr : HRESULT;
    pLoc : ISWbemLocator;
    pSvc : ISWbemServices;
    pObj,pNewInsta : ISWbemObject;
    pEvent : ISWbemEventSource;
    Str : WideString;
begin
  //Haupt-Interface
  hr := CoCreateInstance(CLASS_SWbemLocator, nil,
        CLSCTX_INPROC_SERVER, IID_ISWbemLocator, pLoc);
  if FAILED(hr) then
  begin
    ShowMessage('Fehler');
    Exit
  end;
  //Basiert anscheinend auf IP/Domain, ob man da vielleicht Server-Prozzese abrufen kann? Glaub ich eher nicht.
  hr := pLoc.ConnectServer('localhost', '', '', '', '', 0, '',nil, pSvc);
  if FAILED(hr) then
  begin
    pLoc._Release;
    ShowMessage('Fehler');
    Exit;
  end;

  ShowMessage('Connected to WMI'); //Ab hier hast du Zugriff.
  //Der Erste Parameter ist die Abfrage, dies basiert sehr auf SQL, was auch in der Beschreibung von "WQL", wie es sich nennt, steht.
  //Du kannst sehr vieles abrufen, aber damit fragst du ab, wenn ein Prozzes gestartet wurde.
  //Bei mir hat es mit dem Windows Editor geklappt, und 0 % CPU Auslastung beim Warten xD
  hr := pSvc.ExecNotificationQuery('SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE targetInstance ISA "Win32_Process"',
        'WQL',
        $00000020 or $00000010,
        nil,
        pEvent);

  if FAILED(hr) then
  begin
    pLoc._Release;
    pSvc._Release;
    ShowMessage('Fehler bei Query');
    Exit;
  end;
  //Hier die Schleife, nach NextEvent, wartet das Programm auf einen Prozzes start.
  while True do
  hr := pEvent.NextEvent(wbemTimeoutInfinite,pNewInsta);
  //pNewInsta ist nun der neue Prozzes, womit du nun alle Infos abfragen kannst
  if FAILED(hr) then
  begin
    pLoc._Release;
    pSvc._Release;
    pEvent._Release;
    ShowMessage('Fehler bei Instance');
    Exit;
  end;
  //Lass dir es mal in nem Memo ausgeben, da siehste, das sogut
  //wie alles in einem Klartext steht, in einer Art C++ Class Format.
  //Die ist aber sehr leicht zuverstehen finde ich.
  //Sollte für deine Zwecke reichen
  Str := pNewInsta.GetObjectText_(0); //Ist am einfachsten.
  //...bis hier hin.
Angehängte Dateien
Dateityp: pas WbemScripting_TLB.pas (96,8 KB, 13x aufgerufen)
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz