• Как выполнить этот код на PHP?

    SerJook
    @SerJook
    кодер
    $imgFile  = curl_file_create("d:/new-icon.png");
    $remoteData = array(
        'file' => $imgFile
    );
    Ответ написан
    Комментировать
  • Как отсортировать по убыванию?

    SerJook
    @SerJook
    кодер
    std::sort(vector2->begin(), vector2->end(), [](const Type& a, const Type& b) {return a.length > b.length; });
    Ответ написан
    2 комментария
  • Как добавить в comboBox.Items строку std::string в c++ WinForms?

    SerJook
    @SerJook
    кодер
    combobox->Items->Add(gcnew String(str.c_str()));
    Ответ написан
    Комментировать
  • Как в qt creator узнать размер диска?

    SerJook
    @SerJook
    кодер
    QStorageInfo storage("e:/");
    qDebug() << "name:" << storage.name();
    qDebug() << "fileSystemType:" << storage.fileSystemType();
    qDebug() << "size:" << storage.bytesTotal()/1000/1000 << "MB";
    qDebug() << "availableSize:" << storage.bytesAvailable()/1000/1000 << "MB";


    Ну и вверху не забудьте добавить
    #include <QStorageInfo>
    #include <QDebug>
    Ответ написан
    Комментировать
  • Почему не получается верифицировать подпись на С++ сделанную на Python?

    SerJook
    @SerJook
    кодер
    Потому что на вход RSA_verify надо подавать хэш данных, а не сами данные.

    std::string text = "hello world";
    SHA512_CTX sha_ctx = { 0 };
    unsigned char digest[SHA512_DIGEST_LENGTH];
    SHA512_Init(&sha_ctx);
    SHA512_Update(&sha_ctx, text.data(), text.length());
    SHA512_Final(digest, &sha_ctx);
    
    if (RSA_verify(NID_sha512, digest, SHA512_DIGEST_LENGTH, (const unsigned char*)sign.data(), sign.length(), publicRSA) == 1) {
       // Успех
    }
    Ответ написан
    3 комментария
  • Как работать с библиотекой CImg C++?

    SerJook
    @SerJook
    кодер
    Здесь полно примеров: https://github.com/dtschump/CImg/tree/master/examples
    Чтобы сохранить в файл используйте метод save()
    Ответ написан
    Комментировать
  • Как переопределить метод setData() QSqlQueryModel, что бы изменять цвет текста?

    SerJook
    @SerJook
    кодер
    Унаследуйся от класса QSqlQueryModel и переопредели метод data():

    QVariant MyModel::data(const QModelIndex &index, int role) const {
      if(role == Qt::TextColorRole) {
        return QVariant(QColor(Qt::blue));
      }
      return QSqlQueryModel::data(index, role);
    }
    Ответ написан
    Комментировать
  • Как понять что программирование это твое?

    SerJook
    @SerJook
    кодер
    Если у тебя глаза горят при виде кода, если ты готов ночами сидеть в отладчике, то это твоё!
    Если ты готов забыть про всё на свете, лишь бы решить интересную задачу, то это твоё!
    Самые лучшие программисты - это фанатики своего дела. Настоящий программист должен жить программированием!

    Есть желание знать все

    У меня такое желание было всегда. Я никогда не останавливался на чем-то одном. Потому что быть узким специалистом - это скучно.
    Мне всегда было плевать на задачи бизнеса. У меня с ним разные интересы. Их интересуют только деньги, а меня - только кодинг. Я делаю вид, что делаю то, что они просят, а они делают вид, что платят мне деньги.

    А если кого-то интересуют высокие зарплаты, то пусть лучше идут в юристы.
    Ответ написан
    1 комментарий
  • Почему нет треугольника?

    SerJook
    @SerJook
    кодер
    Неправильная обработка сообщения WM_SIZE:
    The low-order word of lParam specifies the new width of the client area.
    The high-order word of lParam specifies the new height of the client area.

    case WM_SIZE:
            glViewport(0, 0, LOWORD(lParam), HIWORD(lParam));


    5cd2ef0534175926741512.png
    Ответ написан
    1 комментарий
  • Как построить бинарное дерево с помощью списка смежности?

    SerJook
    @SerJook
    кодер
    Я так понимаю, на входе у вас массив, содержащий списки соседей(индексы) для каждой вершины графа.

    Берите любую вершину, у которой кол-во соседей меньше либо равно двум, и назначаете ее корнем.
    Для любой вершины корнем левого поддерева будет первый сосед в списке (если есть), который не совпадает с родительским. Рекурсивно строите левое поддерево.
    Корнем правого поддерева будет второй сосед в списке (если есть), который не совпадает с родительским.
    Рекурсивно строите правое поддерево.

    В итоге получите несортированное несбалансированное бинарное дерево
    Ответ написан
    Комментировать
  • Как подключить библиотеку с GitHub в свой проект (C++)?

    SerJook
    @SerJook
    кодер
    Предположим что вы используете Windows и Visual Studio. Тогда:

    1. Для работы этой библиотеки вам понадобится библиотека libcurl.
    Скорее всего вам придется собирать libcurl из исходников. В архиве с исходниками есть инструкция, как ее собирать на Windows (winbuild\BUILD.WINDOWS.txt). Соберите к примеру статическую библиотеку (.lib).

    2. Распакуйте файлы исходников из архива с библиотекой Kolsha/VK (из папки src) в папку вашего проекта.
    Добавьте эти файлы в ваш проект в Visual Studio.

    3. Укажите в свойствах проекта (С++ ->General->Additional include directories) путь к папке, содержащей хедеры libcurl (к примеру "с:\dev\curl-7.58.0\include\" )
    а также в (Linker->general->Additional library directories) путь к папке, содержащей собранную библиотеку (к примеру "c:\dev\curl-7.58.0\builds\libcurl-vc12-x86-release-static-zlib-static-ipv6-sspi-winssl\lib\").
    В свойства проекта -> Linker->Input->Additional dependencies добавьте "libcurl_a.lib".
    Ответ написан
    Комментировать
  • Как загрузить файл на сервер не используя cURL?

    SerJook
    @SerJook
    кодер
    Если размер файла не очень большой, можно попробовать с помощью WinInet:

    КОД
    #include <windows.h>
    #include <wininet.h>
    #include <fstream>
    #include <sstream>
    #include <iostream>
    #pragma comment(lib,"wininet.lib")
    
    int main(int argc, char* argv[])
    {
        // инициализируем WinInet
        HINTERNET hInternet = ::InternetOpen(TEXT("WinInet Test"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    
        if (hInternet != NULL) {
            // открываем HTTP сессию
            HINTERNET hConnect = ::InternetConnect(hInternet, TEXT("localhost"), INTERNET_DEFAULT_HTTP_PORT, NULL, NULL,
                                                    INTERNET_SERVICE_HTTP, 0, 1u);
    
            if (hConnect != NULL) {
                // открываем запрос
                HINTERNET hRequest = ::HttpOpenRequest(hConnect, TEXT("POST"), TEXT("test.php"), NULL, NULL, 0, INTERNET_FLAG_KEEP_CONNECTION, 1);
    
                if (hRequest != NULL) {
                    // посылаем запрос
                    std::string fileName = "c:\\test.png"; // путь к файлу
                    char hdrs[] = "Content-Type: multipart/form-data; boundary=---------------------------7d82751e2bc0858";
                    std::string frmdata = "-----------------------------7d82751e2bc0858\r\n";
                    // В этой строке "uploadedfile" - название поля формы
                    frmdata += "Content-Disposition: form-data; name=\"uploadedfile\"; filename=\"" + fileName + "\"\r\nContent-Type: application/octet-stream\r\n\r\n";
                    std::ostringstream ostrm;
                    std::ifstream fin(fileName, std::ios::binary);
                    if (fin) {
                        ostrm << fin.rdbuf();
    
                        frmdata.append(ostrm.str());
                        frmdata += "\r\n-----------------------------7d82751e2bc0858--\r\n";
    
                        BOOL bSend = ::HttpSendRequestA(hRequest, hdrs, strlen(hdrs), &frmdata[0], frmdata.size());
                        if (bSend) {
                            std::string res; // В этой переменной будет ответ сервера
                            for (;;) {
                                // читаем данные
                                char szData[1024];
                                DWORD dwBytesRead;
                                BOOL bRead = ::InternetReadFile(hRequest, szData, sizeof(szData) - 1, &dwBytesRead);
    
                                // выход из цикла при ошибке или завершении
                                if (bRead == FALSE || dwBytesRead == 0)
                                    break;
    
                                // сохраняем результат
                                szData[dwBytesRead] = 0;
                                res.append(szData);
                            }
                            std::cout << res;
                        }
                    }
                    // закрываем запрос
                    ::InternetCloseHandle(hRequest);
                }
                // закрываем сессию
                ::InternetCloseHandle(hConnect);
            }
            // закрываем WinInet
            ::InternetCloseHandle(hInternet);
        }
    
        return 0;
    }
    Ответ написан
    6 комментариев
  • Почему это компилируется и вообще как работает место в коде и что, так можно было (QSharedPointer)?

    SerJook
    @SerJook
    кодер
    Согласно стандарту C++11 такое не должно компилироваться. Но у Майкрософта своё видение стандартов.
    GCC выдаст ошибку
    error: could not convert ‘false’ from ‘bool’ to ‘QSharedPointer<QDataStream>'
    Ответ написан
  • При вводе пути к файлу через консоль CURL перестает работать, что делать?

    SerJook
    @SerJook
    кодер
    После CURLFORM_FILE должен идти указатель на "голую" строку (массив char, заканчивающийся нулем), вы же передаете объект типа string.
    Должно быть так:

    curl_formadd(&post, &last,
          CURLFORM_COPYNAME, "userfile",
          CURLFORM_FILE, filepath.c_str(),
          CURLFORM_END);
    Ответ написан
    Комментировать
  • Как правильно найти длину строки с кириллицей в юникоде на C++?

    SerJook
    @SerJook
    кодер
    Если под линуксом, то как-то так можно посчитать:

    #include <cstdlib>
    //....
    setlocale(LC_ALL, "ru_RU.utf8");
    int strLength = mbstowcs(NULL, strBody.c_str(), 0);


    в винде это работать увы не будет
    Ответ написан
    1 комментарий
  • Не создаётся дочернее окно WinAPI или CreateWindows возвращает нуль?

    SerJook
    @SerJook
    кодер
    Может потому, что вы регистрируете класс с именем "ChildMain", а пытаетесь создать окно класса "ChildWnd" ??
    Ответ написан
    Комментировать
  • Проблема с авторизацией при помощи CURL PHP?

    SerJook
    @SerJook
    кодер
    Там стоит защита с помощью CSRF-токена, вам нужно получить его и отправлять в заголовках запроса.
    Нужно повторно использовать сессию CURL.

    Набросал вам код:

    Код
    <?php 
        mb_internal_encoding('UTF-8');
            
        function get_token($curl, $url, $cookie) {
            curl_setopt($curl, CURLOPT_URL, $url); 
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);    
            curl_setopt($curl, CURLOPT_TIMEOUT, 30); 
            curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); 
            curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie);
            $response = curl_exec($curl);
        
            if (preg_match('/<meta content="([^"]+)" name="csrf-token"/s', $response, $matches)) {
               return $matches[1];
            } 
        }
    
      function auth($curl, $url, $cookie, $post, $csrf_token)
      {
          $headers = array(
            'X-CSRF-Token: '.$csrf_token,
            'X-Requested-With: XMLHttpRequest'
          );
        curl_setopt($curl, CURLOPT_URL, $url); 
        curl_setopt($curl, CURLOPT_HEADER, true);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 30); 
        curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'); 
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
        curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); 
        curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        return curl_exec($curl);
      }
    
      function read_brs( $curl, $url, $last_url, $cookie)
      {
        curl_setopt($curl, CURLOPT_URL, $url); 
        curl_setopt($curl, CURLOPT_REFERER, $last_url);
        curl_setopt($curl, CURLOPT_HEADER, true);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 30); 
        curl_setopt($curl, CURLOPT_POST, 0);
        curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3'); 
        curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie);
        curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie);
        return curl_exec($curl);
       }
    
        $curl = curl_init();
      $cookie_file = realpath("cookie.txt");
      $post = "utf8=✓&user[email]=Pogodinaa&user[password]=12345&commit=Войти";
      $url = 'http://rating.rucoop.ru/secondary/users/sign_in';
      $newUrl = "http://rating.rucoop.ru/secondary/ratings/for_group";
      $csrf_token = get_token($curl, 'http://rating.rucoop.ru/secondary/',$cookie_file);
      echo auth($curl, $url, $cookie_file, $post, $csrf_token);
      echo read_brs($curl, $newUrl, $url, $cookie_file);
    ?>
    Ответ написан
    2 комментария
  • Как удалить линии вокруг кнопок и прочих элементов в WinAPI?

    SerJook
    @SerJook
    кодер
    Попробуйте так:

    SendMessage(hWndButton, WM_CHANGEUISTATE, MAKEWPARAM(UIS_SET, UISF_HIDEFOCUS), 0);


    Можете отослать это сообщение родительскому окну, и тогда прямоугольник фокуса должен пропасть со всех дочерних контролов.
    Ответ написан
    1 комментарий
  • Как сделать окно игнорирующее нажатия мыши если не зажата клавиша шифт?

    SerJook
    @SerJook
    кодер
    Если говорить про Windows, то:

    Создаете окно с расширенными стилями WS_EX_LAYERED | WS_EX_TRANSPARENT|WS_EX_TOPMOST
    Устанавливаете окну степень прозрачности:
    SetLayeredWindowAttributes(hWnd, 0, 100, LWA_ALPHA);

    Устанавливаете хук на клавиатуру:
    hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardEvent, hInstance, NULL);

    Функция обработки событий клавиатуры (примерный вид):

    код
    LRESULT CALLBACK KeyboardEvent(int nCode, WPARAM wParam, LPARAM lParam)
    {
        if ((nCode == HC_ACTION))
        {
            KBDLLHOOKSTRUCT* hooked_key = (KBDLLHOOKSTRUCT*)lParam; 
            if (hooked_key->vkCode == VK_LSHIFT || hooked_key->vkCode == VK_RSHIFT) {
                bool shiftPressed = (wParam == WM_KEYDOWN);
                LONG oldStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
                if (shiftPressed) {
                    SetWindowLong(hWnd, GWL_EXSTYLE, oldStyle & (~WS_EX_TRANSPARENT));
                }
                else {
                    SetWindowLong(hWnd, GWL_EXSTYLE, oldStyle | WS_EX_TRANSPARENT);
                }
            }
        }
        return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
    }

    В ней динамически устанавливается и снимается расширенный стиль WS_EX_TRANSPARENT.

    При выходе убираете хук:
    UnhookWindowsHookEx(hKeyboardHook);
    Не знаю, как обойтись без хука, ведь неактивному окну не приходят события клавиатуры.
    Ответ написан
    Комментировать