Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm ohne Form (https://www.delphipraxis.net/107926-programm-ohne-form.html)

ddcool 4. Feb 2008 19:16


Programm ohne Form
 
Hallo liebe DPler,

ich habe mal eine Frage. Und zwar möchte ich gerne ein Programm schreiben, dass keine Form besitzt. Ich finde es doof für simple Hintergrundaufgaben eine Form erzeugen zu müssen. Ich schätze mal das ganze realisiere ich irgendwie mit NonVLC. Habe das auch soweit alles hinbekommen. Allerding ist jetzt mein Problem, sobald die Main-Prozedur durchlaufen ist, beendet das Programm, egal ob ein Timer drin ist oder was auch immer. Wie kann ich das umgehen? Wenn ich eine Sichtbare Form habe, funktioniert das ohne Probleme.

Grüße

ddcool

freak4fun 4. Feb 2008 19:32

Re: Programm ohne Form
 
Wie wäre es mit einer Konsolenanwendung? Da hast du auch kein Formular. ;) Wenn dein Programm sich nicht beenden soll, würde ich eine Endlosschleife mit einer best. Abbruchbedingung wählen, wei zB das Drücken einer taste. :)

ddcool 4. Feb 2008 19:43

Re: Programm ohne Form
 
Jo das war auch meine Idee, allerdings möchte ich 1. keine Konsolenanwendung und 2. wüsste ich nicht, was ich in die Schleife schreiben soll, damit das <progy nicht freezed oder 100% cpu verursacht.

Grüße

ddcool

marabu 4. Feb 2008 19:46

Re: Programm ohne Form
 
Hallo,

Hintergrundaufgaben ohne Benutzer-Interaktion? Da könntest du einen Dienst implementieren.

Grüße vom marabu

ddcool 4. Feb 2008 19:57

Re: Programm ohne Form
 
Naja ich zeig euch mal den angedachten Source:

Code:
program Testus;

uses
  BlaFasel;

var
  TermApp: Boolean = False;

{$R *.res}

//------------------------------- MUST HAVE DECLARED ---------------------------

Irgendwelche Prozeduren und Funktionen

//------------------------------- MUST HAVE DECLARED ---------------------------

begin
  Tue das;
  while not TermApp do Tue irgendwas;
end.
while not TermApp do Tue irgendwas;

So der rote Teil soll halt die Endlosschleife sein. Und der Fette teil da drin muss halt was sein, was das Progyy nicht zum freezen bringt und die CPU nicht belastet.

OldGrumpy 4. Feb 2008 20:12

Re: Programm ohne Form
 
Zitat:

Zitat von ddcool
while not TermApp do Tue irgendwas;

So der rote Teil soll halt die Endlosschleife sein. Und der Fette teil da drin muss halt was sein, was das Progyy nicht zum freezen bringt und die CPU nicht belastet.

Wenn der Instruktionsteil die CPU nicht belastet, ist er doch sinnlos und kann gleich komplett samt Schleife wegoptimiert werden :mrgreen:

Vielleicht beschreibst Du mal kurz, was das Programm überhaupt so tun soll?

freak4fun 4. Feb 2008 20:20

Re: Programm ohne Form
 
Delphi-Quellcode:
var
  myTimer: TTimer;
  procedure myOnTimer(Sender: TObject);

...
 
myTimer := TTimer.Create(Self);
  with myTimer do
    begin
      OnTimer := myOnTimer;
      Interval := 1000;
      Activate := True;
    end;

...

procedure TForm1.myOnTimer(Sender: TObject);
begin
  // machwas


  Activate := not TermApp;
  // Irgendwo noch Timer freigeben
end;
Vielleicht hilft das. ;)

MrKnogge 4. Feb 2008 20:26

Re: Programm ohne Form
 
Du kannst dein Programm ja auch im Programmquelltext schreiben (Projekt -> Quelltext anzeigen), und da dann auch einfach deine Form rauslöschen.

Gruß

ddcool 4. Feb 2008 20:40

Re: Programm ohne Form
 
Also zur Funktion. In meinem Beruf bin ich Sycherheitsanalyst. Im ramen eines Projektes möchte ich überprüfen, wie sich ein System verhält, wenn es von Schadsoftware angegriffen wird. Genauer ich möchte analysieren, wie ich einen Keyboard Hook mit speziellen im Netz verfügbaren Tools erkennen und blocken kann. Das ist ja auch schön und gut, jedoch ist es blöd in seiner "Sandbox" jedes mal einen Trojaner aus dem Netz "installieren" zu müssen. Das erzeugt nur unnötig Traffic, und führ unter umständen dazu, dass die Test-VM als Bot missbraucht werden könte. Nicht mein Ziel! Also will ich mir ein Programm mit Keyboard Hook schreiben (der Hook ist kein Problem, ist aber nicht in einer dll ausgelagert, weil das echte schadsoftware meistens auch nicht macht) wlches möglichst real ist. Dazu sollte das Programm natürlich in nonVCL geschrieben sein um:

1. möglichst klein zu sein
2. hat keine schadsoftware eine Form. Wozu auch?!

Soweit so gut. Es ist wirklich nur für testzwecke und ohne kriminelle Hintergründe.

Achso einfach im Programmcode zu schreiben ist ja praktisch nonVCL und mache ich ja schon (siehe den source oben).


Grüße

ddcool

sirius 4. Feb 2008 21:08

Re: Programm ohne Form
 
Aus was wartet denn dein programm. also was ist der Auslöser, damit es beendet wird.
Normalerweise brauchst du eine Messageschleife à la
Delphi-Quellcode:
while getmessage(msg,0,0,0) do dispatchmessage(msg)
Aus der kommst du mit PostQuitMessage heraus.
Jetzt könntest du z.B. einen Timer einbauen.

ddcool 4. Feb 2008 21:19

Re: Programm ohne Form
 
Hmm hast du vielleicht ein Tutorial dafür. Habe jetzt noch nicht so viel Messages gearbeitet. Oder vielleicht ne kleine Erklärung.

Wäre lieb. Grüße

ddcool

Noobinator 4. Feb 2008 21:24

Re: Programm ohne Form
 
mal ne ganz dumme Variante:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.BorderStyle := bsnone;
form1.Color := clblack;
form1.TransparentColor := true;
form1.TransparentColorValue := clblack;
while true do
  begin
     windows.Beep(2000,100);
     sleep(500);
     application.ProcessMessages;
  end;
end;
Edit: mal mit Abbruchbedingung:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var terminate:boolean;
begin
terminate := false;

form1.BorderStyle := bsnone;
form1.Color := clblack;
form1.TransparentColor := true;
form1.TransparentColorValue := clblack;
while not terminate do
  begin
     windows.Beep(2000,100);
     sleep(500);
     application.ProcessMessages;
     if mouse.CursorPos.X = 0 then
     begin
        terminate := true;
        application.Terminate;
     end;
  end;
end;

Blackheart 4. Feb 2008 21:26

Re: Programm ohne Form
 
Zitat:

Zitat von ddcool
Also zur Funktion. In meinem Beruf bin ich Sycherheitsanalyst. Im ramen eines Projektes möchte ich überprüfen, wie sich ein System verhält, wenn es von Schadsoftware angegriffen wird. Genauer ich möchte analysieren, wie ich einen Keyboard Hook mit speziellen im Netz verfügbaren Tools erkennen und blocken kann. Das ist ja auch schön und gut, jedoch ist es blöd in seiner "Sandbox" jedes mal einen Trojaner aus dem Netz "installieren" zu müssen. Das erzeugt nur unnötig Traffic, und führ unter umständen dazu, dass die Test-VM als Bot missbraucht werden könte. Nicht mein Ziel! Also will ich mir ein Programm mit Keyboard Hook schreiben (der Hook ist kein Problem, ist aber nicht in einer dll ausgelagert, weil das echte schadsoftware meistens auch nicht macht) wlches möglichst real ist. Dazu sollte das Programm natürlich in nonVCL geschrieben sein um:

1. möglichst klein zu sein
2. hat keine schadsoftware eine Form. Wozu auch?!

Soweit so gut. Es ist wirklich nur für testzwecke und ohne kriminelle Hintergründe.

Achso einfach im Programmcode zu schreiben ist ja praktisch nonVCL und mache ich ja schon (siehe den source oben).


Grüße

ddcool

Ich glaub davon kein Wort :wink:

sirius 4. Feb 2008 21:30

Re: Programm ohne Form
 
Zitat:

Habe jetzt noch nicht so viel Messages gearbeitet.
:gruebel: Und du willst Trojaner, die mit einem simplen Hook kommen abfangen?
Jedes nonVCL-Programm mit Fenstern braucht das, was ich oben geschrieben habe. Demnach dürftest du das auch in jedem nonVCL-Programm finden.

Was machst du denn nun in deinem Programm? Vielleicht reicht ja auch ein Event aus. Es gibt zig Möglichkeiten. Das muss speziell angepasst werden. Denn eine allgemeine Lösung würde mindestens so groß werden wie die TApplicaton-Klasse.

btw.: Du möchtest nicht zufällig selbst einen Trojaner programmieren und verteilen?

ddcool 4. Feb 2008 21:35

Re: Programm ohne Form
 
Wie gesagt, ich arbeite sonst eigentlich nicht mit nonVCL, weil das nicht so mein ding ist, deswegen kann ich das auch nicht so wirklich gut, jedoch möchte ich möglichst nah an ein Original herankommen. Ich setze ja auch dann lediglich ein Keyboard Hook ohne dann irgendwas abzufangen. Ich frage hier ja auch nicht wie ich einen Trojaner programmiere, sowas gehört beileibe nicht in dieses Board. Jedoch muss man zum analysieren verstehen wie ein Programm arbeitet. Da ich noch in der "Ausbildung" bzw Weiterbildung dazu bin muss ich mich natürlich an die Grundlagen herantasten und dazu zählt halt auch das Programmieren in nonVCL. Deshalb frage damit ich das verstehe mit den Messages, ob jemand ein gute Tutorial kennt.

Danke & Grüße

ddcool


Edit:
Okay ich habe es jetzt mal selbst mit den Messages versucht. Funktioniert wunderbar. Und nein keiner brauch sich jetzt fürchten, dass ein neuer Trojaner im Umlauf ist :-D

OldGrumpy 4. Feb 2008 21:40

Re: Programm ohne Form
 
Bitte verrate uns doch, für welche Firma du arbeitest. ;)

Hobby-Programmierer 4. Feb 2008 21:40

Re: Programm ohne Form
 
Zitat:

Zitat von Blackheart
Ich glaub davon kein Wort :wink:

... ich auch nicht! Zumindest hätte ich gedacht das die SysOp's ihre 'eigenen Trojaner' zum Sicherheitstest einsetzen.

LG Mario

Blackheart 4. Feb 2008 21:42

Re: Programm ohne Form
 
http://www.delphi-treff.de/tutorials.../win32/nonvcl/

ddcool 4. Feb 2008 21:53

Re: Programm ohne Form
 
Wie gesagt ich bin noch in der Weiterbildung. Jedoch werde ich bestimmt keinen gesamten Trojaner programmieren (zumal das ja nach deutschem Strafrecht sowieso verboten ider, selbst Analysetools zu verwenden. Bullshit!), wenn ich nur eine ganz bestimmte sache testen will. Ich habe jetzt aber meine Lösung mit den Messageabfragen hinbekommen. Danke für eure Hilfe.
Komisch dass die Leute einem nie glauben wollen. Aber es ist wirklich nicht für kriminelle zwecke, sonder für einen Test verschiedener Sicherheitssoftware. Resultate kann ich hier gerne veröffentlichen.


Grüße

ddcool

Nuclear-Ping 5. Feb 2008 05:56

Re: Programm ohne Form
 
Ich unterstell dir auch nicht, dass du "lügst" und will dich auch nicht angreifen.
Aber ein "IT-Sicherheitsanalyst", der nicht die grundlegenste Funktionsweise von Windows (Message-Dispatching) kennt? :gruebel:
Da besteht aber viel Weiterbildungsbedarf. :mrgreen:

ddcool 7. Feb 2008 21:20

Re: Programm ohne Form
 
Naja sagen wir mal ich habe schon Ahnugn davon, nur wie ich es in Delphi einsetze wusste ich nicht und deswegen habe ich auch auf die einfachste Art und Weise gefragt. :-D


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