Udostępnij za pośrednictwem


Przykładowy kod przycisku systemu Windows

Ten temat zawiera kompletny przykładowy kod, który pokazuje, jak przełączać przycisk systemu Windows w dół, a następnie w górę. Przykład zawiera niezbędne pliki nagłówków i funkcje biblioteki, aby upewnić się, że jest w pełni funkcjonalny.

Wymagania wstępne

Przed użyciem tego kodu upewnij się, że dołączono następujące pliki nagłówkowe i połączono wymagane biblioteki:

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

Przykładowy kod

Poniższy kod przełącza zidentyfikowany przycisk systemu Windows w dół, a następnie w górę:

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

Wyjaśnienie

  1. Pliki nagłówków: niezbędne pliki nagłówkowe są dołączane na początku kodu.
  2. Definicja identyfikatora GUID: zdefiniowano identyfikator GUID dla interfejsu powiadamiania przycisków GPIO.
  3. Definicja wyliczenia: zdefiniowano wyliczenie dla typów przycisków GPIO.
  4. Funkcja GetDevicePath: udostępniona jest funkcja zastępcza dla GetDevicePath. Zastąp to rzeczywistą implementacją.
  5. Main Function: InjectButtonPress Funkcja wykonuje następujące czynności:
    • Pobiera ścieżkę urządzenia.
    • Otwiera urządzenie.
    • Wysyła polecenia przycisku naciśnięcia i zwolnienia.
    • Zamyka uchwyt urządzenia.

Upewnij się, że zastąpisz funkcję symbolu zastępczego GetDevicePath rzeczywistą implementacją, aby pobrać ścieżkę urządzenia dla określonego urządzenia.