Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här avsnittet innehåller ett komplett kodexempel som visar hur du växlar ned en Windows-knapp och sedan uppåt. Exemplet innehåller nödvändiga huvudfiler och biblioteksfunktioner för att säkerställa att de fungerar fullt ut.
Förutsättningar
Innan du använder den här koden kontrollerar du att du har inkluderat följande huvudfiler och länkat de bibliotek som krävs:
#include <windows.h>
#include <setupapi.h>
#include <initguid.h>
#include <devpkey.h>
#include <stdio.h>
Kodexempel
Följande kod växlar ned den identifierade Windows-knappen och sedan uppåt:
#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";
}
Förklaring
- Rubrikfiler: De nödvändiga huvudfilerna inkluderas i början av koden.
- GUID-definition: GUID för GPIO-knapparnas notifieringsgränssnitt är definierat.
- Enum-definition: En enum för GPIO-knapptyper definieras.
-
GetDevicePath-funktion: En platshållarfunktion för
GetDevicePathtillhandahålls. Ersätt detta med den faktiska implementeringen. -
Huvudfunktion: Funktionen
InjectButtonPressutför följande steg:- Hämtar enhetssökvägen.
- Öppnar enheten.
- Skickar kommandon för att trycka ned och släppa upp knappen.
- Stänger handtaget till enheten.
Se till att du ersätter platshållarfunktionen GetDevicePath med den verkliga implementeringen för att få tag på sökvägen till din specifika enhet.