Deutsch

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

529  
uscheswoi_82 коренной житель19.12.23 14:07
uscheswoi_82
19.12.23 14:07 

Программа bin2h.c:

#include <stdio.h>

int main(int argc, char *argv[]) {
    FILE *i; /*Для чтения файла */
    FILE *o; /* Для записи файла */
    int is_begin = 0; /* Начало файла */
    int buf; /* Переменная, в которую записывается значение текущего байта из файла */    
    /* Если мало аргументов, то показываем подсказку и выходим из программы*/
    if(argc < 2) { printf("bin2h <binary> <output>"); return 0; }
    i = fopen(argv[1], "r+b"); /* Открываем файл для чтения бинарных данных*/
    o = fopen(argv[2], "w"); /* Открываем файл для записи */
    fprintf(o, "int buf[] = {"); /* Записываем в файл int buf[] = {*/
    /* Циклиться до конца файла */
    while(!feof(i)) {
        /* Если не начало файла, то записываем в файл запятую */
        if(is_begin == 1) fprintf(o, ", "); 
        buf = fgetc(i); /* Считываем текущий байт из файла */
        fprintf(o, "%d", buf); /* Записываем в файл текущий байт, но в виде цифры */
        /* Если начало файла, то устанавливаем что не начало файла */
        if(is_begin == 0) is_begin = 1;
    }
    fprintf(o, "};"); /* Записываем в файл }; */
    fclose(i); /* Закрываем файл */
    fclose(o); /* Зарываем файл */
    return 0; /* Завершаем программу */
}
кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
#1 
uscheswoi_82 коренной житель19.12.23 14:09
uscheswoi_82
NEW 19.12.23 14:09 
в ответ uscheswoi_82 19.12.23 14:07

Программа bin2h генерирует из бинарного файла в цифровой. Зачем эта программа узнаете позже.

кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
#2 
uscheswoi_82 коренной житель19.12.23 14:19
uscheswoi_82
NEW 19.12.23 14:19 
в ответ 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; /* Выходим из программы */ 
}
кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
#3 
uscheswoi_82 коренной житель19.12.23 14:28
uscheswoi_82
NEW 19.12.23 14:28 
в ответ uscheswoi_82 19.12.23 14:19

Программа bin2h лишь нужна была для того, чтобы бинарные данные из пустого png файла превратить вот в такой массив:

/* Пустой 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};
кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
#4 
uscheswoi_82 коренной житель19.12.23 14:37
uscheswoi_82
NEW 19.12.23 14:37 
в ответ uscheswoi_82 19.12.23 14:28, Последний раз изменено 19.12.23 14:39 (uscheswoi_82)

Программа window_resizer.frm:

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, 
                                                    ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, 
                                                    yVal cch As Long) As Long
Private Const SWP_NOMOVE = &H2
Private Const HWND_TOPMOST = -1

'Конвертируем из HEX в длинное число, нужно для HWND
Function Hex2Dbl(h As String) As Double
    Hex2Dbl = CDbl("&h0" & h)
    If Hex2Dbl < 0 Then Hex2Dbl = Hex2Dbl + 4294967296#
End Function

Private Sub Command1_Click()
  'Меняем размер окна
  SetWindowPos CLng(Hex2Dbl(Me.Text3.Text)), HWND_TOPMOST, 0, 0, CLng(Me.Text1.Text), CLng(Me.Text2.Text), SWP_NOMOVE
End Sub


Так выглядет форма:

кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
#5 
uscheswoi_82 коренной житель19.12.23 14:42
uscheswoi_82
NEW 19.12.23 14:42 
в ответ uscheswoi_82 19.12.23 14:37

Программа tab2spc.py, заменяет табулятор на пробелы, нужна для форматирования кода, взял из своего форума тут - https://programming.mybb.ru/viewtopic.php?id=281:

import sys

def convert(s, e):
  try:
    i = open(s, "r") #Открываем файл для чтения
    o = open(e, "w") #Открываем файл для записи 

    #Читаем из файла строчки
    for l in i:
      nl = l.replace("\t", "   ") #Заменяем табуляции на пробелы
      o.write(nl) #Записываем в строчку

    #Закрываем файлы
    i.close()
    o.close()

  #Обработчик ошибок
  except OSError as err:
    print("OS error: {0}".format(err))
  except ValueError:
    print("Could not convert data to an integer.")
  except BaseException as err:
    print(f"Unexpected {err=}, {type(err)=}")
    raise
кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
#6 
uscheswoi_82 коренной житель19.12.23 15:01
uscheswoi_82
NEW 19.12.23 15:01 
в ответ uscheswoi_82 19.12.23 14:42

Работа программы, получаю HWND спомощью программы Microsoft Spy++ и меняю размер окна программы спомощью моей программы Change Window Size:

кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
#7 
uscheswoi_82 коренной житель25.03.24 00:51
uscheswoi_82
NEW 25.03.24 00:51 
в ответ uscheswoi_82 19.12.23 15:01

Это как обратиться к x и y координате в буфере, формула такая buffer[(y * HEIGHT) + x]:

#define HEIGHT 23
#define WIDTH  80
#include <stdio.h>

char buffer[WIDTH * HEIGHT];

//Установить байт в буфер, по x и y-координате
void set_buffer(char ch, int x, int y) {
  buffer[(y * HEIGHT) + x] = ch;
}

//Получить байт из буфера, по x и y-координате
char get_buffer(int x, int y) {
  return buffer[(y * HEIGHT) + x];
}
кто как обзывается, тот так сам называется... маску ношу чтобы не заразить антиваксеров... Дневник тяжелобольного инвалида
#8