AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi gelöst Text aus Fenster einen andren Anwendugn auslegen
Thema durchsuchen
Ansicht
Themen-Optionen

gelöst Text aus Fenster einen andren Anwendugn auslegen

Ein Thema von Dumpfbacke · begonnen am 23. Jun 2007 · letzter Beitrag vom 3. Jun 2009
Antwort Antwort
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

gelöst Text aus Fenster einen andren Anwendugn auslegen

  Alt 23. Jun 2007, 12:41
Hallo Leute,
ich wollte von meinem Program aus ein Fenster (Dialogbox) auslesen. Der Text im Fenster ist ab einer bestimmten stelle nicht mehr gleich. Es steht dort immer die ID des Datensatzes drin welche ich gene hätte.

Dazu habe ich erst mal versucht das Fenster zu finden

Code:
wnd := Findwindow('#32770', 'Test - gut');
wnd := FindWindowEx(wnd, 0, 'Edit', 'Datzsatz ID : 32768');
Das Fentser wurde gefunden und sogar das "innere" mit dem Text.
Leider ändert sich ja immer die ID und diese möchte ich ja auslesen. Dazu habe ich dieses versucht.

Code:
var
wnd: HWND;
WindowText: array[0..255] of char


wnd := Findwindow('#32770', 'Test - gut');
wnd := FindWindowEx(wnd, 0, 'Edit', nil);
GetWindowsText (wnd, WindowText, 255)
Leider ist kein Text in Windowtext. Die zweite wnd sollte ja beim Fall 1 und 2 immer gleich sein. Das ist nicht so. Aus diesem Grund bekomm ich villeicht keinen Text.

Kann mir jemand hier weiterhelfen



Cu Tanja.
Tanja
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Text aus Fenster einen andren Anwendugn auslegen

  Alt 23. Jun 2007, 13:33
Hallo,

kann es sein, dass es in dem Fenster mehrere Felder gibt? Dann könnte es sein, dass das falsche Fenster ausgelesen wird.
Eventuell könntest du es mal mit MSDN-Library durchsuchenEnumChildWindows versuchen:
Delphi-Quellcode:
function EnumChildProc(wnd: HWND; Lines: TStrings): BOOL; stdcall;
var
  WindowText: array[0..255] of char;
begin
  Result := True;
  windows.GetWindowText(wnd, WindowText, 255);
  Lines.Add(WindowText);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  wnd: HWND;
begin
  wnd := Findwindow('#32770', 'Test - gut');
  if wnd > 0 then
    EnumChildWindows(wnd, @EnumChildProc, Integer(memo1.Lines));
end;
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Text aus Fenster einen andren Anwendugn auslegen

  Alt 23. Jun 2007, 13:47
Moin Tanja,

was passiert, wenn Du das hier

Delphi-Quellcode:
var
  hMain : DWORD;
  hSub : DWORD;
  iLen : integer;
  pText : PChar;

begin
  hMain := FindWindow('#32770','Test - gut');
  if hMain = 0 then begin
    ShowMessage('Meldung nicht gefunden'#13#10+
                 SysErrorMessage(GetLastError));
    Exit;
  end;
  hSub := FindWindowEx(hMain,0,'EDIT',nil);
  if hMain = 0 then begin
    ShowMessage('Inhalt nicht gefunden'#13#10+
                 SysErrorMessage(GetLastError));
    Exit;
  end;
  iLen := SendMessage(hSub,WM_GETTEXTLENGTH,0,0)+1;
  if iLen = 0 then begin
    ShowMessage('Kein Inhalt');
    Exit;
  end;
  pText := AllocMem(iLen);
  try
    if SendMessage(hSub,WM_GETTEXT,wParam(iLen),lParam(pText)) = 0 then begin
      ShowMessage('0 Zeichen kopiert');
    end else begin
      ShowMessage(pText);
    end;
  finally
    FreeMem(pText,iLen);
  end;
end;
verwendest?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Text aus Fenster einen andren Anwendugn auslegen

  Alt 24. Jun 2007, 11:35
Zitat von Christian Seehase:
Moin Tanja,

was passiert, wenn Du das hier


verwendest?
Danke Christian es geht super mit dem Code.

Tanja
Tanja
  Mit Zitat antworten Zitat
michback

Registriert seit: 23. Nov 2007
35 Beiträge
 
#5

Re: gelöst Text aus Fenster einen andren Anwendugn auslegen

  Alt 3. Jun 2009, 15:51
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  hMain : DWORD;
  hSub : DWORD;
  iLen : integer;
  pText : PChar;

begin
  hMain := FindWindow(NIL,'meineeiner');
  if hMain = 0 then begin
    ShowMessage('Meldung nicht gefunden'#13#10+
                 SysErrorMessage(GetLastError));
    Exit;
  end;
  hSub := FindWindowEx(hMain,0,'EDIT',nil);
  if hMain = 0 then begin
    ShowMessage('Inhalt nicht gefunden'#13#10+
                 SysErrorMessage(GetLastError));
    Exit;
  end;
  iLen := SendMessage(hSub,WM_GETTEXTLENGTH,0,0)+1;
  if iLen = 0 then begin
    ShowMessage('Kein Inhalt');
    Exit;
  end;
  pText := AllocMem(iLen);
  try
    if SendMessage(hSub,WM_GETTEXT,wParam(iLen),lParam(pText)) = 0 then begin
      ShowMessage('0 Zeichen kopiert');
    end else begin
      ShowMessage(pText);
    end;
  finally
    FreeMem(pText,iLen);
  end;
end;
Dies Funktioniert mit normnalen Programmen super. Leider habe ich ein Zeichen Problem. Das Fester was ich auslesen will heist:


'meineeiner'successfully saved"


Die Striche kann ich ja bei der Fensterbezeichnung nicht eingeben da streik delphi. Muss ich das über ASCII Codes eledigen. Weil so hat es bei mir nicht funktioniert.

hMain := FindWindow(NIL,chr(039)+'meineeiner'+chr(039)+' successfully saved'+chr(034));
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: gelöst Text aus Fenster einen andren Anwendugn auslegen

  Alt 3. Jun 2009, 16:01
Dein Problem hat absolut nichts mit dem ursprünglichen Threadinhalt zu tun! Hochkommata in Strings musst du in Delphi verdoppeln, also beispielsweise '''' für ein einfaches Hochkomma. Übrigens ist "hat nicht funktioniert" keine Fehlermeldung.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
michback

Registriert seit: 23. Nov 2007
35 Beiträge
 
#7

Re: gelöst Text aus Fenster einen andren Anwendugn auslegen

  Alt 3. Jun 2009, 16:04
Zitat von Apollonius:
Dein Problem hat absolut nichts mit dem ursprünglichen Threadinhalt zu tun! Hochkommata in Strings musst du in Delphi verdoppeln, also beispielsweise '''' für ein einfaches Hochkomma. Übrigens ist "hat nicht funktioniert" keine Fehlermeldung.

Danke für die Hilfe. Es bezog sich auf die oben genante Lösung. Und hat nich funktioniert meint Das Fenster wurde nicht gefunden.


Gelöst: Das Fenster wurde gefunden wie oben im meinen Post geschrieben. Es ligt daran das die Zeichen nich ausgelesen werden können.
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz