Partager via


Exemple de code du bouton Windows

Cette rubrique fournit un exemple de code complet qui montre comment basculer un bouton Windows vers le bas, puis vers le haut. L’exemple inclut les fichiers d’en-tête et les fonctions de bibliothèque nécessaires pour s’assurer qu’il est entièrement fonctionnel.

Conditions préalables

Avant d’utiliser ce code, vérifiez que vous avez inclus les fichiers d’en-tête suivants et lié les bibliothèques requises :

#include <windows.h>  
#include <setupapi.h>  
#include <initguid.h>  
#include <devpkey.h>  
#include <stdio.h>  

Exemple de code

Le code suivant bascule le bouton Windows identifié vers le bas, puis vers le haut :

#include <windows.h>  
#include <setupapi.h>  
#include <initguid.h>  
#include <devpkey.h>  
#include <stdio.h>  
   
// Define the GUID for the GPIO buttons notify interface  
DEFINE_GUID(GUID_GPIOBUTTONS_NOTIFY_INTERFACE,   
0x4a1e55b2, 0xf16f, 0x11d2, 0xbc, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);  
   
// Enum for GPIO button types  
typedef enum {  
    GPIO_BUTTON_WINDOWS = 0x01  
} GPIOBUTTONS_BUTTON_TYPE;  
   
// Function to get the device path  
LPWSTR GetDevicePath(LPGUID InterfaceGuid);  
   
int __cdecl InjectButtonPress(__in int argc, __in_ecount(argc) char **argv) {  
    LPWSTR DevicePath;  
    HANDLE FileHandle;  
    BOOL b;  
    BYTE buffer;  
    HWND hwnd;  
    MSG msg;  
  
    // Get the device path for the GPIO buttons notify interface  
    DevicePath = GetDevicePath((LPGUID)&GUID_GPIOBUTTONS_NOTIFY_INTERFACE);  
    if (DevicePath == NULL) {  
        printf("Failed to get device path.\n");  
        return 1;  
    }  
  
    // Open the device  
    FileHandle = CreateFile(DevicePath,  
                            GENERIC_WRITE,  
                            0,  
                            NULL,  
                            OPEN_EXISTING,  
                            0,  
                            NULL);  
    if (FileHandle == INVALID_HANDLE_VALUE) {  
        printf("Failed to open device.\n");  
        return 1;  
    }  
  
    // Send button down  
    buffer = GPIO_BUTTON_WINDOWS;  
    b = WriteFile(FileHandle, &buffer, sizeof(buffer), NULL, NULL);  
    if (!b) {  
        printf("Failed to send button down.\n");  
        CloseHandle(FileHandle);  
        return 1;  
    }  
  
    // Send button up  
    buffer = GPIO_BUTTON_WINDOWS;  
    b = WriteFile(FileHandle, &buffer, sizeof(buffer), NULL, NULL);  
    if (!b) {  
        printf("Failed to send button up.\n");  
        CloseHandle(FileHandle);  
        return 1;  
    }  
  
    // Close the device handle  
    CloseHandle(FileHandle);  
    return 0;  
}  
   
// Implementation of GetDevicePath function  
LPWSTR GetDevicePath(LPGUID InterfaceGuid) {  
    // Implementation to retrieve the device path  
    // This is a placeholder and should be replaced with actual code  
    return L"\\\\.\\DevicePath";  
}  

Explication

  1. Fichiers d’en-tête : les fichiers d’en-tête nécessaires sont inclus au début du code.
  2. Définition du GUID : le GUID pour l'interface de notification des boutons GPIO est défini.
  3. Définition d’énumération : une énumération pour les types de boutons GPIO est définie.
  4. Fonction GetDevicePath : une fonction substitut pour GetDevicePath est fournie. Remplacez cela par l’implémentation réelle.
  5. Fonction principale : la InjectButtonPress fonction effectue les étapes suivantes :
    • Récupère le chemin d’accès de l’appareil.
    • Ouvre l’appareil.
    • Envoie les commandes de descente et de montée du bouton.
    • Ferme le handle de l’appareil.

Veillez à remplacer la fonction d’espace réservé GetDevicePath par l’implémentation réelle afin de récupérer le chemin d'accès au périphérique pour votre appareil spécifique.