Собранный c++ проект запускается в exe но при попытке открыть его через python он работает неккоректно

Рейтинг: 2Ответов: 1Опубликовано: 10.02.2023

Есть код на c++:

#include <iostream>
#include <Windows.h>
#include "locale.h"

using namespace std;


static const UINT32 DpiVals[] = { 100,125,150,175,200,225,250,300,350, 400, 450, 500 };

int GetRecommendedDPIScaling()
{
    int dpi = 0;
    auto retval = SystemParametersInfo(SPI_GETLOGICALDPIOVERRIDE, 0, (LPVOID)&dpi, 1);

    if (retval != 0)
    {
        int currDPI = DpiVals[dpi * -1];
        return currDPI;
    }

    return -1;
}

void SetDpiScaling(int percentScaleToSet)
{
    int recommendedDpiScale = GetRecommendedDPIScaling();

    if (recommendedDpiScale > 0)
    {
        int index = 0, recIndex = 0, setIndex = 0;
        for (const auto& scale : DpiVals)
        {
            if (recommendedDpiScale == scale)
            {
                recIndex = index;
            }
            if (percentScaleToSet == scale)
            {
                setIndex = index;
            }
            index++;
        }

        int relativeIndex = setIndex - recIndex;
        SystemParametersInfo(SPI_SETLOGICALDPIOVERRIDE, relativeIndex, (LPVOID)0, 1);
    }
}

int main(int argc, char** argv)
{
    setlocale(LC_ALL, "Russian");
    for (;;)
    {
        int n = 0, dpiToSet = argc;
        cin >> dpiToSet;
            SetDpiScaling(dpiToSet);
    }
    return 0;
}

Он выполняет изменение масштаба экрана в windows(DPI scale)

Собранный в exeшнике он работает корректно, но при попытке внедрения его в питоновский проект через команду

import subprocess

console = subprocess.run(["jjscale.exe"], stdin=subprocess.PIPE, shell=True)

Масштаб не меняется и экран зависает, при этом звук на ПК остается. В чем заключается проблема? Если в самом проекте на с++, то что в нем поменять, и если проблема заключается в вызове через питон, то какой командой его нужно запускать? Системой установлена 10 винда

Ответы

▲ -1

Проблема была в том, что subprocess неправильно передавал данные, из-за чего софт работал неправильно. с os.startfile все работает как надо.