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