www.mikrocontroller.net

Forum: PC-Programmierung Exe im Hintergrund


Autor: Xenon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Ihc möchte gerne eine exe die mit C oder auch Quickbasic geschrieben
wurde nur im Hintergrund ausführen lassen. Das heißt, dass sie sich
beim Systemstart öffnet man es aber nicht sehen kann. Diese exe soll
nähmlich
ein LCD ansteuern.
Mfg Xenon

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du könntest ein normales Programm mit Fensteroberfläche schreiben und
dies anschließend mit ShowWindow(hWnd, SW_HIDE) verstecken. ShowWindow
ist eine Windows API Funktion, hWnd das Fensterhandle. Mit C bzw. C++
sollte das problemlos gehen, welche Möglichkeiten Quickbasic bietet,
weis ich leider nicht.

Infos zur Funktion:
http://msdn.microsoft.com/library/default.asp?url=...

Jens

Autor: Xenon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort!
Welche Datei muss ich einbinden? Weil wenn ich das so in den Compiler
schreibe meckert der nur...

Autor: Thomas P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ShowWindow(hWnd, SW_HIDE)

Das hWnd darfst Du so nicht schreiben! Schaue Dir den Link von Jens an!

Autor: Xenon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie soll man es denn schreibe?

Autor: Philipp Karbach (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du musst windows.h einbinden und dann aber auch eine WinMain function
anstatt der normalen main function nehmen:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
lpCmdLine, int nShowCmd)

{
HWND hwnd;

ShowWindow(hwnd, SW_HIDE);

// dein LCD "quatsch" :)

return 0;
}

glaub das geht so, ansonsten musst du das hwnd noch mit CreateWindow
initialisieren aber ich weiß nicht genau ob man das MUSS. du willst ja
gar kein fenster haben.

Autor: Christoph __ (chris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ansonsten musst du das hwnd noch mit CreateWindow
> initialisieren aber ich weiß nicht genau ob man das MUSS

Man muss. Nicht initialisierte lokale Variablen enthalten in C
beliebigen Müll, aber auf keinen Fall ein gültiges Window-Handle.

Um diese Methode anzuwenden solltest du aber zumindest grundlegende
WinAPI-Kenntnisse besitzen. Du solltest also wenigstens wissen, was ein
HWND ist, wie man es erstellt, freigibt und wie das Nachrichtensystem
von Windows funktioniert. Dein Programm muss schließlich auch korrekt
auf "Beende-Dich"-Nachrichten reagieren (auch wenn das nur beim
Herunterfahren vorkommen sollte).

Autor: Philipp Karbach (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du hast schon recht, dennoch behaupte ich es würde auch so einfach
funktionieren ;). Zwar ist das unsauber und hässlich aber ich glaub ich
hab es schonmal in dieser popeligen minimalversion probiert.

Autor: Christoph __ (chris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> du hast schon recht, dennoch behaupte ich es würde auch
> so einfach funktionieren ;).

Natürlich "funktioniert" das im Sinne von "kein Fenster erscheint".
Das liegt aber keineswegs an der Genialität dieses Codes, sondern einzig
und allein daran, dass nahezu alle WinAPI-Funktionen äußerst defensiv
programmiert sind und ihre Parameter ausgiebig prüfen.

Da das Programm zum Zeitpunkt des Startens noch kein gültiges
Window-Handle in seiner Handle-Liste hat, ist es egal, was in der
Variablen hWnd steht, es ist so oder so ungültig. ShowWindow erkennt
das und liefert einen Fehlercode zurück, ohne weitere Aktionen
auszuführen. Das Programm hat in dem Zustand abgesehen von den
verschwendeten CPU-Takten denselben Effekt wie ohne ShowWindow-Aufruf.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die saubere Alternative wäre es, das Programm als Dienst (Service) zu
programmieren, dann kann es nämlich auch dann laufen, wenn kein
Benutzer am System angemeldet ist.
In *nix-speak ist so etwa ein Daemon.

Das setzt allerdings eine der ernstgemeinten Windows-Versionen voraus
(also kein Windows 95 oder einen seiner Aufgüsse, sondern jede
beliebige NT-Version, was Windows 2000 und XP einschließt).

Autor: Christoph Wagner (christoph)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am einfachsten geht das, indem du ein kleines Programm schreibst, das
das andere startet. Mit WinExec(Programmname,SW_HIDE) kannst du ein
Programm "versteckt" starten.

Einfach ein neues "Console-Projekt" erstellen, dann lösche {$APPTYPE
CONSOLE} und änderst "uses sysutils" in "uses windows" um.
[c]
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  { TODO -oUser -cConsole Main : Insert code here }
  winexec('Programmname / Pfad',SW_HIDE');
end.
[/C]

Das soltle dann so aussehen.

Das Programm wird dann nur ein paar KB groß. (bei Delphi 6 glaub ich 8
KB).

Du könntest das auch anpassen, indem du den Pfad aus der  Kommandozeile
holst. Dann kannst du das Teil universell verwenden.

Zum Schluss legst du dann das Programm / eine Verknüpfung auf das
Programm in den Autostartordner. Fertig.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Willst du deine Anwendung eigentlich auch im Taskmanager verstecken?
Auch dafür gibts recht einfache Methoden, einfach mal googlen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.