Deutsch

Заметки программиста

19.12.23 14:19
Re: Заметки программиста
 
uscheswoi_82 коренной житель
uscheswoi_82
в ответ uscheswoi_82 19.12.23 14:09, Последний раз изменено 19.12.23 14:21 (uscheswoi_82)

Программа pnggen генерирует пустой файл png, а так-же bat файл и запускает программу MS Paint-

Код pnggen.c:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

/* Пустой png файл с размером 1x1 пикселей */
int buf[] = {137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 1, 
             0, 0, 0, 1, 8, 2, 0, 0, 0, 144, 119, 83, 222, 0, 0, 0, 1, 115, 82, 71, 66, 
             0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252, 
             97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 
             111, 168, 100, 0, 0, 0, 12, 73, 68, 65, 84, 24, 87, 99, 248, 255, 255, 63, 
             0, 5, 254, 2, 254, 167, 53, 129, 132, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 
             96, 130, -1};
int main(int argc, char *argv[]) {
    char counter[10]; /* Для счётчика */
    char filename_bat[50]; /* Имя файла bat */
    char filename_png[50]; /* Имя файла png */
    int int_counter = 0; /* Инициализация счётчика */
    FILE *o_bat; /* Для файла bat */
    FILE *o_png; /* Для файла png */
    FILE *i_counter; /* Для файла counter */
    FILE *o_counter; /* Для файла counter */
    SYSTEMTIME local_time; /* Текущее время */
    /* Если аргументы не введены, выводим текст на экран pnggen.exe <prefix> и завершаем программу */
    if(argc < 2) { 
      printf("pnggen.exe <prefix>"); /* Вывод на экран pnggen <prefix> */
      return 0; /* Завершение программы */
    }
    i_counter = fopen("counter.", "r"); /* Открываем файл для чтения */
    /* Если файла counter не существует, то создаём новый файл counter, и записываем в файл число 0*/
    if(i_counter == NULL) {
        o_counter = fopen("counter.", "w"); /* Создаём новый файл counter */
        fprintf(o_counter, "0"); /* Записываем в файл число 0 */
         fclose(o_counter); /* Закрываем файл */
    }
    else {
      fgets(counter, 10, i_counter); /* Если файл существует, то считываем из файла число */
      int_counter = atoi(counter); /* Превращаем из текста в число */ 
      int_counter++; /* Увеличиваем счётчик */
      fclose(i_counter); /* Закрываем файл */
    }
    o_counter = fopen("counter.", "w"); /* Открываем файл counter для записи */
    fprintf(o_counter, "%d", int_counter); /* Записываем число в файл */
    fclose(o_counter); /* Закрываем файл */
    GetLocalTime(&local_time); /* Получаем текущую дату и текущее время */
       sprintf(filename_bat, "%s_d_d_d_d_d_d_d.bat", argv[1], int_counter, local_time.wDay, local_time.wMonth, 
                                                              local_time.wYear, local_time.wHour, local_time.wMinute, local_time.wSecond); /* Имя файла bat */
       sprintf(filename_png, "%s_d_d_d_d_d_d_d.png", argv[1], int_counter, local_time.wDay, local_time.wMonth, 
                                                              local_time.wYear, local_time.wHour, local_time.wMinute, local_time.wSecond); /* Имя файла png */
    o_bat = fopen(filename_bat, "w"); /* Открываем bat файл для записи */
    fprintf(o_bat, "@echo off\n"); /* Пишим в файл @echo off */
    fprintf(o_bat, "mspaint %s", filename_png); /* Пишим в файл mspaint ...*/
    fclose(o_bat); /* Закрываем файл */
    o_png = fopen(filename_png, "w+b"); /* Открываем файл для записи пустого png файла с размером 1x1 пиксель */
    /* Записываем в файл */
    for(int j = 0; j<sizeof(buf); j++) fputc(buf[j], o_png);
    fclose(o_png); /* Закрываем файл */
    system(filename_bat); /* Только что созданный bat файл запускаем */
    return 0; /* Выходим из программы */ 
}
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
 

Перейти на