Wie LPTSTR lpCmdLine Parameter auswerten?
-
Hallo Leute,
vorab, ich habe kaum Ahnung von C++.
Nun habe ich aber das Problem, dass ich an einem alten C++ Programm eine kleine Änderung machen muss, weiß aber nicht wie ich das anstellen soll.Also das C++ Programm macht nix anderes als eine in embedded Visual Basic geschriebene .VB aufzurufen. Das soll auch so bleiben, allerdings soll die .VB
nur aufgerufen werden wenn ein bestimmter CommandLine-Parameter mitgegeben wurde. Also muss ich ja lpCmdLine auswerten, weiß aber nicht wie ich das machen soll.Wie im nachfolgenden Code zu sehen ist, habe ich das mit if (lpCmdLine == TEXT("Test")) versucht, was natürlich nicht funktioniert.
Das Programm z.B. PROGRAMM.vb soll nur interpretiert werden, wenn in lpCmdLine übergebene Parameter z.B. "Test" steht.
Kann mir jemand bitte ein Beispiel schreiben, wie ich das umsetzen kann?
Vielen Dank im Voraus!Gruß,
Uwe.#include "stdafx.h" #define dimof(a) (sizeof(a) / sizeof((a)[0])) int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // Pfadnamen der EXE-Datei (C-Starter) ermitteln TCHAR szCommandLine[MAX_PATH]; GetModuleFileName(NULL, szCommandLine, dimof(szCommandLine)); // Das Ende des Pfadnamens (=Anfang des Exe-Namens) ermitteln LPTSTR pszEnd = _tcsrchr(szCommandLine, TEXT('\\')); if (pszEnd != NULL) { if (lpCmdLine == TEXT("Test")) { _tcscpy(&pszEnd[1], TEXT("PROGRAMM.vb")); // VB Datei ausführen / starten SHELLEXECUTEINFO sei; memset(&sei, 0, sizeof(sei)); sei.cbSize = sizeof(sei); sei.lpFile = szCommandLine; sei.nShow = nCmdShow; ShellExecuteEx(&sei); } } return 0; }
-
Da du ja schon _tcscpy benutzt, würde ich mal vermuten, dass _tcscmp funktioniert:
if ( _tcscmp( lpCmdLine, TEXT("Test") == 0 )
-
Hi Manni,
vielen Dank für die superschnelle Hilfe!!!! Funktioniert einwandfrei!
Weißt Du oder jemand anderes vielleicht auch, was ich in den Else-Zweig einbauen muss, damit eine Messagebox ausgegeben wird, wenn der Parameter nicht passt?
Vielen Dank im Voraus!
Gruß,
Uwe.
-
Da wir hier im C++-Forum sind:
#ifdef _UNICODE typedef std::wstring MyString; #else typedef std::string MyString; #endifUnd in WinMain
if(_tcscmp(lpCmd,TEXT("Test"))==0) { TCHAR szCommandLine[MAX_PATH]; GetModuleFileName(hInstance, szCommandLine, MAX_PATH); // besser so MyString str(szCommandLine); size_t pos = str.rfind(TEXT("\\")); if(pos!=MyString::npos) { MyString strVB = str.substr(0,pos+1); strVB += "MeinProgramm.vb"; //_tcscpy(szCommand,strVB.c_str()); // besser: #include<StrSafe.h> StringCbCopy(szCommandLine,MAX_PATH,strVB.c_str()); //.. sei.lpFile = szCommandLine; } } else { MessageBox(0,TEXT(""),0,0); }Irgendwelche Berechnungen und Funktionsaufrufe sollten generell erst so spät wie möglich durchgeführt werden.
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Auch das funktioniert tadellos!
Vielen Dank für Eure schnelle Hilfe und sorry, dass ich zunächst im falschen Forum gepostet hatte!Gruß,
Uwe.
-
Vicious Falcon schrieb:
Da wir hier im C++-Forum sind:
#ifdef _UNICODE typedef std::wstring MyString; #else typedef std::string MyString; #endifdas brauchst du nicht so umständlich machen.
dafür gibt es doch TCHAR:typedef std::basic_string<TCHAR> string_type;bb
-
unskilled schrieb:
typedef std::basic_string<TCHAR> string_type;Ah jau, du hast natürlich Recht.