Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Label einer anderen Anwendung auslesen (https://www.delphipraxis.net/87470-label-einer-anderen-anwendung-auslesen.html)

matashen 1. Mär 2007 07:18


Label einer anderen Anwendung auslesen
 
Hallo zusammen,

ich hab zu meiner Frage schon im Forum und Google gesucht, hab aber nix passendes gefunden.

Folgende Ausgangssituation:

Ein Programm von mir zeigt Arbeitspläne in übersichtlicher Form da.

Auf unseren Arbeitsplätzen läuft ein Arbeitssystem, das mittels einer 16-Tasten Spezialtastatur bedient wird.
Ziel ist es meine Anwendung für die Arbeitsplätze verfügbar machen und die Bedienung komplett mittels der 16 Tasten zu ermöglichen.

Bis jetzt hab ich folgendes bereits Integriert.

Wecheln zu meinem Programm über Hooking
zurückwechseln zum Arbeitsprogramm.
-
Bedienung meiner Anwendung über Tastenfeld

Folgendes Problem hab ich jetzt noch zu lösen:

Die Arbeitspläne sind unter eine ID auf dem Server abgelegt.
Das Arbeitsprogramm bekommt die benötigten Daten mittels eines Datamatrix-Scanners und holt dann alle dazugehörigen Daten vom Server inkl ID des Arbeitsplans.
In einem Feld des Arbeitsprogramms steht dann die ID des Arbeitsplans.

Wie kann ich nun aus diesem Programm die ID "auslesen" damit in meiner Anwendung niemand die ID eintippen muß, sonst müßte ich eine "normale" Tastatur am Arbeitplatz noch anbringen, was ich aber vermeiden möchte.

Meine Idee wäre demnach:
das handle des labels einmalig ermitteln (Kann ja einen Testarbeitslauf mit bekannter ID aufrufen)
den Namen des Labels ermitteln (??? keine Ahnung wie das geht)
zukünftig über den zuvor ermittelten Namen das Label-handle ermitteln und ID auslesen




Ich hoffe ich hab mein Problem deutlich formuliert, und es ist jemand online der mir helfen kann.


:coder2:

dominikkv 1. Mär 2007 07:27

Re: Label einer anderen Anwendung auslesen
 
du musst jedesmal das handle ermitteln und dann den text auslesen...
heut mittag nach der schule kann ichs dir erklären^^
schau dir mal das programm WinSpy an

dominikkv 1. Mär 2007 13:20

Re: Label einer anderen Anwendung auslesen
 
ok
mit WinSpy kannst du dir einen source-code für delphi zusammenstellen lassen der dir das Handle von deinem Label zurückgibt.
dazu einfach winSpy starten, "Fenster auswählen" auswählen und auf dein programm klicken wo das label drinne ist.
jetzt werden dir alle komponenten in deinem programm gezeigt...dort einfach das label aussuchen und oben auf "Code" klicken.
am schluss hast du dann in der variablen wnd das handle vom label.
und dann holst du dir einfach den text:
Delphi-Quellcode:
   
function FindWindowEx2(hParent: HWND; ChildClassName: string; ChildNr: Word): HWND;
var
  i: Word;
  hChild: HWND;
begin
  hChild := 0;
  Result := 0;
  ChildNr := ChildNr - 1;
  for i := 0 to ChildNr do
  begin
    hChild := FindWindowEx(hParent, hChild, PChar(ChildClassName), nil);
    if hChild = 0 then
      Exit;
    Result := hChild;
  end;
end;

function GetText: String;
var
  wnd: HWND;
  len: Integer;
  s: String;
begin
  wnd := FindWindow('bla','bla');       // anpassen!
  wnd := FindWindowEx2(wnd,'TLabel', 3); // anpassen!
  //...
  if wnd <> 0 then
  begin
    len := SendMessage(wnd, WM_GETTEXTLENGTH, 0, 0);
    SetLength(s, len);
    SendMessage(wnd, WM_GETTEXT, len + 1, Integer(@s[1]));
  end;
  result := s;
end.

matashen 1. Mär 2007 13:41

Re: Label einer anderen Anwendung auslesen
 
OK den WinSpy hab ich mir schon angesehen, aber leider zeigt der mir keine TLabel an, alles andere des Fensters schon.

Der Code sieht aber auch verflixt gut aus. Werd testen ob mich das weiter bringt.

Mich würde aber trotzdem interessieren warum WinSpy keine TLabel anzeigt

Kann mir das jemand erklären ?

Rastaman 1. Mär 2007 14:02

Re: Label einer anderen Anwendung auslesen
 
Weil n Label kein Fenster hat.
Der Text wird nur aufs Hauptfenster gezeichnet. Is deswegen auch (so gut wie) unmöglich auszulesn.

dominikkv 1. Mär 2007 14:10

Re: Label einer anderen Anwendung auslesen
 
Zitat:

Zitat von Rastaman
Weil n Label kein Fenster hat.
Der Text wird nur aufs Hauptfenster gezeichnet. Is deswegen auch (so gut wie) unmöglich auszulesn.

ohh...hab ich net gewusst :cyclops:

Namenloser 1. Mär 2007 14:17

Re: Label einer anderen Anwendung auslesen
 
Indiesem Thread wird versucht, auf ein TImage einer anderen Anwendung zuzugreifen. Vielleicht hilft dir das ja weiter.

sirius 1. Mär 2007 14:30

Re: Label einer anderen Anwendung auslesen
 
Zitat:

Zitat von NamenLozer
Indiesem Thread wird versucht, auf ein TImage einer anderen Anwendung zuzugreifen. Vielleicht hilft dir das ja weiter.

Ja, wir versuchen alles :mrgreen: . Derzeit sind wir dabei ein Label zu lesen. Im Prinzip funktioniert es auch, wenn man ein Programm hat, was mit D7 programmiert wurde (bzw. D2006 geht anscheinend auch)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 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