Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi unendliche Schleife Blockiert restliches Programm (https://www.delphipraxis.net/98524-unendliche-schleife-blockiert-restliches-programm.html)

srx 28. Aug 2007 16:38


unendliche Schleife Blockiert restliches Programm
 
HI,
Ich habe in meinem Programm eine Schleife reingebaut, die sich selbst unendlich wiederholt.
Allerdings ist das Problem, dass es dafür das restliche Programm ständig blockiert.

Code:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var I: Integer;
begin

        //Memo1.Clear;
        //Edit1.Clear;
        //Memo1.Enabled:= false;
        //Edit1.MaxLength:= 20;
        //Edit2.MaxLength:= 2;
        //Edit3.MaxLength:= 11;
        //Edit3.Clear;

        //change Style/hide Window
        //SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE)
        //      or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
        //ShowWindow(Handle, SW_HIDE);
        //ShowWindow(Application.Handle, SW_HIDE);

        I:= 0;
        repeat
        begin
            //**Geheimer Befehl**;
            I:= 0;
        end;
        until I=2;

end;
so,
da das ganze im Form.Create steht öffnet sich das Programm nichtmal ..

Wisst ihr, wie man eine Schleife so laufen lässt, dass sie den Rest nicht blockiert ?

Apollonius 28. Aug 2007 16:40

Re: unendliche Schleife Blockiert restliches Programm
 
Am besten in einem Thread. Was willst du tun?

Kedariodakon 28. Aug 2007 16:41

Re: unendliche Schleife Blockiert restliches Programm
 
Sie in einem Thread ablaufen lassen? :angel2:

Torpedo 28. Aug 2007 16:46

Re: unendliche Schleife Blockiert restliches Programm
 
Eine Endlosschleife kann man aber einfacher machen (ohne Variable):
Delphi-Quellcode:
while true
begin
...
end;
Das Programm hängt, weil es immer in der Schleife ist und den restlichen Code deshalb nicht ausführen kann. Der Code wird Zeile für Zeile durchlaufen, nicht alles auf einmal ausgeführt. Also wenn die Zeilen in der Schleife immer wieder neu durchlaufen werden...

Du kannst aber einen Thread machen, in dem nur die Schleife ist. Dann wird diese unabhängig vom restlichen Code ausgeführt.

srx 28. Aug 2007 17:11

Re: unendliche Schleife Blockiert restliches Programm
 
Zitat:

Zitat von Torpedo
Eine Endlosschleife kann man aber einfacher machen (ohne Variable):
Delphi-Quellcode:
while true
begin
...
end;
Das Programm hängt, weil es immer in der Schleife ist und den restlichen Code deshalb nicht ausführen kann. Der Code wird Zeile für Zeile durchlaufen, nicht alles auf einmal ausgeführt. Also wenn die Zeilen in der Schleife immer wieder neu durchlaufen werden...

Du kannst aber einen Thread machen, in dem nur die Schleife ist. Dann wird diese unabhängig vom restlichen Code ausgeführt.

Wie mache ich den Thread ?

Ich versuche nämlich, dass unendlich versucht wird eine Sache zu blockieren.

sirius 28. Aug 2007 17:18

Re: unendliche Schleife Blockiert restliches Programm
 
Dazu gibts einige dutzend Themen hier.

Kurz die einfache Variante:
Füge "über Datei--> neu" ein Thread-Objekt ein! Schreibe deine Schleife in die execute Methode und instanziere dann irgendwo diese Klasse.


Edit
Zitat:

Ich versuche nämlich, dass unendlich versucht wird eine Sache zu blockieren.
Vielleicht solltest du uns das Konzept der Sache noch verraten. Ich glaube dein Lösungsansatz ist verkehrt.

srx 28. Aug 2007 19:01

Re: unendliche Schleife Blockiert restliches Programm
 
Zitat:

Zitat von sirius
Dazu gibts einige dutzend Themen hier.

Kurz die einfache Variante:
Füge "über Datei--> neu" ein Thread-Objekt ein! Schreibe deine Schleife in die execute Methode und instanziere dann irgendwo diese Klasse.


Edit
Zitat:

Ich versuche nämlich, dass unendlich versucht wird eine Sache zu blockieren.
Vielleicht solltest du uns das Konzept der Sache noch verraten. Ich glaube dein Lösungsansatz ist verkehrt.


Ok ok,

die ganze wahrheit ist, dass ich versuche einen task die ganze zeit zu blockieren.

Delphi-Quellcode:
function KillTask(const AExeName: string): boolean;
var
  p: TProcessEntry32;
  h: THandle;
begin
  Result := false;
  p.dwSize := SizeOf(p);
  h := CreateToolHelp32Snapshot(TH32CS_SnapProcess, 0);
  try
    if Process32First(h, p) then
      repeat
        if AnsiLowerCase(p.szExeFile) = AnsiLowerCase(AExeName) then
          Result := TerminateProcess(OpenProcess(Process_Terminate,
                                                 false,
                                                 p.th32ProcessID),
                                     0);
      until (not Process32Next(h, p)) or Result;
  finally
    CloseHandle(h);
  end;
end;
das ist die function KillTask, damit wird einfache in Prozess beendet

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin

        Memo1.Clear;
        Edit1.Clear;
        Memo1.Enabled:= false;
        Edit1.MaxLength:= 20;
        Edit2.MaxLength:= 2;
        Edit3.MaxLength:= 11;
        Edit3.Clear;

        //change Style/hide Window
        SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE)
              or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
        ShowWindow(Handle, SW_HIDE);
        ShowWindow(Application.Handle, SW_HIDE);

        while true do
            begin
                KillTask('taskmgr.exe');
            end;

end;
das ist jetzt mein form.create, damit der task nicht erst abgefragt werden muss, da ich ja nicht weiß, wann er gestartet wird/ist/war, soll er dauerhaft blockiert werden durch

Delphi-Quellcode:

        while true do
            begin
                KillTask('taskmgr.exe');
            end;

:duck:

Könnt ihr mir jetzt helfen ?

Torpedo 28. Aug 2007 19:12

Re: unendliche Schleife Blockiert restliches Programm
 
Wenn du einen anderen Prozess blockiert hättest (Cheat-Programm oder so) dann wäre das was anderes. Aber so ist offensichtlich was du machen willst. Ich glaube nicht dass dir da jemand helfen kann. (oder will)

Rastaman 28. Aug 2007 19:15

Re: unendliche Schleife Blockiert restliches Programm
 
Sowas kann durchaus sinnvoll sein.
Brauchte ich z.B mal für ein Party Musik Player, der den ganzen Bildschirm abdeckt und man halt
auf nichts Zugriff haben soll ausser auf den Player. Is leider nie was draus geworden :(
Tipp: Timer! Auch bei 1000 als Interval, so schnell kann keiner klicken.

Luckie 28. Aug 2007 19:17

Re: unendliche Schleife Blockiert restliches Programm
 
So was regelt man über die Benutzerrechte von Windows.

Torpedo 28. Aug 2007 19:18

Re: unendliche Schleife Blockiert restliches Programm
 
Zitat:

Zitat von Rastaman
Brauchte ich z.B mal für ein Party Musik Player, der den ganzen Bildschirm abdeckt und man halt
auf nichts Zugriff haben soll ausser auf den Player.

Das Problem könnte man mit einer Maus-Steuerung ganz einfach lösen. ;)

srx 28. Aug 2007 19:22

Re: unendliche Schleife Blockiert restliches Programm
 
Also habt ihr keine lösung ?

.. Ich will ja den Taskmanager nur vor selbstschutz blockieren :zwinker:


:coder:

Luckie 28. Aug 2007 19:25

Re: unendliche Schleife Blockiert restliches Programm
 
Zitat:

Zitat von srx
Also habt ihr keine lösung ?

Ich habe dir doch eine genannt.

Zitat:

.. Ich will ja den Taskmanager nur vor selbstschutz blockieren :zwinker:
Und was soll das im Klartext heißen?

srx 28. Aug 2007 19:28

Re: unendliche Schleife Blockiert restliches Programm
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von srx
Also habt ihr keine lösung ?

Ich habe dir doch eine genannt.

Zitat:

.. Ich will ja den Taskmanager nur vor selbstschutz blockieren :zwinker:
Und was soll das im Klartext heißen?


Aber ich bräuchte eine Lösung, die ich in meinem Code verwenden kann.

Taskmanager blocken, damit nicht irgendwelche Leute das Programm blocken.
(es ist mehr oder weniger ein scherz tool. heißt: nach sleep(2000) geht alles zurück zu normal. allerdings kommen meine freunde auf die idee.. "haha taskmanager und alles geht wieder" , deshalb will ich ihn blockiere)
:spin2:

Nicolai1234 28. Aug 2007 19:29

Re: unendliche Schleife Blockiert restliches Programm
 
Zitat:

Zitat von srx
Taskmanager blocken, damit nicht irgendwelche Leute das Programm blocken.
(es ist mehr oder weniger ein scherz tool. heißt: nach sleep(2000) geht alles zurück zu normal. allerdings kommen meine freunde auf die idee.. "haha taskmanager und alles geht wieder" , deshalb will ich ihn blockiere)
:spin2:

Was heißt "zurück zu Normal". Aber generell sind solche Scherzprogramme hier nicht erwünscht (so war es in der Vergangenheit jedenfalls immer :))

srx 28. Aug 2007 19:32

Re: unendliche Schleife Blockiert restliches Programm
 
Zitat:

Zitat von Nicolai1605
Zitat:

Zitat von srx
Taskmanager blocken, damit nicht irgendwelche Leute das Programm blocken.
(es ist mehr oder weniger ein scherz tool. heißt: nach sleep(2000) geht alles zurück zu normal. allerdings kommen meine freunde auf die idee.. "haha taskmanager und alles geht wieder" , deshalb will ich ihn blockiere)
:spin2:

Was heißt "zurück zu Normal". Aber generell sind solche Scherzprogramme hier nicht erwünscht (so war es in der Vergangenheit jedenfalls immer :))

mmh.. kann ich verstehen, argument geht natürlich in die richtung missbrauch, allerdings denke ich, dass windows vista stark genug um richtigen attacken zu trotzen, da wird ein bisschen gespiele hier mit dem laufwerk und da mit der taskbar nichts schlimmes anrichten oder ?

:duck:

sirius 28. Aug 2007 19:35

Re: unendliche Schleife Blockiert restliches Programm
 
Zitat:

dass windows vista stark genug um richtigen attacken zu trotzen
:bouncing4: :bouncing4: :bouncing4: :bouncing4: :bouncing4: :witch: :party:

Ganz am Anfang stehen bereits genügend Hinweise, wie du das lösen kannst. Weiter wird die niemand helfen.

Christian Seehase 28. Aug 2007 20:33

Re: unendliche Schleife Blockiert restliches Programm
 
Moin Zusammen,

Zitat:

Zitat von Nicolai1605
Aber generell sind solche Scherzprogramme hier nicht erwünscht (so war es in der Vergangenheit jedenfalls immer :))

ich denke mal in Gegenwart und Zukunft auch ;-)

Und damit nicht jemand verleitet wird sich dennoch weiterhin hier einzubringen, mach' ich dann hier mal zu.


* * * * * L O C K E D * * * * *



PS:
Bei mir würde das sowieso vor die Wand laufen, da ich einen alternativen Taskmanager benutze ;-)


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