Entwickler-Ecke

Windows API - Programm im Hintergrund laufen lassen


CarpeDiem - Mi 19.03.08 22:52
Titel: Programm im Hintergrund laufen lassen
Hallo,

auch wenn diese Frage vielleicht schon mal gestellt wurde, ich habe sie hier auf jeden Fall noch nicht gefunden.

Wie kann ich ein Programm im Hintergrund laufen lassen, d.h. ich will es nach dem Anmelden ohne den Ordner "Autostart" starten und auch kein TrayIcon sichtbar machen lassen. Es soll höchstens unter TaskManager->Prozesse sichtbar sein? Wäre toll, wenn es unter Prozesse auch nicht sichtbar wäre.

Hat jemand vielleicht eine Idee?

Danke.

Moderiert von user profile iconChristian S.: Überflüssige Zeilenumbrüche entfernt


Delete - Mi 19.03.08 23:00

Meinst du eventuell einen Service (Dienst)?


CarpeDiem - Mi 19.03.08 23:03

Ich möchte nur ein kleines Programm, das z.B. das Desktop-Hintergrundbild
von Zeit zu Zeit ändert. Aber ich möchte nicht, daß es sichtbar ist.
Es soll nicht abgeschalten werden können.


nagel - Do 20.03.08 00:00

Soweit ich weiß, kann jeder Prozess beendet werden (ausgenommen bestimmte Systemprozesse). Nichtabschaltbarkeit ist also meines Wissens nicht erreichbar, aber da gibt's hier einige Leute, die von diesem Thema weit mehr Ahnung haben.


Yogu - Do 20.03.08 00:00

Hallo,

  1. Projekt > Aus dem Projekt entfernen > Unit 1 > OK > Ja
  2. Ansicht > Units > Project1
  3. Application-Gedöhnz entfernen
  4. Schleife mit Desktophintergrundsänderungsfunktion einfügen
  5. Trayicon [http://www.delphi-treff.de/tipps/applikation/tipp/32/] unterstützen


user profile iconnagel hat folgendes geschrieben:
Nichtabschaltbarkeit ist also meines Wissens nicht erreichbar

Meine Firewall kann das ;) Du musst dein Prozess als Service markieren, dann geht das. Genaueres weiß ich aber nicht.

Grüße,
Yogu


Timosch - Do 20.03.08 01:32

user profile iconYogu hat folgendes geschrieben:

Meine Firewall kann das ;) Du musst dein Prozess als Service markieren, dann geht das. Genaueres weiß ich aber nicht.

Grundsätzlich kann man als Admin auch Dienste beenden (Computerverwaltung). Aber mit meiner Firewall (ZoneAlarm) klappt das tatsächlich nicht. Keine Ahnung wie die das macht, normale Dienste kann ich abschießen.
Aber wenn ich die Computerverwaltung über Tricks als SYSTEM starte, kann ich selbst die Firewall beenden. Also letzten Endes gehts immer irgendwie...


CarpeDiem - Do 20.03.08 05:51

Danke "Yogu",

wenn ich alle Formulare entferne und das Programm direkt in die Haupt-cpp schreibe, dann funktioniert es.


CarpeDiem - Do 20.03.08 08:11

Wie kann ich jetzt mein Programm bei Systemstart starten, ohne daß es jemand bemerkt? Will alle möglichen Fenster und Anzeigen vermeiden, die störend sind.


Delete - Do 20.03.08 10:13

user profile iconstefan.gayr hat folgendes geschrieben:
Wie kann ich jetzt mein Programm bei Systemstart starten, ohne daß es jemand bemerkt? Will alle möglichen Fenster und Anzeigen vermeiden, die störend sind.

Ich dachte, das soll ein Programm zum Wechseln des Desktophintergrundes werden? Warum darf ich das nicht beenden können und warum willst du es hinter dem Rückn des Anwenders unbemerkt starten?


CarpeDiem - Do 20.03.08 11:41

Ich will einfach nicht, daß beim Starten irgendwelche störenden Bilder oder Meldungen auftauchen.


Delete - Do 20.03.08 11:44

Was soll denn angezeigt werden, wenn deine Anwendung kein Fenster hat?


elundril - Do 20.03.08 12:46

gar nix. soll ja nur den hintergrund wechseln. dazu bräuchte man kein fenster. Für die benutzerfreundichkeit würd ich dir aber dazu raten.

Dort sollte dann der Benutzer sachen einstellen können wie: welchem abstand die hintergründe gewechselt werden, aus welchem ordner die bilder kommen sollen, usw.

lg elundril


fusco123 - Do 20.03.08 13:36

Ja Frage bleibt ja dann nur, wie man das Programm als System bzw Service Programm markiert ...
Hat jemand ne Idee ???
Außerdem mit dem Program Process Explorer kann man ALLES beenden, nur stürtzt der Pc bei kritischen Prozessen dann halt ab, aber das wird ja bei deinem Programm net der Fall sein.


CarpeDiem - Do 20.03.08 13:41

Danke fusco123, genau das will ich wissen.


Yogu - Do 20.03.08 13:57

Ich glaube, hier besteht noch die Frage, wie man Services macht...

... schau mal hier [http://www.delphi-treff.de/tipps/applikation/tipp/156/] nach.


Xentar - Do 20.03.08 14:21

Ich versteh nicht, wie man so hinterher sein kann, ein simples "Desktophintergundbild-wechsel-programm" so stark abzusichern / zu verstecken..
- Man darf kein Fenster sehen: Ok, kann ich verstehen. Wobei mir persönlich ja ein Fesnter, wo man einige Sachen einstellen kann, lieber wäre
- Es soll als Service laufen: Warum? Lass es den Anwender doch beenden. Dann läuft es halt nicht mehr, und das Bild wechselt nicht mehr, na und?
- Es soll möglichst nicht über den Task manager beendet werden können: Ähh... ja...

Nennt mich paranoid, aber ich hab das Gefühl, dass hier was anderes hinter steckt..


Yogu - Do 20.03.08 14:51

user profile iconXentar hat folgendes geschrieben:
Nennt mich paranoid, aber ich hab das Gefühl, dass hier was anderes hinter steckt..

Paranoid! :mrgreen:

(Fast) jeder will am Anfang ein Programm schreiben, das sich nicht mehr beenden lässt. Ich auch. Das ist ganz normal. Irgendwann blickt (fast) jeder, dass es doch sinnvoll ist, dass der User das Programm noch beenden kann, ohne zig Programme runterzuladen, die irgendeinen blöden Prozess beenden. Irgendwann... ;)


CarpeDiem - Do 20.03.08 14:59

Xentar
Wenn hier was anderes dahinter stecken würde, dann würde ich es nicht ins Forum schreiben.
Ich will nur sehen, was alles möglich ist.

Yugo
Danke für den Tipp.


Raffo - Do 20.03.08 19:45

Ich begreife einfach nicht, was IHR euch alle so schwer anstellt, das Stichwort ist:


Delphi-Quelltext
1:
Application.ShowMainForm:=false;                    


mehr muss man nicht sagen, außer das es in die .dpr des Programmes gehört (aber auch bei onCreate gehts).

Zitat:
ohne den Ordner "Autostart" starten

Musst Du die TRegistry benutzen und direkt in einen entsprechenden Zweig Deinen gewünschten Autostart eintragen, z.B.


Quelltext
1:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run                    


Yogu - Do 20.03.08 20:22

user profile iconRaffo hat folgendes geschrieben:

Delphi-Quelltext
1:
Application.ShowMainForm:=false;                    

Das ist ja wohl so ziemlich die dreckigste Variante, eine Non-Fenster-Anwendung zu machen. Du erzeugst das Fenster und blendest es dann wieder aus? Was ist das denn für eine Logik? Es frisst Arbeitsspeicher, CPU-Belastung und Plattenplatz.

user profile iconRaffo hat folgendes geschrieben:

Quelltext
1:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run                    

Aber echt haargenau das macht der von mir gepostete Link [http://www.delphi-treff.de/tipps/applikation/tipp/156/]. Nur etwas komfortabler - es steht auch noch drin, in welchem Schlüssel was passiert.

user profile iconRaffo hat folgendes geschrieben:
Ich begreife einfach nicht, was IHR euch alle so schwer anstellt

Und ich begreife einfach nicht, wie manche Leute denken können, dass man den Dreck einfach unter den Teppich kehren kann.


Raffo - Do 20.03.08 20:31

Weisst Du was - mach Du Deine tollen Anwendungen die 2 Jahrzehnte brauchen und andere haben schon längst ihr Geld verdient und werden alt damit - ich bin damit immer gut gefahren - schnelle und unkomplizierte Lösungen.

Ich wüsste sonst gar nicht, wie so es "so ein Dreck" gäbe, wenn ihn nicht schon Borland anodazumal implementiert haben.

Wen willst Du wirklich in den Dreck ziehen, sei mal ehrlich (Borland, oder die Leute die das von Borland anwenden?!"$§%), ich kenne EUCH angeblich 100%igen "hochqualifizierten" Programmierern, ihr macht den Anwendern nur alles noch schwerer.


Yogu - Do 20.03.08 20:59

Jetzt mal nicht aufregen, ich wollte niemanden angreifen. :roll:

user profile iconstefan.gayr will ein Programm schreiben, das kein Fenster hat, sondern immer schön im Hintergrund läuft. Wenn er kein Fenster will, dann soll er auch kein Fenster benutzen - nicht eins erzeugen, und dann wieder ausblenden. Kompliziert ist das nicht, ein Fenster zu entfernen - dazu hat Borland schon gesorgt. Das Fenster kann einfach über "Aus dem Projekt entfernen" gelöscht werden. Dann hat die Anwendung kein Fenster mehr. Der Code kann einfach in die Hauptdatei des Projekts - Project1.dpr - geschrieben werden.

Grüße,
Yogu


fusco123 - Fr 21.03.08 13:32

Ne Möglichkeit, dass Programm net zu beenden können, ist auch alle 2 Sekunden taskmgr.exe durch ne andere Datei zu ersetzen, dann kann man den Taskmanager net öffnen.


fusco123 - Fr 21.03.08 13:40

ich hab mal den link von yogu ausprobiert und der Quelltext geht bei mir nicht, da der Variablentyp Tautorunkind nicht definiert ist.


nagel - Fr 21.03.08 13:41

@user profile iconfusco123: Lies mal alles was da steht, dann dürfte sich dein Problem erledigt haben.


Timosch - Fr 21.03.08 13:49

user profile iconfusco123 hat folgendes geschrieben:
Ne Möglichkeit, dass Programm net zu beenden können, ist auch alle 2 Sekunden taskmgr.exe durch ne andere Datei zu ersetzen, dann kann man den Taskmanager net öffnen.

§303b StGB (Computersabotage)...


Delete - Fr 21.03.08 16:29

Dass ein Programm welches den Desktophintergrund wechselt kein Fenster brauch kann ich nach voll ziehen. Ein Icon in der TNA, das anzeigt, dass es läuft und über das man das Programm konfigurieren kann, wäre wohl durch aus sinnvoll. Nicht nachvollziehen kann ich, dass man es "verstecken" muss und dass man es nicht beenden können soll. Das ist ein Benutzerprogramm, also hat es auch mit den Rechten eines Benutzers zu laufen. Ein Dienst ist hier vollkommen fehl am Platz. Zu mal der der Dienst nur von einem Administrator konfiguriert werden kann, er dann für alle Benutzer läuft (wenn man ihn nicht entsprechend konfiguriert) und man wohl noch das Problem haben dürfte, dass der Dienst den Registry Hive des aktuell angemeldeten Benutzers laden muss, um dort das Hintergrundbild zu setzen.
Verabschide dich von dem Dienst, dem Verstecken und dem Nicht-Beenden können und schreib ein vernünftiges Programm.


CarpeDiem - Fr 21.03.08 22:14

Wie schon gesagt, ich wollte nur mal wissen, was alles geht.
Aber ich werde das Programm jetzt benutzerfreundlich schreiben.
Danke trotzdem an alle, die das Thema ernst genommen haben.


.#R4id - Sa 22.03.08 02:41

user profile iconstefan.gayr hat folgendes geschrieben:
Ich will nur sehen, was alles möglich ist.

user profile iconstefan.gayr hat folgendes geschrieben:
Wie schon gesagt, ich wollte nur mal wissen, was alles geht.


Ich versteh nicht was das für eine Frage sein soll...
Die Frage sollte vllt. lauten: "Ich will nur sehen was nicht möglich ist", mit Delphi & C++ ist soweit ich weiß alles möglich!


Delete - Sa 22.03.08 02:50

R4id hat folgendes geschrieben:
mit Delphi & C++ ist soweit ich weiß alles möglich!

Mit Delphi kannst du keinen Treiber schreiben: http://www.michael-puff.de/Artikel/GrenzenDelphi.php


.#R4id - Sa 22.03.08 12:04

Okay... Danke 8)


Yogu - Sa 22.03.08 12:16

Obwohl's schon ziemlich lange her ist...

user profile iconfusco123 hat folgendes geschrieben:
Ne Möglichkeit, dass Programm net zu beenden können, ist auch alle 2 Sekunden taskmgr.exe durch ne andere Datei zu ersetzen, dann kann man den Taskmanager net öffnen.

... will ich dazu unbedingt etwas sagen: Das ist so ziemlich die unsauberste und unfairste Variante. Das kommt einem Virus gleich. Was ist das denn für ein Programm, das dir verbietet, den Taskmanager zu benutzen? Das ist nichtmal Treibern, Services oder Windows (!) gestattet. Wär doch auch quatsch, wenn man wegen einem Programm den Task-Manager nicht mehr öffnen könnte!

Das nur als Hinweis, dass so eine Variante nicht empfehlenswert wäre.


elundril - Sa 22.03.08 15:52

vor allem funktioniert das auch nicht. ich hab mal ein program geschrieben, einfach nur um zu sehen ob es funktioniert, das alle programme killt wenn ich mit der maus drüberfahr. hat sogar sogut funktioniert das ich mir das HINTERGRUNDBILD!!!! das selbst da is wenn der explorer nicht mehr da ist weg war. also, imho kann man programme nie ganz beendigungssicher machen.

lg elundril

P.S: Is beendigungssicher überhaupt n wort?? :gruebel:


nagel - Sa 22.03.08 15:57

user profile iconelundril hat folgendes geschrieben:

P.S: Is beendigungssicher überhaupt n wort?? :gruebel:

Jetzt schon :) .


Timosch - Sa 22.03.08 16:02

user profile iconelundril hat folgendes geschrieben:
vor allem funktioniert das auch nicht. ich hab mal ein program geschrieben, einfach nur um zu sehen ob es funktioniert, das alle programme killt wenn ich mit der maus drüberfahr. hat sogar sogut funktioniert das ich mir das HINTERGRUNDBILD!!!! das selbst da is wenn der explorer nicht mehr da ist weg war. also, imho kann man programme nie ganz beendigungssicher machen.

lg elundril

P.S: Is beendigungssicher überhaupt n wort?? :gruebel:


Ich wette mir dir um ein Bier, dass folgende Programme noch da waren: smss.exe; csrss.exe; winlogon.exe; services.exe; lsass.exe. :)
Spaß beiseite, selbst das geht mit Tricks (cmd.exe als Dienst, also System starten; taskmgr starten; abschießen), aber dann kommt so eine nette Meldung, dass das System in einer Minute heruntergefahren wird.


user profile iconYogu hat folgendes geschrieben:
Obwohl's schon ziemlich lange her ist...

user profile iconfusco123 hat folgendes geschrieben:
Ne Möglichkeit, dass Programm net zu beenden können, ist auch alle 2 Sekunden taskmgr.exe durch ne andere Datei zu ersetzen, dann kann man den Taskmanager net öffnen.

... will ich dazu unbedingt etwas sagen: Das ist so ziemlich die unsauberste und unfairste Variante. Das kommt einem Virus gleich. Was ist das denn für ein Programm, das dir verbietet, den Taskmanager zu benutzen? Das ist nichtmal Treibern, Services oder Windows (!) gestattet. Wär doch auch quatsch, wenn man wegen einem Programm den Task-Manager nicht mehr öffnen könnte!

Das nur als Hinweis, dass so eine Variante nicht empfehlenswert wäre.


Es ist vor allem völlig unnötig. Seit XP gibt es AFAIK einen Schlüssel in der Registry, mit dem sich der Taskmanager ausschalten lässt. Alternativ kann man ja auch über die Lokale Sicherheitsrichtlinie dem Benutzer den Zugriff entziehen.

PS: Sorry für die langen Quotes, aber ich war zu faul, das unnötige wegzukürzen... :mrgreen: