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 FindWindow zum 215. Mal (https://www.delphipraxis.net/22687-findwindow-zum-215-mal.html)

MaxMara 21. Mai 2004 15:08


FindWindow zum 215. Mal
 
Hallo!

Ich bin gerade am Verzweifeln.
Ich versuche über ein kleines Updatetool meine "Hauptanwendung" automatisch upzudaten.
Das ganze funktioniert nur dann wenn das Hauptprogramm nicht läuft.
Jetzt versuche ich schon alle möglichen Varianten um das ganze abfragen zu können, nur
gelingt es mir nicht:

Delphi-Quellcode:
  if FindWindow(PChar('AdressenDB.exe'), PChar('Form1')) = 0 then
     Showmessage ('läuft');
Er bringt mir immer 'läuft' auch wenn die App. nicht läuft.

Bitte um Hilfe.

Danke
MaxMara

c113plpbr 21. Mai 2004 15:11

Re: FindWindow zum 215. Mal
 
Wenn FindWindow etwas findet, gibt es das Handle zum fenster zurück (das es gefunden hat), welches dann nicht 0 sein sollte!

ciao, Philipp

Smokey 21. Mai 2004 15:13

Re: FindWindow zum 215. Mal
 
bringt er auch "läuft" wenn die application läuft??

Weil soweit ich informiert bin, gibt die funktion 0 zurück wenn das programm NICHT gefunden wird/läuft
und sonst das handle vom fenster

<edit>und wiedereinmal muss das alter sich der jugend in sachen geschwindigkeit geschlagen geben :wink: </edit>

Luckie 21. Mai 2004 15:26

Re: FindWindow zum 215. Mal
 
Ähm, wenn FindWindow null zurückliefert, dann heißt das es hat nichts gefunden, ansonsten gibt es den fensterhandle zurück. Und kuck dir die Parameter noch mal an. Die Fensterklasse ist bestimmt nicht "AdressDB.exe", sondern wahrscheinlich "TForm1", wenn dein fenster "Form1" heißt.

MaxMara 21. Mai 2004 15:34

Re: FindWindow zum 215. Mal
 
@Luckie:
Er gibt mir immer null zurück - egal ob es läuft oder nicht.
Habe die Fensterklasse jetzt auf TForm1 geändert und das hat auch nichts gebracht.
Wie finde ich denn die richtige Fensterklasse raus?

@Smokey: Ja - immer 0

Luckie 21. Mai 2004 15:49

Re: FindWindow zum 215. Mal
 
Ich sagte doch dass es wohl immer null zurückgibt, weil die Fensterklasse bestimmt nicht "AdressDB.exe" lautet.

Vergiss mal die Fensterklasse und probier es erstmal nur mit dem Titel.

MathiasSimmack 21. Mai 2004 15:50

Re: FindWindow zum 215. Mal
 
Ein eindeutiger Name für die Form ist zu bevorzugen, weil du sonst u.U. das falsche TForm1-Programm beendest. Und dann ist der Klassenname der erste Parameter, der zweite ist der Fenstertitel. Eine Abfrage müsste daher so aussehen:
Delphi-Quellcode:
if findwindow('TForm1',nil) <> 0) then
  ShowMessage('läuft');

The-X 21. Mai 2004 16:12

Re: FindWindow zum 215. Mal
 
Könnte er hier nicht auch mit einem Mutex arbeiten?
Allerdings kann er die Anwenundg dann auch nur einmal starten :roll:

Ansonsten alle Prozesse auflisten und nachsehen ob das Programm läuft
Hier im Forum suchenProzesse AND Auflisten

MathiasSimmack 21. Mai 2004 16:23

Re: FindWindow zum 215. Mal
 
Zitat:

Zitat von The-X
Könnte er hier nicht auch mit einem Mutex arbeiten?

Klar, das geht auch. (Oder ein [dp]"Semaphore"[/dp].) Allerdings weiß er damit erst mal nur, dass das gesuchte Programm aktiv ist. Kicken müsste er es dann doch wieder via findwindow bzw. etwas umständlich über die Prozesse (sprich: durchgehen, nach der Exe suchen, und den Prozess beenden).

Zitat:

Allerdings kann er die Anwenundg dann auch nur einmal starten :roll:
Das muss ja nicht unbedingt ein Nachteil sein.

pizza 21. Mai 2004 16:43

Re: FindWindow zum 215. Mal
 
ich hab gedacht, dass es nicht so geht:
FindWindow('TForm1', nil);
sondern so:
Code:
if
FindWindow(nil, 'Delphi-PRAXIS :: Antwort schreiben - Microsoft Internet Explorer') <> 0 then
ShowMessage('du schreibst gerade eine atwort auf delphi-praxis!');
habs getestet, was ich mir da erdacht habe und es läuft.. ;)

mfg rob :mrgreen:

Luckie 21. Mai 2004 16:46

Re: FindWindow zum 215. Mal
 
Es hat auch niemand das gegenteil behauptet und davon reden wir übrigens die ganze Zeit. :roll:

pizza 21. Mai 2004 16:48

Re: FindWindow zum 215. Mal
 
sry :oops:
hab ich net gemerkt ;) hab das thema nur überflogen und gedacht, dann schreib ich halt schnell mal nen kelienen source..

PS:
MathiasSimmack Verfasst am: 21.05.2004, 16:50 Titel: Re: FindWindow zum 215. Mal
Ein eindeutiger Name für die Form ist zu bevorzugen, weil du sonst u.U. das falsche TForm1-Programm beendest. Und dann ist der Klassenname der erste Parameter, der zweite ist der Fenstertitel. Eine Abfrage müsste daher so aussehen:
stimmt das hier denn?? :
Code:
 
Source:
if findwindow('TForm1',nil) <> 0) then
  ShowMessage('läuft');

toms 21. Mai 2004 16:49

Re: FindWindow zum 215. Mal
 
Zitat:

Ansonsten alle Prozesse auflisten und nachsehen ob das Programm läuft
PROZESSE und AUFLISTEN
Ist eine Möglichkeit. Jedoch geht's doch einfacher mit der FindWindow() Abfrage.

Luckie 21. Mai 2004 16:55

Re: FindWindow zum 215. Mal
 
Zitat:

Zitat von pizza
stimmt das hier denn?? :
Code:
 
Source:
if findwindow('TForm1',nil) <> 0) then
  ShowMessage('läuft');

Probier es aus. Aber als kleinen Tipp sage ich dir schon mal: Es ist ein Fehler in dem Code drin.

pizza 21. Mai 2004 16:57

Re: FindWindow zum 215. Mal
 
also stimmts nicht :mrgreen:
ich bleib dann mal bei meinem FIndWindow(nil, 'dings'); :zwinker:

mfg rob :dancer2:

EDIT: :gruebel: so schnell wie ihr antwortet kann man das forum nicht mehr forum sondern chat nennen :hello:

MaxMara 21. Mai 2004 18:15

Re: FindWindow zum 215. Mal
 
So.
Ich werd mir die ganzen Dinge mal übers Wochenende durch den Kopf gehen lassen und am Montag dann mal ausprobieren.
Ich meld mich dann wieder.

Danke für die vielen Antworten (von denen ich nur 20% verstehe :oops: )

gtx
MaxMara

Pseudemys Nelsoni 21. Mai 2004 18:17

Re: FindWindow zum 215. Mal
 
hat zwar nichts mit dem Thema zu tun, aber egal, ich wollte nur anmerken das du kein typcastin (PChar) machen brauchst wenn du den 'test' direkt angibst

Luckie 21. Mai 2004 18:56

Re: FindWindow zum 215. Mal
 
Zitat:

Zitat von pizza
also stimmts nicht :mrgreen:

Von der Logik her schon und auch was die Parameter angeht. Aber es ist ein syntaktischer Fehler drin.

MathiasSimmack 21. Mai 2004 19:00

Re: FindWindow zum 215. Mal
 
Upps, ja ... Ich gestehe: Ich bin ein "Klammerer". Wenn ich versuche, mich dem Stil anderer Entwickler anzupassen, dann komme ich garantiert mit den Klammern durcheinander. Ich bin´s eben von PHP usw. gewohnt, min. eine Klammer zu setzen. So wär´s richtig:
Delphi-Quellcode:
if findwindow('TForm1',nil) <> 0 then
  ShowMessage('läuft');
oder in "meinem" bevorzugten Stil:
Delphi-Quellcode:
if(findwindow('TForm1',nil) <> 0) then
  ShowMessage('läuft');
;)

toms 21. Mai 2004 20:20

Re: FindWindow zum 215. Mal
 
oder noch schöner so: :wink:

Delphi-Quellcode:
if FindWindow('TForm1', nil) <> 0 then
vs

Delphi-Quellcode:
if findwindow('TForm1',nil) <> 0 then

MathiasSimmack 21. Mai 2004 20:44

Re: FindWindow zum 215. Mal
 
Nein, in der Beziehung bin ich dann doch eigen. :stupid:
Solche Sachen schreibe ich klein.

toms 21. Mai 2004 21:06

Re: FindWindow zum 215. Mal
 
Zitat:

Solche Sachen schreibe ich klein.
Geschmackssache...Aber da halt ich mich lieber an den Microsoft Standard. Sieht auch schöner aus. :)

MaxMara 26. Mai 2004 09:09

Re: FindWindow zum 215. Mal
 
Hallo zusammen!

Danke nochmal für eure Antworten. Habe es jetzt mit:
Delphi-Quellcode:
if findwindow('TForm1',nil) <> 0 then
  ShowMessage('läuft');
gemacht und werde in Zukunft das Hauptform als ersten Schritt immer gleich umbenennen :)

grüsse
MaxMara


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz