Iconpro



  • Hallo erstmal,

    ich arbeite öfter mal mit dem Programm "Iconpro". Das Programm hat die
    Fähigkeit Bitmaps in Icons umzuwandeln. Leider fehlt dem Programm die
    Möglichkeit Icon-Dateien von der commandline einzulesen.

    Die Quellen kompilieren unter VC++ 2008 Express Edition einwandfrei
    durch.

    Wo muss ich ansetzen um dem Programm die commandline-Funktionalität
    mitzugeben.

    Die Quellen gibt es unter dem folgenden Link:

    http://msdn.microsoft.com/en-us/library/ms997538.aspx

    in der 4493.exe Datei.

    Für ein paar Hinweise wäre ich äußerst dankbar.

    Gruß Glissy



  • Sieh dir mal die Parameter der WinMain an. Da kriegst du die Komandozeilenparameter her.



  • Danke für die schnelle Antwort.

    Da ich nicht besonders gut in der C-Programmierung bin, hätte ich
    es gern etwas genauer.
    Danke



  • Es ist der Parameter lpCmdLine, das ist ein nullterminierter String mit den Kommandozeilenparametern (ohne exe-Name). Noch genauer geht nicht. Am besten, du probierst mal, ob du damit klarkommst und meldest dich im Zweifelsfall wieder. Dann aber am besten mit einem konkreten Problem in deinem Code oder einer konkreten Frage, so kann man dir kaum helfen (außer, alles für dich zu machen) 😉 .



  • Der Bezeichner lpszCmdLine ist vom Typ LPSTR.

    Der Bezeichner szFileName im weiteren Programmverlauf ist vom
    Typ TCHAR.

    Wie krieg ich die CmdLine in den szFileName rein?



  • Exakt deklariert mit:

    TCHAR szFileName[MAX_PATH];



  • Du kannst den Inhalt von lpszCmdLine z.B. mit strcpy nach szFileName kopieren.

    strcpy(szFileName,lpszCmdLine);
    

    Da szFileName vom Typ TCHAR* ist (kann entweder char* oder wchar_t* sein), könntest du noch ein kleines Problem bekommen, wenn das Projekt auf Unicode eingestellt ist. Dann musst du den String erst noch nach Unicode konvertieren. Die passende Funktion hab ich grad nicht im Kopf (findest du zur Not auch hier im Forum). Aber probier es erstmal so. Bei Problemen sag Bescheid.



  • Ich glaube es fehlt nicht mehr viel.

    strcpy(szFileName, lpszCmdLine);
    
                if(szFileName != "")
                { 
                  // Read in the icon data
                  lpIR = ReadIconFromICOFile( szFileName );
                  ...
    

    Leider springt das Programm immer auf ReadIconFromICOFile. Auch wenn
    kein Parameter angegeben wurde.

    Was muß ich noch ändern?

    Gruß Glissy



  • Strings vergleicht man mit strcmp



  • Du verlgeichst hier quasi 2 Adressen, nicht das worauf sie zeigen. Deshalb muss man, wie schon erwähnt wurde, sowas wie strcmp benutzen.

    Bei Gelegenheit solltest du mal was über Strings (und andere Grundlagen) in C lesen.



  • #include <tchar.h> // added
    #include <shlwapi.h> // added
    #pragma comment(lib,"shlwapi.lib") // added
    
    // WinMain -> _tWinMain
    int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpszCmdLine, int nCmdShow)
    {
    	MSG msg;
    	BOOL bRet = FALSE;
    
    	// standard init stuff
    	if( ! hPrevInstance )
    	{
    		if( ! InitApplication( hInstance ) )
    		{
    			return FALSE;
    		}
    	}
    	if(!InitInstance( hInstance, nCmdShow ) )
    	{
    		return FALSE;
    	}
    
    	if (__argc > 1) // added
    	{
    		ICONRESOURCE* pIR = ReadIconFromICOFile(__targv[1]);
    		if (pIR)
    		{
    			HWND hWndNew = CreateNewMDIChildWindow( PathFindFileName(__targv[1]), pIR );
    			SendMessage( hMDIClientWnd, WM_MDIACTIVATE, (WPARAM)hWndNew, 0 );
    		}
    	}
    	// Standard message loop
    	while ((bRet = GetMessage
    


  • @sapero

    Hab den Quelltext gleich eingebaut. Ich versteh zwar nicht wieso,
    aber läuft hervorragend!!!!

    0 Fehler, 0 Warnungen.

    Das hab ich mir schon ewig gewünscht, hatte leider nie einen
    Compiler der ohne Einschränkungen nach Exe-Dateien compiliert.

    Herzlichen Dank für die Mühe.

    Gruß Glissy


Log in to reply