Announcement

Collapse
No announcement yet.

Taskmanager-Prozesse

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Taskmanager-Prozesse

    Hi<p>Ich hab 3 Fragen zum WindowsXP-Taskmanager...<p>1) Einige Prozesse sind als "SYSTEM" deklariert - ist es möglich, selbstprogrammierte Prozesse als "SYSTEM" deklarieren zu lassen?<p>2) Gibt es noch eine andere Möglichkeit als 2, um herauszufinden, ob ein bestimmtes Programm läuft?<p><br>cu, Heinzi

  • #2
    hi Sebastian,<p>
    statt der geschichte mit dem anzeigen der prozesse per Toolhelp32Snapshot,<br>
    kann man ein programm auch ueber die api-funktion FindWindow() finden.<br>
    dafuer musst du den fenstertitel und/oder den fensterklassennamen wissen.<br>
    laeuft das entsprechende programm, wird ein fensterhandle zurueckgegeben,<br>
    ansonsten NULL (c/c++), Nil oder eine 0 (bei delphi weiss ich nicht genau).<br>
    solltest du ein laufendes programm suchen, dessen fenstertitel nicht fix ist,<br>
    bleibt dir nix anderes uebrig als den fensterklassennamen zu ermitteln.<br>
    delphi liefert hierfuer ein extra-tool mit (jedenfalls fuer delphi6 professional),<br>
    welches WinSight32 heisst.<br>
    persoenlich find ich aber die Toolhelp32Snapshot-geschichte schoener/professioneller. <p>
    gruss ro

    Comment


    • #3
      hi Sebastian,<p>
      da mir langweilig war, hab ich dir ein kleines beispielprogramm geschrieben.<br>
      die suche ist non case sensitive.<br>
      (delphi6 unter win2k)<br>
      <pre>
      unit Unit1;
      interface
      uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
      type
      TForm1 = class(TForm)
      Label1: TLabel;
      Label2: TLabel;
      Edit1: TEdit;
      Edit2: TEdit;
      Button1: TButton;
      procedure FormCreate(Sender: TObject);
      procedure FormShow(Sender: TObject);
      procedure Button1Click(Sender: TObject);
      procedure SeekWindow(szTitle, szClass: string);
      private
      { Private-Deklarationen }
      public
      { Public-Deklarationen }
      end;
      var
      Form1: TForm1;
      implementation
      {$R *.dfm}
      /////////////////////////////////////////////////////////////
      procedure TForm1.FormCreate(Sender: TObject);
      begin
      Form1.Caption := 'FindWindow Sample';
      Label1.Caption := 'Fenster Titel:';
      Label2.Caption := 'Fenster Klasse:';
      Edit1.Text := 'FindWindow Sample';//ZoneAlarm Pro
      Edit1.MaxLength := 200;
      Edit2.Text := '';//TForm1 ZAFrameWnd IEFrame
      Edit2.MaxLength := 50;
      Button1.Caption := 'Suche';
      end;
      /////////////////////////////////////////////////////////////
      procedure TForm1.FormShow(Sender: TObject);
      begin
      Edit1.SetFocus;
      end;
      /////////////////////////////////////////////////////////////
      procedure TForm1.Button1Click(Sender: TObject);
      var
      szTitle, szClass: string;
      begin
      szTitle := Edit1.Text;
      szClass := Edit2.Text;
      if (szTitle = '') and (szClass = '') then
      begin
      MessageDlg('Gib ein Fenstertitel oder eine Fensterklasse ein!', mtWarning, [mbOk], 0);
      Edit1.SetFocus;
      end
      else
      SeekWindow(szTitle, szClass);
      end;
      /////////////////////////////////////////////////////////////
      procedure TForm1.SeekWindow(szTitle, szClass: string);
      var
      hHandle: HWND;
      pcTitle: array[0..200] of Char;
      pcClass: array[0..50] of Char;
      szMsg: string;
      i: Integer;
      begin
      i := 0;
      //nach titel suchen
      if (szTitle <> '') and (szClass = '') then
      begin
      StrPCopy(pcTitle, szTitle);
      hHandle := FindWindow(nil, pcTitle);
      if hHandle = 0 then
      szMsg := 'Fenstertitel: '+#9+#9+ szTitle +#13+
      'Status: '+#9+#9+#9+'nicht gefunden'
      else
      begin
      i := GetClassName(hHandle, pcClass, sizeof(pcClass));
      if i>0 then
      Edit2.Text := pcClass;
      szMsg := 'Fenstertitel: '+#9+#9+ szTitle +#13+
      'Fensterklasse: '+#9+#9+ pcClass +#13+
      'Fenster-Handle: '+#9+ '0x' + IntToHex(hHandle,8) +#13+
      'Status: '+#9+#9+#9+'gestartet';
      end;
      end
      //nach klasse suchen
      else if (szTitle = '') and (szClass <> '') then
      begin
      StrPCopy(pcClass, szClass);
      hHandle := FindWindow(pcClass, nil);
      if hHandle = 0 then
      szMsg := 'Fensterklasse: '+#9+#9+ szClass +#13+
      'Status: '+#9+#9+#9+'nicht gefunden'
      else
      begin
      i := GetWindowText(hHandle, pcTitle, sizeof(pcTitle));
      if i>0 then
      Edit1.Text := pcTitle;
      szMsg := 'Fenstertitel: '+#9+#9+ pcTitle +#13+
      'Fensterklasse: '+#9+#9+ pcClass +#13+
      'Fenster-Handle: '+#9+ '0x' + IntToHex(hHandle,8) +#13+
      'Status: '+#9+#9+#9+'gestartet';
      end;
      end
      //nach beiden suchen
      else if (szTitle <> '') and (szClass <> '') then
      begin
      StrPCopy(pcTitle, szTitle);
      StrPCopy(pcClass, szClass);
      hHandle := FindWindow(pcClass, pcTitle);
      if hHandle = 0 then
      szMsg:= 'Fenstertitel: '+#9+#9+ szTitle +#13+
      'Fensterklasse: '+#9+#9+ pcClass +#13+
      'Status: '+#9+#9+#9+'nicht gefunden'
      else
      szMsg := 'Fenstertitel: '+#9+#9+ szTitle +#13+
      'Fensterklasse: '+#9+#9+ pcClass +#13+
      'Fenster-Handle: '+#9+ '0x' + IntToHex(hHandle,8) +#13+
      'Status: '+#9+#9+#9+'gestartet';
      end;
      MessageDlg(szMsg, mtInformation, [mbOk], 0);
      end;
      end.
      </pre>
      <br>
      gruss roy

      Comment


      • #4
        Hi<p>Vielen Dank für die Lösung - es funktioniert! Jetzt habe ich zu der Lösung aber noch eine Frage...kann ich mit dem Window-Handle noch irgendwas anfangen? Kann ich damit irgendwelche Meldungen an das andere Programm schicken?<p>Und 1. ist immer noch aktuell - wie kann ich eine eigene Anwendung als SYSTEM-Prozess deklarieren?<p>cu, Heinz

        Comment


        • #5
          hi Sebastian,<p>
          mit dem window-handle kann man noch eine menge anfangen.<br>
          man koennte die child-windows ermitteln (buttons, edits, usw).<br>
          und man kann auch messages an sie verschicken.<br>
          das ist noch laengst nicht alles, mehr will ich aber dazu nicht sagen.<br>
          dafuer sind gute winapi-kenntnisse und kenntnisse des message-handling's in winanwendungen noetig.<br>
          aber um herauszufinden, ob ein bestimmtes programm laeuft, sollte das erstmal reichen.<p>
          und zu erster frage, habe ich in der msdn die funktionen OpenSCManager(), CreateService() und StartService() gefunden.<br>
          die anwendung wird beim create in die registry eingetragen<br>(HKEY_LOCAL_MACHINE\System\CurrentC ontrolSet\Services).<br>
          schau dir am besten mal die bereitgestellten service-funktionen an:<br>
          http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/service_functions.asp<br>
          anscheinend hat man hier die moeglichkeit den account anzugeben.<br>
          ob es eine einfachere loesung gibt, weiss ich nicht, ist fuer mich auch neuland.<p>
          gruss ro

          Comment


          • #6
            hi Sebastian,<p>
            mit dem window-handle kann man noch eine menge anfangen.<br>
            man koennte die child-windows ermitteln (buttons, edits, usw).<br>
            und man kann auch messages an sie verschicken.<br>
            das ist noch laengst nicht alles, mehr will ich aber dazu nicht sagen.<br>
            dafuer sind gute winapi-kenntnisse und kenntnisse des message-handling's in winanwendungen noetig.<br>
            aber um herauszufinden, ob ein bestimmtes programm laeuft, sollte das erstmal reichen.<p>
            gruss ro

            Comment


            • #7
              ok th

              Comment


              • #8
                Hallo Sebastian,

                "deklarieren" wirst Du Deinen Prozess nicht als System können. Dieses Prozesse werden vom System ausgeführt. Das sind in der Regel Dienste, die gestartet wurden.
                Wenn ich mich nicht irre, gibt keine Möglichkeit, seinen eigenen Prozess vorm "Abschiessen" durch den Taskmanager zu schützen, es sei denn er läuft als Dienst.

                Gruß
                Michae

                Comment


                • #9
                  Hi<p>Und wie kann man ein Programm als Dienst laufen lassen? Und zwar so, das es sich selbst einträgt und der User das nicht erst umständlich selbst über den Dienste-Manager machen muss?<p>cu, Heinz

                  Comment

                  Working...
                  X