Icon ohne Resourcen [NEU]Algorithmus zum auslesen von Binärdaten aus Dateien[/NEU]



  • Hoi.
    Gibt es eine Möglichkeit Icons ohne Resourcen darzustellen? Ich möchte das nicht so haben, dass ich 2 Dateien (Icon und exe) im Ordner habe, sondern dass das Icon im Programm mitdrin ist.

    Mfg Ominion


  • Mod

    Verstehe ich nicht ganz. Normalerweise wird eine Icon Datei über eine RC Datei in die EXE eingebunden.



  • Das will ich ja nicht. Gibt es da keine andere Möglichkeit?

    Mfg Ominion



  • Ominion schrieb:

    Ich möchte das nicht so haben, dass ich 2 Dateien (Icon und exe) im Ordner habe, sondern dass das Icon im Programm mitdrin ist.

    Martin Richter schrieb:

    Normalerweise wird eine Icon Datei über eine RC Datei in die EXE eingebunden.

    Ominion schrieb:

    Das will ich ja nicht.

    Also du willst, daß das Icon in die Exe mit eingebunden wird, aber genau das willst du ja nicht aber das andere willst du auch nicht. Was willst du?



  • Du könntest das Icon direkt als initialisierte "Variable" einbinden und das Icon dann mit "CreateIcon" erzeugen...



  • @fafdafsd: Martin Richter hat geschrieben, dass das Icon über ein Resource (RC) eingebunden wird. Aber der Titel das Threads heißt ja "Icon ohne Resourcen".

    @Jochen Kalmbach: Also ich könnte das Icon erstmal über LoadIcon laden, und anschließend mit CreateIcon einbinden("erstellen"), oder?

    Mfg Ominion



  • Mit Resource hast du aber nicht 2 Dateien im Ordner da das Icon in die Exe als Resource reinkompiliert ist insofern verstehe ich dich nicht, bzw. dein Problem nicht.



  • Ich weiß, aber ich will das Icon ja eben ohne Resource einbinden! ⚠
    Ich möchte, dass das im Endeffekt wie bei einer Resource ist, aber ich möchte keine benutzen.

    Mfg Ominion



  • Ominion schrieb:

    @Jochen Kalmbach: Also ich könnte das Icon erstmal über LoadIcon laden, und anschließend mit CreateIcon einbinden("erstellen"), oder?

    Mit "LoadIcon" kannst Du es ja nur laden, wenn Du es in den Resourcen hast!
    Du musst das Icon als (statische) Variable definieren...
    Siehe: Using Icons
    http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/resources/icons/usingicons.asp



  • Da muss ich ja jeden Pixel einzelnd einfärben! 😮

    Mfg Ominion



  • Theoretisch kannst Du auch einfach das gesamte Icon bei Dir in den Source "schreiben" (z.B. via Binär-Editor "reinkopieren") und dann "CreateIconFromResource" verwenden, wobei "presbits" auf den Inhalt Deines BYTE-Arrays zeigt...

    Also sowas in der Form:

    BYTE pMyIcon[] = {
      0x00, 0x00, 0x01, // usw....
    };
    


  • Diese Lösung gefällt mir schon besser.

    Mfg Ominion

    [Offtopic]Hast du diese Bereiche studiert, oder kannst du einfach besser mit Google bzw. der MSDN umgehen als andere?[/Offtopic]



  • OT: Vermutlich arbeite ich täglich damit... und ganz nebenbei:
    https://mvp.support.microsoft.com/profile=EE63B639-568B-452F-927E-EABE4F5B9CF5
    😉

    PS: WinAPI kann man nicht "studieren"...



  • *hustel*Aso...ich wette M$ hat mir jetzt alle meine persönlichen Daten geklaut 😉

    Natürlich kann man das studieren...aber was man danach kann ist meist eher bescheiden...

    Mfg Ominion



  • Ominion schrieb:

    *hustel*Aso...ich wette M$ hat mir jetzt alle meine persönlichen Daten geklaut 😉

    Nein, ich bin kein Mitarbeiter von MS!

    Ominion schrieb:

    Natürlich kann man das studieren...aber was man danach kann ist meist eher bescheiden...

    Wo kann man das studieren? Du kannst höchstens Informatik studieren, das hat aber mit der Praxis so gut wie nichts zu tun (kann ich aus eigener Erfahrung sagen 😉 )



  • Jochen Kalmbach schrieb:

    Nein, ich bin kein Mitarbeiter von MS!

    Du weist aber trotzdem nicht, was die für Scripte laufen haben. Wenn man mal an den Windows Mediaplayer denkt...

    Jochen Kalmbach schrieb:

    Wo kann man das studieren? Du kannst höchstens Informatik studieren, das hat aber mit der Praxis so gut wie nichts zu tun (kann ich aus eigener Erfahrung sagen )

    Ich kenne Lehrer, die das studiert haben...ihr Können ist zwar Bescheiden, aber was soll man von Lehrern schon erwarten...

    Mfg Ominion



  • Also ich habe mein Icon jetzt mal in nen Binary-Editor geladen...
    Nachdem ich jetzt die ersten 30 Zeilen abgetippt habe und ca. noch das 10-fache tippen muss, stellt sich mir die Frage, ob es den so schwer ist über einen Algorithmus die Binärdaten auszulesen und in einen Array zu schreiben. Gibt es da irgendeine Möglichkeit?

    Mfg Ominion



  • Fast jeder Hexeditor (z.B. Hex Workshop) bietet die Möglichkeit die Datei als C Array zu exportieren. Das selbst zu schreiben ist ja jetzt aber auch nicht so schwierig. Du liest die Datei einfach ein und schreibst sie als C Array formatiert wieder in eine andere Datei rein.



  • Ich sprach aber zum Beispiel hiervon:

    0x128
    

    und nicht zum Beispiel hiervon:

    99F7
    

    Oder vielleicht habe ich das auch nur falsch verstanden?

    Mfg Ominion



  • #include <stdlib.h>
    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
    	int fd_size;
    	FILE *source,*dest;
    	int i;
    	unsigned char *buffer;
    
    	if(argc != 4) {
    		printf("bin2c infile outfile label\n\n");
    		return 1;
    	}
    
    	if((source=fopen( argv[1], "rb")) == NULL) {
    		printf("Error opening %s for reading.\n",argv[1]);
    		return 1;
    	}
    
    	fseek(source,0,SEEK_END);
    	fd_size = ftell(source);
    	fseek(source,0,SEEK_SET);
    
    	if((buffer = malloc(fd_size)) == NULL) {
    		printf("Failed to allocate memory.\n");
    		return 1;
    	}
    
    	if(fread(buffer,1,fd_size,source) != fd_size) {
    		printf("Failed to read file.\n");
    		return 1;
    	}
    	fclose(source);
    
    	if((dest = fopen(argv[2],"w+")) == NULL) {
    		printf("Failed to open/create %s.\n",argv[2]);
    		return 1;
    	}
    
    	fprintf(dest, "#ifndef __%s__\n", argv[3]);
    	fprintf(dest, "#define __%s__\n\n", argv[3]);
    	fprintf(dest, "static unsigned int size_%s = %d;\n", argv[3], fd_size);
    	fprintf(dest, "static unsigned char %s[] = {", argv[3]);
    
    	for(i=0;i<fd_size;i+=1) {
    		if((i % 16) == 0) fprintf(dest, "\n\t");
    		fprintf(dest, "0x%02x, ", buffer[i]);
    	}
    	fprintf(dest, "\n};\n\n#endif\n");
    	fclose(dest);
    	return 0;
    }
    

Log in to reply