Announcement

Collapse
No announcement yet.

WM_GETTEXT

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

  • WM_GETTEXT

    Hallo.

    Ich habe die Routine Gettext so abgefasst:

    Result := '';
    BuffLen := 50;
    if (BuffLen > 0) then begin
    GetMem(PBuffer, BuffLen + 1);
    try
    FillChar(PBuffer^, BuffLen + 1, #0);
    if SendMessage(aHandle,wm_gettext, BuffLen,pBuffer) > 0) then begin
    Result := StrPas(PBuffer);
    end;
    finally
    FreeMem(Pbuffer, BuffLen + 1);
    end;
    end;

    Irgendetwas (oder auch alles) an dieser Geschichte ist faul. Ich weiß leider nur nicht was!

    Ich hoffe auf Hilfe.
    Danke, Dominik.

  • #2
    Hallo,

    die abzuarbeitenden Schritte lassen sich so beschreiben: <br>
    1. Textlänge vorher über WM_GETTEXTLENGTH ermitteln <br>
    2. Speicherbereich für PChar-Variable anfordern, der die Grösse Länge + 1 (NULL-Zeichen inklusive) hat. <br>
    3. Text über WM_GETTEXT abholen <br>
    4. PChar-Inhalt direkt an den String-Rückgabewert zuweisen.

    Mit Delphi 5 sieht das folgendermassen aus:
    <pre>
    function GetWinText(aHandle: HWND): String;
    var
    iBuffLen : Integer;
    pBuffer : PChar;
    begin
    iBuffLen := SendMessage(aHandle, WM_GETTEXTLENGTH, 0, 0);
    if iBuffLen > 0 then
    begin
    Inc(iBuffLen);
    GetMem(pBuffer, iBuffLen);
    try
    SendMessage(aHandle, WM_GETTEXT, iBuffLen, LPARAM(pBuffer));
    Result := pBuffer;
    finally
    FreeMem(pBuffer);
    end
    end
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ShowMessage(GetWinText(Edit1.Handle));
    end;
    </pre&gt

    Comment


    • #3
      Vielen Dank. Ich glaube, ich werde mir in den nächsten Tagen ihr Buch kaufen

      Comment

      Working...
      X