Come ottenere le proprietà della porta com in Windows utilizzando l'API Win32

 C Programming >> Programmazione C >  >> Tags >> API
Come ottenere le proprietà della porta com in Windows utilizzando l'API Win32

Nell'articolo precedente, ho descritto come possiamo trovare l'ID della porta Com di un dispositivo USB seriale (Arduino) con l'aiuto di VID e PID. Se non hai visto questo articolo puoi leggerlo, come ottenere Com Port Id di un dispositivo USB Serial.

In questo articolo, descriverò come ottenere le proprietà della porta com utilizzando l'API win32. In Windows, tutte le proprietà della porta Com (velocità di trasmissione, bit di stop, ecc.) sono archiviate nel registro delle finestre. Quindi per ottenere le proprietà di com devi solo leggere il registro di Windows.

Ho già scritto un articolo, come possiamo leggere e scrivere il registro di Windows usando l'API win32. Se sei nuovo e non sai come accedere al registro delle finestre utilizzando l'API win32. Puoi vedere questo articolo, Accedi al registro di Windows utilizzando l'API win32.

Se vuoi saperne di più sui componenti interni di Windows o su un'altra tecnologia, qui 10 giorni di prova gratuiti per te.

Veniamo quindi sull'argomento e vediamo il codice di esempio. In questo esempio, sto leggendo l'impostazione della porta com (baud rate, bit di stop ..ecc) usando l'API win32.

Per una migliore indentazione, fai doppio clic sul codice,

#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;
}

Guarda l'immagine qui sotto se eseguirai il codice sopra, otterrai tutte le impostazioni.

Dopo aver eseguito il codice,

Dopo aver eseguito il codice,

  • I migliori libri sulle 5 C.
  • Il miglior mouse di programmazione per sviluppatori.
  • Ottieni la PORTA COM del dispositivo seriale USB utilizzando VID e PID.
  • Lettura e scrittura del registro di Windows utilizzando WinAPI
  • Programmazione della porta seriale utilizzando l'API Win32.
  • Installa il monitor della porta in modo invisibile all'utente senza l'interazione dell'utente.
  • Domande del colloquio C++ con risposte.
  • Domande del colloquio di 100 C, potrebbe chiederti il ​​tuo intervistatore.
  • Domande sull'intervista C-Sharp.
  • Domande per l'intervista Python con risposta.
  • Layout di memoria in C.
  • Domande del colloquio di 100 C, potrebbe chiederti il ​​tuo intervistatore.
  • C Domande per l'intervista per l'esperienza.
  • 10 domande sull'allocazione dinamica della memoria
  • Gestione dei file in C, in poche ore