以编程方式显示Windows 10本机时钟小部件

时间:2016-08-09 10:09:25

标签: windows winapi widget windows-10 system-clock

所以我使用时钟替换程序。问题是它还劫持了时钟点击。因此,每当我点击通知区域中的时钟时,程序的弹出菜单就会启动而不是默认的Windows时钟小部件。

我还在ControlClick上尝试了AHK TrayClockWClass。我仍然没有获得原始小部件。有没有办法以编程方式启动原始窗口小部件?我使用Windows 10 1607。

我可以使用RunDll,API,SendMessage或任何其他方式。

1 个答案:

答案 0 :(得分:0)

有人今天提出了我的问题。所以也许他们正在寻找答案。我当时把它发布在autohotkey.com论坛上,我得到了答案。

https://autohotkey.com/boards/viewtopic.php?t=21274

ControlGet, hClock, Hwnd,, TrayClockWClass1, ahk_class Shell_TrayWnd ; https://autohotkey.com/board/topic/70770-win7-taskbar-clock-toggle/
if (hClock) {
    VarSetCapacity(IID_IAccessible, 16), DllCall("ole32\CLSIDFromString", "WStr", "{618736e0-3c3d-11cf-810c-00aa00389b71}", "Ptr", &IID_IAccessible)
    if (DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hClock, "UInt", OBJID_CLIENT := 0xFFFFFFFC, "Ptr", &IID_IAccessible, "Ptr*", accTrayClock))
        return
    VarSetCapacity(variant, A_PtrSize == 8 ? 24 : 16, 0), NumPut(VT_I4 := 3, variant,, "UShort")
    if (A_PtrSize == 4) ; https://autohotkey.com/boards/viewtopic.php?p=111355#p111355
        DllCall(NumGet(NumGet(accTrayClock+0)+25*A_PtrSize), "Ptr", accTrayClock, "Int64", NumGet(variant, 0, "Int64"), Int64, NumGet(variant, 8, "Int64")) ; IAccessible::DoDefaultAction
    else
        DllCall(NumGet(NumGet(accTrayClock+0)+25*A_PtrSize), "Ptr", accTrayClock, "Ptr", &variant) ; IAccessible::DoDefaultAction
    ObjRelease(accTrayClock)
}