Member 12899279 Ответов: 2

Как запустить команды WMIC без использования функции system()


я хочу запустить несколько команд, которые нуждаются в wmic, но не хочу использовать систему по двум причинам
1)он открывает командную строку, которую я не хочу показывать пользователю
2)он использует файл .txt для записи результата, в который затем получает позже этот файл

но я хочу использовать каналы, если это возможно, чтобы я мог получить следующие вещи без функции system()в c++ и мог непосредственно хранить результат в переменных без необходимости открывать файлы, записывая в них результаты, а затем получать их из этих файлов
1)Ipv4-Адрес
2)UUid

Что я уже пробовал:

	system("ipconfig > ip.txt");
system("wmic csproduct get uuid > Uuid.txt")

2 Ответов

Рейтинг:
2

k5054

Если вы хотите захватить выходные данные от выполнения программы, используйте _popen(). напр

#include <iostream>
#include <cstdio>

int main()
{
    FILE *pipe = _popen("ipconfig", "r");
    
    if(pipe == NULL) {
        perror("popen");
        return 1;
    }

    char buffer[256];

    while(fgets(buffer, sizeof buffer, pipe) != NULL) {
        std::cout << buffer;
    }

    _pclose(pipe);

    return 0;
}


Member 12899279

спасибо K5054 на самом деле я сделал точно то же самое что вы опубликовали но моя проблема все еще там что это все еще окно консоли shos на долю секунды и я вообще не хочу показывать эту консоль

Рейтинг:
1

CPallini

Вы также можете получить прямой доступ WMI от C++ (через COM), видеть В WMI в C++ примеры применения - Win32-приложений, Майкрософт документы[^].