Ich möchte eine eigene Uhr bzw. Timer im Systray anzeigen lassen, oder evtl. die Uhr von Windows (XP) ersetzten. Hier in diesem Thread wurde so ein ähnliches Thema mal angesprochen, hat mir aber nicht viel geholfen.
Ich hab es mit einer DLL-Injektion Probiert, nach dem Prinzip, wie auch der Taskmanager unter XP abgeschaltet werden kann, aber das funktioniert auch nicht.
Nun hab ich ein Beispiel gefunden, welches genau das tut was ich auch will, und hab mir dazu dann den C-Code angeschaut und bin zu dem Entschluss gekommen, dass es mit Hilfe der SetWindowsHookEx_() Funktion gehen muss. Hier der Link von dem C-Code
Nun hab ich darauf folgenden Code geschrieben:
Code: Alles auswählen
#TCM_CLOCKERROR = #WM_USER + 1
#CLOCKM_EXIT = #WM_USER + 9
Global g_hhook.l = #Null
Global g_hwndTClockMain.l = #Null
Global g_hInst.l = GetModuleHandle_(0)
Procedure.l MyWnd(hwnd, message, wParam, lParam)
Debug "MyWnd"
ProcedureReturn DefWindowProc_(hwnd, message, wParam, lParam)
EndProcedure
Procedure.l HookStart()
hwndTaskbar.l = FindWindow_("Shell_TrayWnd", "")
hwndTray.l = FindWindowEx_(hwndTaskbar, #Null, "TrayNotifyWnd", "")
g_hwndClock.l = FindWindowEx_(hwndTray, #Null, "TrayClockWClass", #Null)
idThread.l = GetWindowThreadProcessId_(hwndTaskbar, #Null)
g_hhook = SetWindowsHookEx_(#WH_CALLWNDPROC, @MyWnd(), g_hInst, idThread)
If hwndTaskbar And hwndTray And g_hwndClock And idThread And g_hhook
PostMessage_(hwndTaskbar, #WM_SIZE, #SIZE_RESTORED, 0)
ProcedureReturn #True
EndIf
SendMessage_(hwndMain, #TCM_CLOCKERROR, 0, 5)
ProcedureReturn #False
EndProcedure
Procedure HookEnd()
If g_hwndTClockMain And IsWindow_(g_hwndTClockMain)
SendMessage_(g_hwndTClockMain, #CLOCKM_EXIT, 0, 0)
EndIf
If(g_hhook <> #Null)
UnhookWindowsHookEx_(g_hhook)
EndIf
g_hhook = #Null
EndProcedure
OpenWindow(1, 0,0, 200, 200, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
g_hwndTClockMain = WindowID(1)
HookStart()
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
HookEnd()
Wenn einer von euch mir sagen könnte, wo mein Fehler ist, wäre das super. Zerbreche mir schon die ganze Zeit den Kopf darüber woran es liegen könnte, aber ich komm einfach nicht drauf.
