如何在VB6中声明LPCGUID?

3
我想在VB6中使用RegisterPowerSettingNotification

它需要一个GUID作为参数:
HPOWERNOTIFY RegisterPowerSettingNotification(
  HANDLE  hRecipient,
  LPCGUID PowerSettingGuid,
  DWORD   Flags
);

我没有找到任何有关在VB6中如何实现这个的例子。具体来说,我不明白如何定义这个GUID,我猜它不只是一个字符串。

这是我目前能想到的:

Private hPowerSrc&
Private hBattCapacity&
Private hMonitorOn&
Private hPowerScheme&

Private Const DEVICE_NOTIFY_WINDOW_HANDLE As Long = 0

Private Sub pInitPower()

    hPowerSrc = RegisterPowerSettingNotification(Me.hWnd, GUID_ACDC_POWER_SOURCE, DEVICE_NOTIFY_WINDOW_HANDLE)

    hBattCapacity = RegisterPowerSettingNotification(Me.hWnd, GUID_BATTERY_PERCENTAGE_REMAINING, DEVICE_NOTIFY_WINDOW_HANDLE)

    hMonitorOn = RegisterPowerSettingNotification(Me.hWnd, GUID_MONITOR_POWER_ON, DEVICE_NOTIFY_WINDOW_HANDLE)

    hPowerScheme = RegisterPowerSettingNotification(Me.hWnd, GUID_POWERSCHEME_PERSONALITY, DEVICE_NOTIFY_WINDOW_HANDLE)

End Sub

我该如何完成这个示例,包括API声明和GUID的调用?

谢谢!


(byval long, byref GUID, byval long) as long:https://learn.microsoft.com/en-us/windows/win32/api/guiddef/ns-guiddef-guid。 - GSerg
如何在VB6中使用GUID - Remy Lebeau
在VB6的作者中,我认为并非所有人都还活着。这可能是一个错误报告吗? - Алексей Неудачин
1个回答

4
根据如何在VB6中使用GUID,可以尝试以下代码:
Private hPowerSrc&
Private hBattCapacity&
Private hMonitorOn&
Private hPowerScheme&

Private Const DEVICE_NOTIFY_WINDOW_HANDLE As Long = 0

Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
End Type

Private Declare Function CLSIDFromString Lib "ole32" (ByVal lpsz As Long, ByRef clsid As GUID) As Long

Private Declare Function RegisterPowerSettingNotification Lib "user32" (ByVal hRecipient As Long, ByRef PowerSettingGuid As GUID, ByVal Flags As Long) As Long;

Private Sub pInitPower()

    Dim GUID_ACDC_POWER_SOURCE as GUID
    Dim GUID_BATTERY_PERCENTAGE_REMAINING as GUID
    Dim GUID_MONITOR_POWER_ON as GUID
    Dim GUID_POWERSCHEME_PERSONALITY as GUID

    CLSIDFromString StrPtr("{5D3E9A59-E9D5-4B00-A6BD-FF34FF516548}"), GUID_ACDC_POWER_SOURCE
    CLSIDFromString StrPtr("{A7AD8041-B45A-4CAE-87A3-EECBB468A9E1}"), GUID_BATTERY_PERCENTAGE_REMAINING
    CLSIDFromString StrPtr("{02731015-4510-4526-99E6-E5A17EBD1AEA}"), GUID_MONITOR_POWER_ON
    CLSIDFromString StrPtr("{245d8541-3943-4422-b025-13A784F679B7}"), GUID_POWERSCHEME_PERSONALITY

    hPowerSrc = RegisterPowerSettingNotification(Me.hWnd, GUID_ACDC_POWER_SOURCE, DEVICE_NOTIFY_WINDOW_HANDLE)

    hBattCapacity = RegisterPowerSettingNotification(Me.hWnd, GUID_BATTERY_PERCENTAGE_REMAINING, DEVICE_NOTIFY_WINDOW_HANDLE)

    hMonitorOn = RegisterPowerSettingNotification(Me.hWnd, GUID_MONITOR_POWER_ON, DEVICE_NOTIFY_WINDOW_HANDLE)

    hPowerScheme = RegisterPowerSettingNotification(Me.hWnd, GUID_POWERSCHEME_PERSONALITY, DEVICE_NOTIFY_WINDOW_HANDLE)

End Sub

2
在这里,ByRef PowerSettingGuid As Any 也可以成为一个很好的选择。然后,您可以根据需要传递空指针或字节或长整型数组的第一个元素。对于GUID来说,UDT有点过头了,但我们都倾向于这样做。这里更多的是文档说明而不是意义。 - Bob77
谢谢。我仍在尝试检查窗口消息,以便我能够实际尝试它。我已经发布了一个新问题,因为我还不明白如何处理这条消息。 - tmighty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接