So erhalten Sie COM-Port-Eigenschaften in Windows mithilfe der Win32-API

 C Programming >> C-Programmierung >  >> Tags >> API
So erhalten Sie COM-Port-Eigenschaften in Windows mithilfe der Win32-API

Im vorherigen Artikel habe ich beschrieben, wie wir die Com-Port-ID eines seriellen USB-Geräts (Arduino) mit Hilfe von VID und PID finden können. Wenn Sie diesen Artikel nicht gesehen haben, können Sie ihn lesen, wie man die Com-Port-ID eines seriellen USB-Geräts erhält.

In diesem Artikel werde ich beschreiben, wie wir mit der Win32-API COM-Port-Eigenschaften abrufen können. In Windows werden alle Com-Port-Eigenschaften (Baudrate, Stoppbit usw.) in der Windows-Registrierung gespeichert. Um also die com-Eigenschaften zu erhalten, müssen Sie nur die Windows-Registrierung lesen.

Ich habe bereits einen Artikel geschrieben, wie wir die Windows-Registrierung mit der Win32-API lesen und schreiben können. Wenn Sie neu sind und nicht wissen, wie Sie mit der win32-API auf die Windows-Registrierung zugreifen. Sie können diesen Artikel lesen, Greifen Sie mit der Win32-API auf die Windows-Registrierung zu.

Wenn Sie mehr über die Windows Internals oder eine andere Technologie erfahren möchten, finden Sie hier 10 kostenlose Testtage für Sie.

Kommen wir also zum Thema und sehen uns den Beispielcode an. In diesem Beispiel lese ich die COM-Port-Einstellung (Baudrate, Stoppbit usw.) mithilfe der Win32-API.

Zum besseren Einrücken doppelklicken Sie auf den Code,

#include "stdafx.h"
#include <initguid.h>
#include <windows.h>
#include <Setupapi.h>


#define TOTAL_BYTES_READ    48
#define OFFSET_BYTES 48


BOOL ReadComConfiguration(HKEY hKeyParent, PWCHAR subkey, PWCHAR valueName, PWCHAR* readData)
{
    HKEY hKey;
    DWORD len = TOTAL_BYTES_READ;
    DWORD readDataLen = len;
    PWCHAR readBuffer = (PWCHAR)malloc(sizeof(PWCHAR) * len);
    if (readBuffer == NULL)
    {
        return FALSE;
    }
    // Check if the registry exists
    DWORD Ret = RegOpenKeyEx(hKeyParent, subkey, 0, KEY_READ, &hKey);
    if (Ret == ERROR_SUCCESS)
    {
        Ret = RegQueryValueEx(hKey, valueName, NULL, NULL, (BYTE*)readBuffer, &readDataLen);
        while (Ret == ERROR_MORE_DATA)
        {
            // Get a buffer that is big enough.
            len += OFFSET_BYTES;
            readBuffer = (PWCHAR)realloc(readBuffer, len);
            readDataLen = len;
            Ret = RegQueryValueEx(hKey, valueName, NULL, NULL, (BYTE*)readBuffer, &readDataLen);
        }
        if (Ret != ERROR_SUCCESS)
        {
            // close registry
            RegCloseKey(hKey);
            return false;
        }
        // copy read data
        *readData = readBuffer;
        // close registry
        RegCloseKey(hKey);
        return true;
    }
    else
    {
        return false;
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    // Com port
    TCHAR PortNo[] = L"COM1:";
    int Status = 0;
    PWCHAR readMessage = nullptr;

    // Read com port configuration from the registry
    Status = ReadComConfiguration(
                 HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Ports", PortNo, &readMessage);
    if (Status != TRUE)
    {
        return FALSE;
    }

    if (readMessage != nullptr)
    {
        // Display com status
        printf(" COM Status = %S\n", readMessage);
        free(readMessage);
        readMessage = nullptr;
    }
    return 0;
}

Sehen Sie sich das folgende Bild an, wenn Sie den obigen Code ausführen, erhalten Sie alle Einstellungen.

Nachdem Sie den Code ausgeführt haben,

Nachdem Sie den Code ausgeführt haben,

  • Die 5 besten C-Bücher.
  • Beste Programmiermaus für Entwickler.
  • Ermitteln Sie den COM-PORT des seriellen USB-Geräts mithilfe von VID und PID.
  • Lesen und Schreiben der Windows-Registrierung mit WinAPI
  • Serielle Port-Programmierung mit Win32-API.
  • Installieren Sie den Port-Monitor im Hintergrund ohne Benutzereingriff.
  • C++-Interviewfragen mit Antworten.
  • 100-C-Interviewfragen, die Ihr Interviewer stellen könnte.
  • C-Sharp-Interviewfragen.
  • Python-Interviewfragen mit Antwort.
  • Speicherlayout in C.
  • 100-C-Interviewfragen, die Ihr Interviewer stellen könnte.
  • C Interviewfragen für die Erfahrung.
  • 10 Fragen zur dynamischen Speicherzuweisung
  • Dateiverwaltung in C in wenigen Stunden