![]() |
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 |
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. :)
|
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 |
Re: Programm ohne Form
Hallo,
Hintergrundaufgaben ohne Benutzer-Interaktion? Da könntest du einen Dienst implementieren. Grüße vom marabu |
Re: Programm ohne Form
Naja ich zeig euch mal den angedachten Source:
Code:
while not TermApp do Tue irgendwas;
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. 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. |
Re: Programm ohne Form
Zitat:
Vielleicht beschreibst Du mal kurz, was das Programm überhaupt so tun soll? |
Re: Programm ohne Form
Delphi-Quellcode:
Vielleicht hilft das. ;)
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; |
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ß |
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 |
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:
Aus der kommst du mit PostQuitMessage heraus.
while getmessage(msg,0,0,0) do dispatchmessage(msg)
Jetzt könntest du z.B. einen Timer einbauen. |
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 |
Re: Programm ohne Form
mal ne ganz dumme Variante:
Delphi-Quellcode:
Edit: mal mit Abbruchbedingung:
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;
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; |
Re: Programm ohne Form
Zitat:
|
Re: Programm ohne Form
Zitat:
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? |
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 |
Re: Programm ohne Form
Bitte verrate uns doch, für welche Firma du arbeitest. ;)
|
Re: Programm ohne Form
Zitat:
LG Mario |
Re: Programm ohne Form
|
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 |
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: |
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