Win32-Programmierung mit VC++ und der Win-Api
3.1 - Parameterübergabe bei Windowsprogrammen
Manchmal ist es sinnvoll Parameter einem Windowsprogramm zu übergeben. Von Dos-Programmen kennen wir ja schon folgendes:
#include <stdio.h>
int main (int argc, char *argv[])
{
int i;
for(i=0; i<argc; {
printf("argv[%d]=%s",i, argv[i]);
}
return 0;
}
Nun geht das leider nicht bei Windows-Programmen. Warum ist das so?
- Wir haben keine .. main () Funktion…
- In Windows-Programmen ist argc und argv ungültig…
- alles was ich nicht kenne und unvorhergesehenes
Kann sein, dass ich ein paar Gründe nicht aufgezählt habe. Ist aber auch egal! Basierend auf dem WinApi-Konstrukt gibts hier den Source, wie man auch bei Windows-Programmen Parameter übergeben kann. Macht was draus:
...
...
//---------------------------------------------------------------------------
// HAUPTFENSTER
//---------------------------------------------------------------------------
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
// -------------------------------------------------------------------
// ------------- This is for our Command-line Arguments ------
// -------------------------------------------------------------------
char szStrTmp[1024+1];
int i;
wsprintf(szStrTmp,"Anzahl der Argumente: %d",__argc);
MessageBox(NULL,szStrTmp,"CmdLine",MB_OK);
for(i=0; i<__argc; i++)
{
wsprintf(szStrTmp,"wert von argv[%d]: %s", i, __argv[i]);
MessageBox(NULL,szStrTmp,"Argument",MB_OK);
}
// --------------------------------------------------------------------
// -------------------- until here -----------------------------------
// --------------------------------------------------------------------
static TCHAR szAppName[] = TEXT ("DIALOG01") ;
HWND hwnd ; //HWND für Hauptfenster
MSG msg ; // das message handling heist msg
WNDCLASS windclass ; //das Hauptfenster gehört zu windclass - Klasse
windclass.style = CS_HREDRAW | CS_VREDRAW;
windclass.lpfnWndProc = WindProc ;
windclass.cbClsExtra = 0 ;
windclass.cbWndExtra = DLGWINDOWEXTRA ;
windclass.hInstance = hInstance ;
windclass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON));
windclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
windclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1) ;
windclass.lpszMenuName = "IDM_MENU";
windclass.lpszClassName = szAppName ;
Folgender Code ermittelt unter zuhilfenahme der Windows-Api die übergebenen Programmparamter. Anstatt bei Dos:
int argc, char *argv[]
verwendet Windows: __argv[int], __argc
Zum antesten entweder einfach doppelklicken oder über die Eingabeaufforderung das Teil aufrufen und ein paar Parameter übergeben…
Damit ist dieses Tutorial auch schon beendet.
Hier ist der Download des Beispielprogramms als VC++ Workspace: cmdline_args_win32.zip - 20.6 KB, zip