所以我使用了一个时钟替换程序。问题是它也劫持了时钟的滴答声。因此,每当我点击通知区域的时钟时,程序的弹出菜单就会启动,而不是默认的windows时钟小部件。
我还在TrayClockWClass
上尝试了AHK ControlClick
。我仍然没有得到原来的小部件。是否有任何方法以编程方式启动原始小部件?我用的是Windows 10 1607。
我很好与RunDll, API, SendMessage或任何其他方式。
今天有人给我的问题点赞了。所以也许他们在寻找答案。我把它贴在autohotkey.com论坛上,我在那里得到了答案。
https://autohotkey.com/boards/viewtopic.php?t=21274ControlGet, hClock, Hwnd,, TrayClockWClass1, ahk_class Shell_TrayWnd ; https://autohotkey.com/board/topic/70770-win7-taskbar-clock-toggle/
if (hClock) {
VarSetCapacity(IID_IAccessible, 16), DllCall("ole32CLSIDFromString", "WStr", "{618736e0-3c3d-11cf-810c-00aa00389b71}", "Ptr", &IID_IAccessible)
if (DllCall("oleaccAccessibleObjectFromWindow", "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)
}