Announcement

Collapse
No announcement yet.

handle-problem

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

  • handle-problem

    hallo,

    ich will das handle einer anwendung speichern, <br>
    aber es klappt nicht, wißt ihr wieso?

    mit folgenden befehlen erstelle ich eine liste aller tasks:<br>

    function EnumWindProc(Wnd: HWND; i: Integer): Boolean; stdcall;<br>
    const<br>
    cLENGTH = 199;<br>
    var<br>
    szTitel : array[0..cLENGTH] of Char;<br>
    begin<br>
    GetWindowText(wnd, szTitel, cLENGTH);<br>
    if sztitel <> '' then task.ListBox1.Items.Add(szTitel); //Alle Titel<br>
    werden in ListBox1 gespeichert<br>
    Result := True;<br>
    end;<br>

    procedure TTask.FormCreate(Sender: TObject);<br>
    begin<br>
    ListBox1.Clear;<br>
    EnumWindows(@EnumWindProc,0);<br>

    end;<br>

    mit nachstehendem code versuche ich von der angeklickten task in der listbox
    das handle herauszufinden, aber es kommt meistens null raus!<br>

    procedure TTask.ListBox1Click(Sender: TObject);<br>
    const<br>
    cLENGTH = 199;<br>
    var<br>
    szTitel : pChar;<br>

    begin<br>
    sztitel := pchar(listbox1.Items[ListBox1.itemindex]);<br>
    //GetWindowText(taskhandle,pchar(stitel) , cLENGTH);<br>
    taskhandle:=findwindow(sztitel,Nil);<br>
    end;<br>

    wißt ihr wo der fehler ist?<br>

    gruß

    markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo Markus, Du mußt die beiden Aufrufparameter vertauschen. Der erste ist der ClassName, der zweite der Fenstertitel. ClassName ist Dir unbekannt, aber den Fenstertitel hast Du. Also:

    taskhandle:=findwindow(Nil,sztitel);

    Gruß - Günthe
    Günther

    Comment


    • #3
      hallo günther habe es heute morgen kurz probiert aber hat auch nichts geholfen! kann doch nicht so schwierig sein ein fensterhandle zu speichern, damit man mit setactivewindow es immer wieder aktivieren kann!!

      gruß

      marku
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment


      • #4
        ne andere idee:<br>

        taskhandle ist vom typ integer!! kann das der fehler sein?<br>
        muss das vom typ tpoint sein?<br>

        gruß

        marku
        Herzliche Grüße

        Markus Lemcke
        barrierefreies Webdesign

        Comment


        • #5
          taskhandle muß vom Typ HWND sein ! Versuch mal:
          <pre>
          taskhandle:=findwindow(Nil,sztitel);
          ShowWindow(taskhandle,SW_SHOWNORMAL);
          BringWindowToTop(taskhandle);
          </pre>
          Wenn das nicht funktioniert, dann solttest Du mal den Debugger bemühen, und nachschauen ob taskhandle ungleich Nil ist. "taskhandle" ist zwar ein irreführender Bezeichner, aber das ist ja egal. Gruß - Günthe
          Günther

          Comment


          • #6
            mache ich am wochenende. danke
            Herzliche Grüße

            Markus Lemcke
            barrierefreies Webdesign

            Comment


            • #7
              Hallo Markus,<br>versuch's doch mal so:<br>
              <pre><font size="1" face="Verdana">
              unit Unit1;

              interface

              uses
              Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
              StdCtrls;

              type
              TForm1 = class(TForm)
              ListBox1: TListBox;
              procedure FormCreate(Sender: TObject);
              procedure ListBox1Click(Sender: TObject);
              private
              { Private-Deklarationen }
              public
              { Public-Deklarationen }
              end;

              var
              Form1: TForm1;

              implementation

              {$R *.DFM}

              function EnumWindProc(Wnd: HWND; i: Integer): Boolean; stdcall;
              const
              cLENGTH = 199;
              var
              szTitel : array[0..cLENGTH] of Char;
              begin
              // +1 weil das Array[0..199] 200 Elemente enthalten kann
              GetWindowText(wnd, szTitel, cLENGTH+1);
              if sztitel <> '' then
              //Alle Titel werden in ListBox1 gespeichert
              // Zusätzlich wird in der Objects Eigenschaft das Handle gespeichert
              Form1.ListBox1.Items.AddObject(szTitel,TObject(Wnd ));
              Result := True;
              end;

              procedure TForm1.FormCreate(Sender: TObject);
              begin
              ListBox1.Clear;
              EnumWindows(@EnumWindProc,0);
              end;

              procedure TForm1.ListBox1Click(Sender: TObject);
              const
              cLENGTH = 199;
              var
              sztitel : Array[0..cLENGTH] of Char;
              aHandle : HWnd;
              taskhandle : HWnd;
              begin
              StrPCopy(sztitel,listbox1.Items[ListBox1.itemindex]);
              // Jetzt das Handle aus der Objects Eigenschaft holen
              aHandle:=Integer(listbox1.Items.Objects[ListBox1.itemindex]);
              GetWindowText(ahandle,sztitel, cLENGTH+1);
              taskhandle:=findwindow(Nil,sztitel);
              ShowMessage('TaskHandle='+IntToStr(TaskHandle));
              end;

              end.
              </font></pre><br>:-) Jens Schuman

              Comment


              • #8
                tag jens,<br>

                teste ich mal!! ich stell mir auch die frage ob der befehl<br> setactivewindow der richtige ist und nicht setfocus besser wäre!<br>
                da gibt es soviele möglichkeiten! *stöhn*<br>

                gruß

                marku
                Herzliche Grüße

                Markus Lemcke
                barrierefreies Webdesign

                Comment


                • #9
                  Hallo Markus,

                  alle Fragen werden von der Hilfedatei zum <i>Microsoft Platform SDK</i> beantwortet :-)

                  Dort ist auf der Seite für SetActiveWindow von Einschränkungen zu lesen, wobei mit <b>AttachThreadInput</b> bereits ein Mittelchen dafür bereitgestellt wird. Die Suche nach der Zeichenkette "AttachThreadInput" findet hier im Forum einige Beispiele.

                  P.S: Microsoft hat mit Windows 98 die Spielregeln geändert, unter welchen Umständen eine fremdes Fenster aktiviert/deaktiviert werden kann

                  Comment


                  • #10
                    hallo andreas,

                    ....mhm... grummel... die beispiele kapiere ich einfach nicht!!<br>

                    gruß

                    marku
                    Herzliche Grüße

                    Markus Lemcke
                    barrierefreies Webdesign

                    Comment

                    Working...
                    X