【问题标题】:Show Windows 10 native clock widget programmatically以编程方式显示 Windows 10 本机时钟小部件
【发布时间】:2017-10-03 23:29:09
【问题描述】:

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

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

我对 RunDll、API、SendMessage 或任何其他方式都很好。

【问题讨论】:

  • 这不是一个受支持的工具,这里有一个发送点击的工具:stackoverflow.com/questions/3356309/…
  • @AlexK。这个例子根本不起作用。除了我的理解之外,它唯一做的就是点击控件(这也不起作用)

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


【解决方案1】:

今天有人支持我的问题。所以也许他们正在寻找答案。我当时在 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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多