AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit ENumWindows

Ein Thema von Anthauri · begonnen am 7. Mär 2010 · letzter Beitrag vom 7. Mär 2010
Antwort Antwort
Anthauri

Registriert seit: 1. Feb 2004
61 Beiträge
 
Delphi 6 Personal
 
#1

Problem mit ENumWindows

  Alt 7. Mär 2010, 17:26
Hallo zusammen,
ich habe diverse Beiträge zum ENumWindows durchforstet, konnte mein Problem aber nicht lösen.

Aus meinem Programm heraus will ich erfahren, ob eine bestimmte Exe noch läuft, deren Name ich kenne und darauf reagieren.
Dafür habe ich eine Funktion angelegt:

Delphi-Quellcode:
function FindApp(AWindow: HWND) : boolean; stdcall;
var Buffer: PChar;
begin
  GetWindowText(AWindow, Buffer, 255);
  Result := True;
  memo1.lines.add(buffer);
end;
Testweise werden hier im Memo die laufenden Applikationen angezeigt. Hier plane ich die Zeilen nach dem gesuchten Namen zu untersuchen.

Der Aufruf erfolgt aus eine Prozedur so:
   EnumWindows(@FindApp,0); Die folgenden (mir nicht erklärbaren) Dinge passieren:

1.) Normalerweise werden die eingegebenen Codes ja vervollständigt.
Als ich bei der Funktion die Zeile geschrieben habe, die das Memo füllt ...MEMO1. <- wurde nichts vorgeschlagen.
Vielmehr meinte der Compiler, dass die Vervollständigung nicht geht, weil Fehler vorliegen.
Wenn ich vor der MEMO1 jedoch FORM1. setzt klappt es.

2.) Die Funktion selbst ist nicht zu Beginn des Programms deklariert.
Wenn ich das mache (etwa so hinter den bestehenden Proceduren):
"function FindApp(AWindow: HWND) : boolean; stdcall;"
Meint der Compiler dass beim Aufruf über "ENumWindows" in der Prozedur etwas fehlt -> "Variable required".

3.) Wenn ich die Deklaration weglasse und das Memo mit Form1.Memo1 anspreche werden die laufenden Apllicationen wirklich ins Memo
geschrieben. Dann wird aber in der Prozedur, die den Aufruf ENumWindows macht beim nächsten Schritt eine Access Violation
ausgelöst. Schalte ich den Schritt mit dem ENumWindos aus laufen die Folgeschritte weiter. Schalte ich die Folgeschritte aus
läuft das ENum sauber.


was mache ich falsch???
wahrscheinlich liegt es an mir...nur wo?

P.S.
Zwischenzeitlich hatte ich auch einen Stand wo beides ging doch da wurden Variablen (Zähler), die nach dem ENum liegen einfach mit Null gefüllt obwohl diese in der ENum gar nicht verändert wurden. Diesen Stand konnte ich aber nicht reporduzieren.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Problem mit ENumWindows

  Alt 7. Mär 2010, 17:48
laut MSDN muss die EnumWindowsProc wie folgt aussehen:
Code:
BOOL CALLBACK EnumWindowsProc(     
    HWND hwnd,
    LPARAM lParam
);
Bei dir fehlt also der LParam und Boolean ist auch nicht das gleiche wie BOOL.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Anthauri

Registriert seit: 1. Feb 2004
61 Beiträge
 
Delphi 6 Personal
 
#3

Re: Problem mit ENumWindows

  Alt 7. Mär 2010, 17:58
Aha !?
Ich habe das Boolean gegen Bool getauscht. (Wo ist der Unterschied?)
Wirklich geändert hat das aber nichts.

Was das LParam angeht, so habe ich Beispiele gefunden, wo der Aufruf so erfolgte.

Die muss ich das angeben und versorgen?
(Ich dachte das ",0" hinter dem HWND würde hier reichen.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Problem mit ENumWindows

  Alt 7. Mär 2010, 18:01
Deine Funktion muss so aussehen:
function FindApp(AWindow: HWND; lparam: LPARM) : Bool; stdcall; Der Aufruf ist schon richtig.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Anthauri

Registriert seit: 1. Feb 2004
61 Beiträge
 
Delphi 6 Personal
 
#5

Re: Problem mit ENumWindows

  Alt 7. Mär 2010, 18:37
Muss ich das LPARM irgendwo deklarieren oder wird eine Unit dafür gebraucht?

Der Compiler sagt nun: Undeclared Identifier LPARM
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#6

Re: Problem mit ENumWindows

  Alt 7. Mär 2010, 18:43
Das Teil heißt glaube ich "LPARAM" und ist in der Unit Windows oder Messages.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Problem mit ENumWindows

  Alt 7. Mär 2010, 19:14
genau, ich hatte mich bei meinen letzten Post vertippt (einen Buchstaben bei dem Typen vergessen). Bei der C-Declaration aus dem MSDN (Beitrag #2 des Themas) stimmt es jedoch.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Anthauri

Registriert seit: 1. Feb 2004
61 Beiträge
 
Delphi 6 Personal
 
#8

Re: Problem mit ENumWindows

  Alt 7. Mär 2010, 19:20
Danke,
verschwunden sind die Probleme aber nicht.

Wenn ich die Funktion deklariere (hinter den Prozeduren) kommt wieder die Meldung mit der fehlenden Variablen beim Aufruf der ENum.
Ohne Deklaration gehts, aber der Folgebefehl nach der ENum macht eine Access Violation.

Schon komisch.
  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 10:42 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