Hallo Leute.
Ich hab mir eie kleines Programm in C++ geschrieben, was nichts weiter
macht als ständig Werte ausm PC auszulesen und diese über RS232 an einen
uC zu schicken. Es funktioniert auch wunderbar, nur nervt es mich, dass
immer die Eingabeaufforderung dabei geöffnet bleibt. Kann man dies
irgendwie umgehen, so dass das Programm nur im Hintergund läuft?
Das Programm kann auch über eine der Win32-API-Funktionen
(AllocConsole/FreeConsole ect.) die verwendete Konsole freigeben - nur
wird es dann etwas schwer, das Programm zu steuern, weil ja nichts mehr
da ist, wo man draufklicken kann und auch nichts mehr da ist, dem man
per Tastatur mitteilen kann, daß es aufhören so..
Besser wäre es, das Programm als Dienst zu implementieren ("Service"),
das aber erfordert schon etwas mehr Programmierkenntnisse. Dienste sind
unsichtbare Prozesse (unix-speak "daemon"), die im Hintergrund laufen
und sich auch nicht beenden, wenn sich der Benutzer abmeldet. Über den
Dienstmanager (services.msc) können Dienste gesteuert werden.
noch ein gast wrote:
> Windows kann was doch? Inwiefern soll mein Tip unsinnig sein?Beitrag "Re: exe im hintergrund ausführen"
Auf die Schnelle:
- öffne eine DOS-Box
- tippe
start /?
dann siehst du, was der doofe cmd.exe alles kann, was aber kaum einer
weiß...
Es funktioniert auch wunderbar, nur nervt es mich,
2
dass immer die Eingabeaufforderung dabei geöffnet bleibt.
3
Kann man dies irgendwie umgehen, so dass das Programm
4
nur im Hintergund läuft?
Da hilft auch die Verwendung von start nicht, denn auch da bleibt das
Konsolenfenster der Applikation immer geöffnet.
Daß der Threadstarter das geöffnete Konsolenfenster
("Eingabeaufforderung", von manchen fälschlicherweise als "DOS-Box"
bezeichnet) selber in die Taskleiste minimieren kann und auch den Focus
auf ein anderes Fenster setzen kann, sollten wir ihm schon zutrauen.
Ok, war wirklich nichts mit start. Versuchs mal damit:
var Shell = new ActiveXObject("WScript.Shell");
Shell.Run('notepad.exe', 0);
Schreib die zwei Zeilen in eine Datei mit Endung .js und führ die aus.
Das Skript terminiert sofort, während notepad nur noch im Taskmanager zu
sehen, bzw. zu killen ist...
Im Anhang ein kleines Helferlein, mit dem man jede Applikation in den
Hintergrund verbannen kann.
Normalerweise kann man in den Eigenschaften die Eingabeaufforderung
wieder schlißen lassen. Dabei müsstest Du im Prinzip nur ne Verknüpfung
erstellen, dort konfigurieren und dann das Programm über diese
Verknüpfung ausführen.
Ich bemutze diese Vorgehensweise z.B. bei meinen
Datensicherungsbatschdateien, bei denen mich auch anfangs immer genervt
hat, dass die Eingabeaufforderung offen geblieben ist.
Klappt seit Jahren und verscheidenen Windowsversionen einwandfrei.
Ich würde mal vermuten, das geht, indem man ihm die Message zum restoren
schickt. Aber dazu braucst du natürlich irgend ein Vehikel, das das
macht...
Der Taskmanager kanns jedenfalls nur, wenn der Prozeß im ersten Tab
aufgelistet ist - aber das sollte ja gerade verhindert werden.
Ich versenke mit dieser Methode nur Teile, die ich definitiv - außer in
der Prozeßliste - nicht sehen will, wie SSL-Tunnels.
>Mit Notepad funktioniert das Skript, mit dem Rechner (calc.exe)>komischerweise nicht. 'Ne Ideem warum?
hi,
genau das problem habe ich auch...
bei mir kommt ne meldung:
Skript: [verzeichnis]
Zeile: 2
Zeichen: 1
Fehler: Das System kann die angegebene Datei nicht finden.
Code: 80070003
Quelle: (null)
ich verstehe nicht warum die datei (programm) nicht gefunden werden
kann?
der Pfad ist auf jedenfall richtig eingegeben!
need help
thx
>> Das Programm liegt im selben Verzeichnis wie das Programm notepad.exe> (C:\windows).> Mit notepad.exe funktioniert es!>> mfg
Dann gib den Pfad vollständig an! Aber Achtung: \ hat in JS-Strings
dieselbe Funktion wie in C. Du mußt sie entweder verdoppeln, oder
einfach durch / ersetzen. Und weil Blanks im Pfad vorkommen, ist es eine
gute Idee, den ganzen Pfad nochmal in " einzuschließen:
Shell.Run('"c:/windows/Laufwerköffner Programm.exe"', 0);
anderenfalls würde versucht, c:/windows/Laufwerköffner mit dem Parameter
Programm.exe zu starten.
Faustregel: Vermeide Leerzeichen in Pfaden, wenn du böse Überraschungen
vermeiden willst...
Nachtrag: Evenuell funktioniert es auch so - ich habs aber nicht
probiert:
Shell.Run('"Laufwerköffner Programm.exe"', 0);
Vielen Dank!!!!It WORKS!!!!
Endlich hats geklappt ich war schon fast am verzweifeln :D!!!
also dann mach ich mich ma gleich an die Arbeit mein Programm zu
perfektionieren ^^.....
Mfg Erob