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
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=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/showwindow.asp Jens
Danke für die schnelle Antwort! Welche Datei muss ich einbinden? Weil wenn ich das so in den Compiler schreibe meckert der nur...
ShowWindow(hWnd, SW_HIDE) Das hWnd darfst Du so nicht schreiben! Schaue Dir den Link von Jens an!
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.
> 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).
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.
> 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.
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).
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.
1 | [c] |
2 | program Project1; |
3 | |
4 | {$APPTYPE CONSOLE} |
5 | |
6 | uses
|
7 | SysUtils; |
8 | |
9 | begin
|
10 | { TODO -oUser -cConsole Main : Insert code here } |
11 | winexec('Programmname / Pfad',SW_HIDE'); |
12 | 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.
Willst du deine Anwendung eigentlich auch im Taskmanager verstecken? Auch dafür gibts recht einfache Methoden, einfach mal googlen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.