Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
- Fichiers d’en-tête : les fichiers d’en-tête nécessaires sont inclus au début du code.
- Définition du GUID : le GUID pour l'interface de notification des boutons GPIO est défini.
- Définition d’énumération : une énumération pour les types de boutons GPIO est définie.
-
Fonction GetDevicePath : une fonction substitut pour
GetDevicePathest fournie. Remplacez cela par l’implémentation réelle. -
Fonction principale : la
InjectButtonPressfonction 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.