Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Moin

Ich komm mal direkt auf den Punkt, ich rufe vial ShellExecute ein Programm auf welches eine ganze Latte an Parametern besitzt, momentan erfolgt dies via einer Batchdatei, sprich diese wird aufgerufen, und die ruft dann wiederum die Applikation auf, funktioniert wunderbar, ist aber damit verbundne, dass ich zur Programmlaufzeit die BATCH-Datei erstellen muss.

Was wäre, wenn ich an statt dessen einfach mir die Lange Ausführleiste in nen String hau, und den in ShellExecute einsetzte? Idee ist simpel, nur mit der Umsetzung harperts, da hab ich nämlich mal überhaupt keine Idee, wie ich das machen soll. Zum einen müsstne dann ja die Anführungszeichen vor ujnd nach der Auszuführenden Applikation weg, da er sonst denkt die Applikation würde so heissen wie der name es Strings lautet. Also lass ich die mal fein weck, aber irgendwie will der nicht so wie ich will. Und naja, jetzt halt allgemein die Frage ob das überhaupt möglich ist einen String einzusetzen, oder ob ich an einen festen "Wert" gebunden bin.

Geschrieben

Das mag deiner Meinung entsprechen, ich wäre über eine Antwort auf die Problemstellung dennoch erfreut.

Die Basics der Konsolenprogrammierung lange genug beigebracht worden. Jetzt wird mir was aufgedrückt wos heisst mach mal, du bist zwar Systemintegrator und kein Anwendungsentwickler und du bekommst nen IDE mit dem du nicht zurrecht kommst und dem die Helpfiles fehlen, keine Bücher, und kaum Internetquellen die was Sinnvolles ausspucken was ich genau wissen möchte.

Wenn du ein gutes Tutorial für mich ahst hab ich da auch voll und ganz ncihts dagegen, aber ich tappe bei der Suche nach sowas zur Zeit leider noch im Dunkeln.

Geschrieben
Das mag deiner Meinung entsprechen, ich wäre über eine Antwort auf die Problemstellung dennoch erfreut.

Die Basics der Konsolenprogrammierung lange genug beigebracht worden.

...Wenn du ein gutes Tutorial für mich ahst hab ich da auch voll und ganz ncihts dagegen, aber ich tappe bei der Suche nach sowas zur Zeit leider noch im Dunkeln.

Wenn du hier im Forum nach Tutorial oder Büchern suchst findest du dutzende Threads wo welche empfohlen werden.

Und das hat nichts mit meiner Meinung zu tun sondern das das absolute Grundlagen sind wonach du hier fragst. Du bekommst hier gerne Hilfe bei Problemen, aber hier wird dir nicht programmieren beigebracht.

Geschrieben

Ok, also Fehlerbeschreibung:

Ich habe es nach 2 Varianten versucht:

Variante 1:


std::string mapprinter="rundll32 printui.dll,PrintUIEntry /n "PDFCreator\" /y";

ShellExecute(NULL, "open", mapprinter, NULL, NULL, W_SHOWNORMAL);

Variante 2:

std::string mapprinter="rundll32 printui.dll,PrintUIEntry /n "PDFCreator\" /y";

ShellExecute(NULL, "open", "mapprinter", NULL, NULL, W_SHOWNORMAL);

Variante 2 Schluckt der einfach so, beim Ausführen des Programms passiert aber mal genau garnichts:

Eigentlich sollte der Drucker PDFCreator dadurch als Standart gemappt werden, es tut sich aber überhaupt nichts, das Programm läuft durch udn beendet sich und das wars. Ohne Fehlermeldung.

Ist für mich schon verständlich, weil ich ihm durch die Anführungszeichen sage, dass "mapprinter" der Name des Files, welches ausgeführt werden soll. Was ja logischerweise nicht vorhanden ist.

Bei Variante 1 tut sich dagegen beim Compilieren was, es kommt zum Fehler:

error C2664: 'ShellExecuteA' : Konvertierung des Parameters 3 von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in 'const char

*' nicht moeglich

Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden

Fehler beim Ausführen von cl.exe.

wäre auch verständlich würde eben ausdrücken, dass ich nicht tun kann was ich vorhabe. Wäre meine Frage an die Fachleute hier, ob es ne Möglichkeit gibt wie ich dass doch kann.

Geschrieben

std::string mapprinter="rundll32 printui.dll,PrintUIEntry /n "PDFCreator\" /y";
[/CODE] Das sollte sich gar nicht kompilieren lassen, weil der Backslash vor den Anführungszeichen vor PDFCreator fehlt.
[code]ShellExecute(NULL, "open", "mapprinter", NULL, NULL, W_SHOWNORMAL);

...

Variante 2 Schluckt der einfach so, beim Ausführen des Programms passiert aber mal genau garnichts:

Kein Wunder. Anführungszeichen um einen Variablennamen hat nicht den Effekt, den du hier erwartest. Du versuchst, das Programm "mapprinter" zu starten. Das gibt es vermutlich nicht. Da du den Rückgabewert von ShellExecute nicht prüfst, merkst du davon nichts.

error C2664: 'ShellExecuteA' : Konvertierung des Parameters 3 von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in 'const char

*' nicht moeglich

Dafür hat std::string die Methode c_str.
Geschrieben

Werden die Parameter dann einfach an der entsprechenden Postion von ShellExecute hintereinander eingesetzt, oder müssen die noch irgendwie von einadner mit einem Trennzeichen unterschieden werden?

Ansonsten Danke ich dir schonmal :)

Geschrieben

hat sich schon erledigt, funktioniert jetzt im feldversuch so: :)


std::string runit="rundll32";

std::string para="printui.dll,PrintUIEntry /n \"PDFCreator\" /y";

ShellExecute(NULL, "open",runit.c_str(), para.c_str(), NULL, SW_SHOWNORMAL);

Danek nochmal :)

Geschrieben

Noch eine Frage dazu, weiss jemand wieviel Zeichen die Parameteraufnahme von ShellExecute maximal aufnehmen kann? Also die maximale Zeichenanzahl.

Bzw. die maximale Zeichenanzahl die ein String haben kann?

Geschrieben

Das Problem ist folgendes, mit den weiter oebn stehenden Parametern zur rundll32 mappe ich einen installierten Drucker als Standart. Wenn ich die Parameter anfüge die der Installation dienen wird das ganze um einiges länger.

std::string runit="rundll32";

std::string para="printui.dll,PrintUIEntry /if /b \"HP LaserJet 4000 Series PCL\" /f %%windir%%\\inf\\ntprint.inf /r \"IP_IP-Zensiert\" /m \"HP Laserjet 4000 Series PCL\"";

ShellExecute(NULL, "open",runit.c_str(), para.c_str(), NULL, SW_SHOWNORMAL);

Der Compiler hat damit kein Problem, das einzige was ist, ist das das ganze beim Ausführen auf Fehler läuft, sprich er führt die Parameter wohl nicht vollständig aus. Daher frage ich.

Geschrieben

wenn es grade um die Sache mit %windir% geht, das ist so von der Syntax her korrekt, wenn ich es über die Commandline direkt eintippe, also abschreibe, funktioniert es ja auch, sprich der muss das eigentlich blos übertragen.

Edit: habs grad ausprobiert, hast recht, in dem Fall behaupte ich sofort das Gegenteil, der würde die wohl nur expandieren, wenn ich die Commandline aufrufen würde, und an dieser das Auszuführende übertrage.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...