Announcement

Collapse
No announcement yet.

schutzverletzung

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

  • schutzverletzung

    hi,

    mit folgender prozedur will ich an den text eines x-beliebigen fensters der unter dem mauszeiger ist, ran kommen:

    <pre>
    procedure TForm1.textholen;
    var
    TempHandle: THandle;
    TempText: PChar;
    P: TPoint;
    begin
    GetCursorPos(P);
    // Handle des Fensters, das den Punkt P enthält
    TempHandle := WindowFromPoint(P);
    if TempHandle <> 0 then
    begin
    // Text Fenstertext holen
    GetWindowText(TempHandle, TempText, 255);
    //Label1.Caption := TempText;
    end;
    end;
    </pre>

    es kommt aber ne schutzverletzung!
    warum?

    gruß

    markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo Markus,

    Deiner Variable Temptext ist kein Speicher zugeordnet.

    <pre>
    procedure TForm1.textholen;
    var
    TempHandle: THandle;
    TempText: PChar;
    P: TPoint;
    const
    cBufferLength: integer = 255;
    begin
    GetCursorPos(P);
    // Handle des Fensters, das den Punkt P enthält
    TempHandle := WindowFromPoint(P);
    if TempHandle <> 0 then
    begin
    // Text Fenstertext holen
    GetMem(TempText, cBufferLength);
    try
    GetWindowText(TempHandle, TempText, cBufferLength);
    Label1.Caption := TempText;
    finally
    FreeMem(TempText);
    end;
    end;
    end;
    </pre>

    Gruß

    Torste

    Comment


    • #3
      hi thorsten,

      warum ist das in dem fall wichtig?
      ist doch ein ganz normaler pchar!

      gruß

      marku
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment


      • #4
        Hallo Markus,

        PChar ist ein Zeiger auf einen Speicherbereich. Dieser Speicherbereich muß vom Programm erst alloziert werden. Normalerweise wird das intern von Delphi übernommen.

        Dazu muß Delphi aber wissen wieviel Speicher benötigt wird. Das kann Delphi aber nur wissen wenn die Wertzuweisung an den PChar auch über Delphi läuft. In Deinem Beispiel erfolgt die Zuweisung aber über eine WIN-API-Funktion.

        Die Funktion erwartet als Übergabeparameter einen Zeiger auf einen allozierten Speicherbereich. In diesen Buffer werden nun die Rückgabedaten geschrieben. Die Angabe über die Größe des Buffers sagt einfach nur wieviele Bytes maximal geschrieben werden dürfen (Stichwort Verhinderung von Schußverletzungen sowie Überschreiben von anderen Datenbereichen(Bufferoverflow)).

        Gruß

        Torste

        Comment


        • #5
          danke torsten!

          jetzt noch ein anderes problem. der code gibt den titel zurück von dem fenster über welchem der mauszeiger schwebt. jetzt möchte ich aber an den text kommen(zum beispiel worddokument ein wort), der unter dem mauszeiger ist.
          geht das überhaupt?

          gruß

          marku
          Herzliche Grüße

          Markus Lemcke
          barrierefreies Webdesign

          Comment


          • #6
            Hallo Markus,

            ich habe keine Ahnung. Aber ich glaube nicht das es dafür einen einfachen Weg gibt.

            Wenn die jeweilige Anwendung den Text in Windows-Controls darstellt könnte es funktionieren. Word verwendet auf jeden Fall keine Windows-Controls.

            Gruß

            Torste

            Comment


            • #7
              okay. danke
              Herzliche Grüße

              Markus Lemcke
              barrierefreies Webdesign

              Comment

              Working...
              X