Entwickler-Ecke
Sonstiges (Delphi) - Programmlaufzeit Dokumentieren
5M17H - Sa 30.06.07 11:54
Titel: Programmlaufzeit Dokumentieren
HI all.
Schonmal entschuldigung das das Topic -sehr warscheinlich- wieder im falschen Bereich ist.
Wie manch einer eventuell -ich glaube zwar nich aber kann sein- schon auf
meinem Blog [
http://www.oliver.lippert.it] gelesen hat bin ich dabei ein Programm zu schreiben was Dokumentieren soll wie lange ein Programm läuft. Dazu benötige ich die Überschrift vom Programm.
Ich habe schonmal ein Programm geschrieben was den TaskManager beendet. Aber sowas nich.
Prograspezifische sachen lest bitte auf dem Webblog.
Wie komme ich an diese Überschriften. Ich habe schon hier im Forum gesucht aber das was da so kommt -kompletter quellcode z.B.- is mir bischen Kürre und ich weiß nicht ob dass das ist was ich suche.
Würde mich über eure hilfe freuen.
MFG Oli
5M17H - Sa 30.06.07 13:52
Dickes Danke.
Ehrlich gesagt musste ich mir die .pas laden und sie erst ab- und dann umschreiben.
Jetzt listet er schon alle .exe prozesse. Ich glaube jetzt kann ich auf dem alten programm aufsetzen... mal sehen.
Ich melde mcih bei schwierigkeiten.
MFG OLI
[edit]
Jetz habich quasi ne auflistung aller tasts mit den exe dateien.
Wie komme ich jetzt an die Fensternamen, denn die brauche cih für FindWindow, und das heißt ich brauche FindWindow nich weil ich brauche nur die Fensternamen mehr ncih....
ZeitGeist87 - Sa 30.06.07 14:16
Wenn du die EXE-Namen hast, brauchst du doch die Fensternamen nicht mehr..
5M17H - Sa 30.06.07 14:30
FindWindow braucht nicht den exe namen sondern den Fensternamen.
Wie komme ich an den Fensternamen. Brauche ich dazu überhaupt den .exe namen?
elundril - Sa 30.06.07 14:34
du kannst ja auch einfach nachschauen wie lange die Exe rennt oder?? dann hast du die exakte programm lauf zeit. denn es kann sein das das Fenster vom programm nie angezeigt wird.
lg elundril
ZeitGeist87 - Sa 30.06.07 14:35
Du willst doch nur wissen, wie lang ein Programm läuft oder?
also mal Pseudocode
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Timer begin holeAlleAktivenAnwendungen(); VergleicheAnwendung mit Liste() NeuerName = true StarteZeitMessung(NeuerName); NameNichtMehrVorhanden = true SchliesseZeitMessung(NameNichtMehrVorhanden); end; |
LG
Stefan
5M17H - Sa 30.06.07 14:36
Geh ma auch
meinen blog [
http://www.oliver.lippert.it] und schau dir den Aktuellsten post an. Da wirst du sehen was ich noch alles machn will mit dem Programm.
MFG Oli. Danke trotzdem für die Antwort.
ZeitGeist87 - Sa 30.06.07 14:39
5M17H hat folgendes geschrieben: |
Geh ma auch meinen blog [http://www.oliver.lippert.it] und schau dir den Aktuellsten post an. Da wirst du sehen was ich noch alles machn will mit dem Programm.
MFG Oli. Danke trotzdem für die Antwort. |
Check ich ned...
Wenn ich im FireFox Tabbed-Browsing benutz hab ich ständig n neuen Fensternamen, obwohl die EXE die selbe beleibt..
Du solltest deine Theorie mal bissl durchdenken..
5M17H - Sa 30.06.07 15:14
Ja ist ja nich schlim.
Da muss ich mir nochwas überlegen.
Aber bei den anderen bleibt es ja meißtens gleich.
Is ja auch egal. Wie komme ich an den FEnsternamen?
ZeitGeist87 - Sa 30.06.07 16:06
Die folgende Methode verwendet die Systenfunktion EnumWindows. Dabei wird dann die Callback Prozedur mit den entsprechenden Parametern aufgerufen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function EnumWinProc(Wnd: THandle; LParam: LongInt): Boolean; stdcall; var WinCaption : string; Len: integer; begin Result := True; Len := GetWindowTextLength(Wnd); SetLength(WinCaption, Len); GetWindowText(Wnd, PChar(WinCaption), Len+1); if Trim(WinCaption) <> '' then Form1.Listbox1.Items.Add(Format('%.6x : %s', [Wnd, WinCaption])); end;
procedure TForm1.Button1Click(Sender: TObject); begin EnumWindows(@EnumWinProc, 0); end; |
In diesem Fall werden die Informationen in Listbox1 ausgegeben, die sich auf Form1 befinden muss.
Zuerst wird eine 6stellige Hex-Zahl ausgegeben, die das Handle des Fensters darstellt, dann wird der Titel ausgegeben.
Die Ausgabe kann über die Parameter der Funktion Format angepasst werden.
5M17H - Sa 30.06.07 17:24
programm_auflisten.pas - Funktion
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function ProgrammnamenAusgeben(Wnd: THandle; LParam: LongInt): Boolean; stdcall; var Rueck : Boolean; Laenge : Integer; Text : String; begin Rueck := true; laenge := GetWindowTextLength(Wnd); SetLength(Text, laenge); GetWindowText(Wnd, PChar(Text), laenge+1); if trim(Text) <> '' then
result := rueck; end; |
Tja so siehts aus. Was allerdings nicht geht: unter das If irgendwas mit Form1 zu schreiben das kennt er nciht.. warum?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| type TProgramme = class(TObject) private ProzessListe : TStringList; ProgrammListe : TStringList; public constructor Anlegen(anzeigen, anzeigen2 : TMemo); destructor Aufloesen; procedure Erneuern(anzeigen, anzeigen2 : TMemo); end; function ProgrammnamenAusgeben(Wnd: THandle; LParam: LongInt): Boolean; stdcall; |
Anbei nochne frage. Was ist stdcall?
ZeitGeist87 - Sa 30.06.07 17:48
STDLL sagt dir, dass es sich um eine Funktion/Prozedur handelt, die in einer DLL liegt/liegen soll.
Da ich annehme, dass du keine DLL verwendest kannst du das STDCALL einfach weglassen.
Warum er das nicht kennt ist einfach
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| function TForm1.ProgrammnamenAusgeben(Wnd: THandle; LParam: LongInt): Boolean; var Rueck : Boolean; Laenge : Integer; Text : String; begin end; |
LG
Stefan
5M17H - Sa 30.06.07 18:42
programm_auflisten.pas - Funktion
1: 2: 3:
| function ProgrammnamenAusgeben(Wnd: THandle; LParam: LongInt): Boolean; stdcall; var Rueck : Boolean; Laenge : Integer; |
Achte bitte auf den Titel. Die Funktion liegt in einer *.pas Datei.
Von Daher kann ich das ja nicht so machen.
Regan - Sa 30.06.07 18:52
Also ich hab da schonmal ein programm geschrieben. und zwar
das [
http://www.delphi-forum.de/viewtopic.php?t=73349]. Wenn du willst kann ich dir mal ein bisschen code geben.
B2T:
Doch kannst du, indem du die function deklarierst.
Delphi-Quelltext
1: 2:
| public function ProgrammnamenAusgeben(Wnd: THandle; LParam: LongInt): Boolean; stdcall; |
Und schon kannst du von einer anderen Form daraufzugreifen.
5M17H - Sa 30.06.07 19:07
Delphi-Quelltext
1: 2: 3:
| function TProgramme.ProgrammnamenAusgeben(Wnd: THandle; LParam: Integer): Boolean; var Rueck : Boolean; |
So Inzwischen ist es in der klasse TProgramme.
Bringt auchnihts. "Form1.irgendwas.und.egalwas" geht immernoch nicht... 'Nicht deklarierter bezeichner'
ZeitGeist87 - Sa 30.06.07 19:21
5M17H hat folgendes geschrieben: |
programm_auflisten.pas - Funktion 1: 2: 3:
| function ProgrammnamenAusgeben(Wnd: THandle; LParam: LongInt): Boolean; stdcall; var Rueck : Boolean; Laenge : Integer; |
Achte bitte auf den Titel. Die Funktion liegt in einer *.pas Datei.
Von Daher kann ich das ja nicht so machen. |
HÄ????
Ich will ja nich unhöflich oder beleidigend werden, aber was is denn das fürn Schwachsinn?
*.pas kannst du doch ganz normal bearbeiten und und und..
Regan - Sa 30.06.07 20:41
Zeig doch mal ein bisschen Code. Sonst kann man das schwer sagen.
ZeitGeist87 - Sa 30.06.07 20:53
5M17H hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3:
| function TProgramme.ProgrammnamenAusgeben(Wnd: THandle; LParam: Integer): Boolean; var Rueck : Boolean; |
So Inzwischen ist es in der klasse TProgramme.
Bringt auchnihts. "Form1.irgendwas.und.egalwas" geht immernoch nicht... 'Nicht deklarierter bezeichner' |
TFORM1
Regan - Sa 30.06.07 21:02
ZeitGeist87 hat folgendes geschrieben: |
5M17H hat folgendes geschrieben: | Delphi-Quelltext 1: 2: 3:
| function TProgramme.ProgrammnamenAusgeben(Wnd: THandle; LParam: Integer): Boolean; var Rueck : Boolean; |
So Inzwischen ist es in der klasse TProgramme.
Bringt auchnihts. "Form1.irgendwas.und.egalwas" geht immernoch nicht... 'Nicht deklarierter bezeichner' |
TFORM1 |
muss nicht unbedingt sein. es geht auch ohne. hast du die .pas-datei auch in der uses-klausel reingeschrieben? und heißt Form1 wirklich Form1 oder vielleicht TProgramme?
ZeitGeist87 - Sa 30.06.07 21:11
ich kann ne funktion/prozedure deklarieren ohne T?
hmm..sag mal wasn heut los..hab ihr euch heut alle verschworen..wir lassen stefan noch was lernen? :)
Regan - Sa 30.06.07 21:17
das musst du mir mal erklären?
Er hat doch die function mit TProgramme deklariert:
5M17H hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3:
| function TProgramme.ProgrammnamenAusgeben(Wnd: THandle; LParam: Integer): Boolean; var Rueck : Boolean; | So Inzwischen ist es in der klasse TProgramme. Bringt auchnihts. "Form1.irgendwas.und.egalwas" geht immernoch nicht... 'Nicht deklarierter bezeichner'
|
Und oben wird er die so deklariert haben:
Delphi-Quelltext
1: 2: 3: 4:
| TProgramme=Class public function ProgrammnamenAusgeben(Wnd: THandle; LParam: LongInt): Boolean; |
Nur ruft er die Form1 auf. Vielleicht heißt die Form1 gar nicht Form1, weil er sie in Programme umbenannt hat. Vielleicht hat er auch gar keine Form1 und nur eine .pas-datei, dann brauch er einen Constructor und einen Destructor (nicht unbedingt). Vielleicht hat er auch einfach die .pas-datei nicht in die uses reingschrieben, aber dann würde es delphi automatisch hinzufügen.
ZeitGeist87 - Sa 30.06.07 21:38
Regan hat folgendes geschrieben: |
das musst du mir mal erklären?
Er hat doch die function mit TProgramme deklariert:
5M17H hat folgendes geschrieben: | Delphi-Quelltext 1: 2: 3:
| function TProgramme.ProgrammnamenAusgeben(Wnd: THandle; LParam: Integer): Boolean; var Rueck : Boolean; |
So Inzwischen ist es in der klasse TProgramme.
Bringt auchnihts. "Form1.irgendwas.und.egalwas" geht immernoch nicht... 'Nicht deklarierter bezeichner'
|
Und oben wird er die so deklariert haben:
Delphi-Quelltext 1: 2: 3: 4:
| TProgramme=Class public function ProgrammnamenAusgeben(Wnd: THandle; LParam: LongInt): Boolean; |
Nur ruft er die Form1 auf. Vielleicht heißt die Form1 gar nicht Form1, weil er sie in Programme umbenannt hat. Vielleicht hat er auch gar keine Form1 und nur eine .pas-datei, dann brauch er einen Constructor und einen Destructor (nicht unbedingt). Vielleicht hat er auch einfach die .pas-datei nicht in die uses reingschrieben, aber dann würde es delphi automatisch hinzufügen. |
mein Kommentar war positiv gemeint :)
5M17H - Sa 30.06.07 23:43
Programme_Auflisten.pas
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76:
| unit programme_auflisten;
interface
uses TlHelp32, Classes, StdCtrls;
type TProgramme = class(TObject) private ProzessListe : TStringList; ProgrammListe : TStringList; public constructor Anlegen(anzeigen, anzeigen2 : TMemo); destructor Aufloesen; procedure Erneuern(anzeigen, anzeigen2 : TMemo); function ProgrammnamenAusgeben(Wnd: THandle; LParam: LongInt): Boolean; stdcall; end;
implementation
uses SysUtils, Windows;
constructor TProgramme.Anlegen(anzeigen, anzeigen2 : TMemo); begin ProzessListe := TStringList.Create; ProgrammListe := TStringList.Create; Erneuern(anzeigen, anzeigen2); end;
destructor TProgramme.Aufloesen; begin ProzessListe.Free; end;
procedure TProgramme.Erneuern(anzeigen, anzeigen2 : TMemo); var weiter : boolean; aktFenster : THandle; aktProzess : TProcessEntry32; i: Integer; begin ProzessListe.Clear; aktFenster := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); aktProzess.dwSize := SizeOf(TProcessEntry32); weiter := Process32First(aktFenster, aktProzess); while weiter = true do begin ProzessListe.Add(String(ExtractFileName(aktProzess.szExeFile))); weiter := Process32Next(aktFenster, aktProzess); end; CloseHandle(aktFenster); for I := 0 to ProzessListe.Count - 1 do begin anzeigen.lines.add(ProzessListe[i]); end; end;
function TProgramme.ProgrammnamenAusgeben(Wnd: THandle; LParam: Integer): Boolean; var Rueck : Boolean; Laenge : Integer; Text : String; begin Rueck := true; laenge := GetWindowTextLength(Wnd); SetLength(Text, laenge); GetWindowText(Wnd, PChar(Text), laenge+1); if trim(Text) <> '' then Form1.memo2.lines.add(text); result := rueck; end;
end. |
und das geht nicht. Auchnicht mit TForm1
1: 2:
| if trim(Text) <> '' then Form1.memo2.lines.add(text); |
Prozessdoku.pas (Mit Form)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| unit prozessdoku;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, AppEvnts, ExtCtrls, programme_auflisten;
type
TForm1 = class(TForm) TrayIcon1: TTrayIcon; ApplicationEvents1: TApplicationEvents; Memo1: TMemo; Timer1: TTimer; Memo2: TMemo; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Enabled := True; Timer1.Interval := 15000; Timer1Timer(Sender); end;
procedure TForm1.Timer1Timer(Sender: TObject); var i, FensterName : integer; begin EnumWindows(@TProgramme.ProgrammnamenAusgeben, 0); end;
end. |
[edit]
Es geht aucnicht wenn ich die prozessdoku.pas bei der programme_auflisten.pas einbinde.
'Zirkuläre Unit Referenc'
Regan - So 01.07.07 19:48
Mir scheint als hättest du keine Ahnung vom Erstellen von extra Dateitypen. Also:
Programme_auflosten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99:
| unit programme_auflisten;
interface
uses TlHelp32, Classes, StdCtrls;
type TProgramme = class(TObject) private ProzessListe : TStringList; ProgrammListe : TStringList; anzeigen:TMemo; anzeigen2:TMemo; public constructor Create(anzeigen11, anzeigen12 : TMemo); destructor Destroy; procedure Erneuern; procedure Free; procedure Zeigen; function ProgrammnamenAusgeben(Wnd: THandle; LParam: LongInt): Boolean; stdcall; end;
implementation
uses SysUtils, Windows, prozessdoku;
constructor TProgramme.Create(anzeigen11, anzeigen12 : TMemo); begin inherited Create; ProzessListe := TStringList.Create; ProgrammListe := TStringList.Create; anzeigen:=anzeigen11; anzeigen2:=anzeigen12; Erneuern; end;
destructor TProgramme.Destroy; begin inherited Destroy; ProzessListe.Free; end;
procedure TProgramme.Free; begin if self<>nil then Destroy; end;
procedure TProgramme.Erneuern; var weiter : boolean; aktFenster : THandle; aktProzess : TProcessEntry32; i: Integer; begin ProzessListe.Clear; aktFenster := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); aktProzess.dwSize := SizeOf(TProcessEntry32); weiter := Process32First(aktFenster, aktProzess); while weiter = true do begin ProzessListe.Add(String(ExtractFileName(aktProzess.szExeFile))); weiter := Process32Next(aktFenster, aktProzess); end; CloseHandle(aktFenster); for I := 0 to ProzessListe.Count - 1 do begin anzeigen.lines.add(ProzessListe[i]); end; end;
function TProgramme.ProgrammnamenAusgeben(Wnd: THandle; LParam: Integer): Boolean; var Rueck : Boolean; Laenge : Integer; Text : String; begin Rueck := true; laenge := GetWindowTextLength(Wnd); SetLength(Text, laenge); GetWindowText(Wnd, PChar(Text), laenge+1); if trim(Text) <> '' then begin anzeigen2.lines.add(text); end; result := rueck; end;
procedure TProgramme.Zeigen; begin anzeigen.Lines.Add('Hallo'); anzeigen2.Lines.Add('Fritz'); end;
end. |
Im folgenden habe ich das TrayIcon und die Application Events entfernt und eine Button hinzugefügt.
prozessdoku
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59:
| unit prozessdoku;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, AppEvnts, ExtCtrls, programme_auflisten;
type
TForm1 = class(TForm) Memo1: TMemo; Timer1: TTimer; Memo2: TMemo; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject);
private Programme:TProgramme; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin Programme.Zeigen; end;
procedure TForm1.FormCreate(Sender: TObject); begin Programme:=TProgramme.Create(Memo1,Memo2); Timer1.Enabled := True; Timer1.Interval := 15000; Timer1Timer(Sender); end;
procedure TForm1.FormDestroy(Sender: TObject); begin Programme.Free; end;
procedure TForm1.Timer1Timer(Sender: TObject); var i, FensterName : integer; begin EnumWindows(@TProgramme.ProgrammnamenAusgeben, 0); end;
end. |
So sollte das eigentlich funktionieren.
OffTopic: Wirst du das Programm auch zum Download anbieten?
5M17H - So 01.07.07 20:28
Ja auf jeden fall. Ich werde wohl ne weile brauchen.. Und ich hoffe ich werde in den nächsten 2 Wochen fertig, denn am 15 gehts für 4 we nach England dann 1tag zu Hause und noch eine Woche weg... Soll heißen. In dieser Zeit kann ich NICHTS machen... ;-)
Ahso morgen werde ich testen ob alles klappt.. Danke für deinen Post.
rizla - So 01.07.07 20:32
5M17H hat folgendes geschrieben: |
Ich werde wohl ne weile brauchen.. Und ich hoffe ich werde in den nächsten 2 Wochen fertig |
du musst dein blog dann noch mal anpassen.
wegen der zeit, zu der du fertig sein willst ;)
:r:
5M17H - Mo 02.07.07 15:40
Programm Titel ausgeben
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function TProgramme.ProgrammnamenAusgeben(Wnd: THandle; LParam: Integer): Boolean; var Laenge : Integer; Text : String; rueck: boolean; begin Rueck := true; laenge := GetWindowTextLength(Wnd); SetLength(Text, laenge); GetWindowText(Wnd, PChar(Text), laenge+1); if trim(Text) <> '' then form1.memo2.lines.add(text); result := rueck; end; |
Auslöser
1: 2: 3: 4: 5:
| procedure TForm1.Timer1Timer(Sender: TObject); begin TProgramme.Anlegen(memo1); EnumWindows(@TProgramme.ProgrammnamenAusgeben,0); end; |
Leider geht 'TProgramme.ProgrammnamenAusgeben' inner das gleiche durch, wnd is quasi immer der gleiche wert und erfüllt nicht die bedingung im if. So bekomme ich nie was ins Memo2.
Ahso diese Funktion habe ich mit mienem Lehrer ausgearbeitet... Also ist sie an sich richtig, nur wie bestimme ich wnd?
Regan - Mo 02.07.07 17:33
Neue Frage:= Neues Thread.
5M17H - Mo 02.07.07 17:52
Geht ums gleiche Thema... "Programmlaufzeit Dokumentieren" und das gehört wohl dazu ;-)
Regan - Mo 02.07.07 18:11
Wie mans nimmt. B2T: Ich weiß zwar nichtm warum du an wnd kommen willst. Ich in meinem Programm überprüfe mit einem Timer einfach nur ob eine exe läuft und wenn ja dann erhöhe ich den zähler um eins. warum willst du noch wnd haben?
5M17H - Mo 02.07.07 18:23
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function TProgramme.ProgrammnamenAusgeben(Wnd: THandle; LParam: Integer): Boolean; var Laenge : Integer; Text : String; rueck: boolean; begin Rueck := true; laenge := GetWindowTextLength(Wnd); SetLength(Text, laenge); GetWindowText(Wnd, PChar(Text), laenge+1); if trim(Text) <> '' then form1.memo2.lines.add(text); result := rueck; end; |
Das erhöht keinen zähler oder? Diese Funktion soll in ein Memo alle Fenstertitel schreiben.. Also muss ich wnd übergeben, weil mit dem 'aktuellen' wert von memo kann er nichts anzeigen, und der wert wnd verändert sich nie.
Christian S. - Mo 02.07.07 18:59
Nicht alles, was mit Deinem Programm zu tun hat, gehört in einen Thread. Beim Schreiben eines Programmes begegnet man verschiedenen Problemen - und die gehören dann auch in verschiedene Threads -> geschlossen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!