Bin alle durch und es tut sich leider nichts... Ich mache bestimmt etwas falsch...Wenn ich ein solches Problem habe, dann erstelle ich mir einfach das entsprechende Gadget, mache die Änderung und schau im Callback, welche Events vom Gadgets bei der Änderung geschossen werden.
Eine Aufstellung der Events findest du z.B. hier. An den Namen kannst du schon erkennen, was dafür ungefähr in Frage kommen könnte. Dann einfach in deiner fremden Anwendung mit diesen Events durchprobieren.
DateGadget in einem anderen Programm verändern ?
Re: DateGadget in einem anderen Programm verändern ?
PureBasic 5.71 | Windows 10 Home (x64)
Re: DateGadget in einem anderen Programm verändern ?
Nimm diesen Beispielcode. Dann schaust dir die Ereignisse an. Ereignisse die nicht in Frage kommen und massenhaft geschossen werden, die schreibst ins Select rein (wie z.b. das #WM_Paint), damit sie nicht mehr angezeigt werden. Zum Schluß bleibt dir wahrscheinlich noch eine Hand voll Events über, die du dann in deinem externen Programm durchprobieren musst.
Code: Alles auswählen
EnableExplicit
Global OldWndProc
Procedure Hook (hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_PAINT
Default : Debug uMsg
EndSelect
ProcedureReturn CallWindowProc_(OldWndProc, hWnd, uMsg, wParam, lParam)
EndProcedure
OpenWindow(0, 0, 0, 200, 250, "DateGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
DateGadget(0, 10, 10, 180, 25, "Datum: %mm/%dd/%yyyy Time: %hh:%ii")
OldWndProc = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @Hook())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Re: DateGadget in einem anderen Programm verändern ?
Also ich denke es sollte die #WM_NOTIFY sein.
Aber selbst wenn ich diese an das andere Programm schicke, passiert nichts.
Aber selbst wenn ich diese an das andere Programm schicke, passiert nichts.
PureBasic 5.71 | Windows 10 Home (x64)
Re: DateGadget in einem anderen Programm verändern ?
Wenn du in deinem Originalprogramm eine Änderung des Datums machst, wann wird das im Kalender übernommen? Sofort bei jeder Änderung oder erst wenn du das Dategadget verläßt?
Um welches Programm handelt es sich eigentlich?
Um welches Programm handelt es sich eigentlich?
Re: DateGadget in einem anderen Programm verändern ?
Es wird sofort geändert. An dieses Gadget ist halt ein Kalender geknüpft, der sich dann auf das eingestellte Datum stellt. (Das passiert noch nicht)Wenn du in deinem Originalprogramm eine Änderung des Datums machst, wann wird das im Kalender übernommen? Sofort bei jeder Änderung oder erst wenn du das Dategadget verläßt?
Das Programm heißt "InfoBoard", hier der Link http://www.infoboard.biz/de/Um welches Programm handelt es sich eigentlich?
PureBasic 5.71 | Windows 10 Home (x64)
Re: DateGadget in einem anderen Programm verändern ?
Ich behaupte einfach mal, dass es ohne Weiteres nicht möglich ist, so von Aussen auf das fremde Programm einzuwirken.
(Es sei denn, es werden speziell dafür irgendwelche Schnittstellen zur Verfügung gestellt.)
(Es sei denn, es werden speziell dafür irgendwelche Schnittstellen zur Verfügung gestellt.)
Re: DateGadget in einem anderen Programm verändern ?
Ob es möglich ist oder nicht, ist ein Kapitel. Um weiter darauf einzugehen, fehlen einfach die Infos.
Re: DateGadget in einem anderen Programm verändern ?
Habe ich vergessen Euch entsprechende Infos zu geben ? Wenn dem so sein sollte, entschuldigt bitte.Ob es möglich ist oder nicht, ist ein Kapitel. Um weiter darauf einzugehen, fehlen einfach die Infos.
Hier die entsprechenden Sourcecodes die ich zum testen verwende. Ich hoffe die können Euch weiterhelfen.
Mit dem folgenden Code teste ich das setzen eines DateGadgets innerhalb eines anderen Programms.
(Das Gadget wird auch gesetzt, aber ich erhalte nicht wie benötigt in diesem Programm einen entsprechenden Event.)
Code: Alles auswählen
Enumeration #PB_Compiler_EnumerationValue
#Window_0
#Listview_0
#Date_0
EndEnumeration
Procedure OpenWindow_0()
If OpenWindow(#Window_0, 0, 0, 200, 260, "Date 1.0", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
DateGadget(#Date_0, 10, 20, 180, 20, "")
ListViewGadget(#Listview_0, 10, 50, 180, 200)
EndIf
EndProcedure
OpenWindow_0()
Repeat
WindowEvent = WaitWindowEvent(50)
Select WindowEvent
Case #PB_Event_Gadget
GadgetEvent = EventGadget()
Select GadgetEvent
Case #Date_0
AddGadgetItem(#Listview_0, -1, FormatDate("%hh:%ii", Date()) + " -> Event " + Str(Counter.l))
Counter.l + 1
Case #Listview_0
Select EventType()
Case #PB_EventType_LeftDoubleClick
ClearGadgetItems(#Listview_0)
EndSelect
EndSelect
EndSelect
Until WindowEvent = #PB_Event_CloseWindow
Code: Alles auswählen
Global hwnd
Procedure EnumWindows(whwnd)
Protected title$ = Space(1024)
If IsWindowVisible_(whwnd)
GetWindowText_(whwnd, @title$, 1024)
If title$ = "Date 1.0"
hwnd = whwnd
EndIf
EndIf
ProcedureReturn #True
EndProcedure
Procedure Set(Day.w, Month.w, Year.w)
Protected ghwnd, phwnd, pid, sysTime.SYSTEMTIME, *mem
EnumWindows_(@EnumWindows(),#True)
If hwnd
ghwnd = FindWindowEx_(hwnd, #Null, "SysDateTimePick32", #Null)
If ghwnd
If GetWindowThreadProcessId_(ghwnd, @pid)
phwnd = OpenProcess_(#PROCESS_ALL_ACCESS, 0, pid)
If phwnd
sysTime\wYear = Year.w
sysTime\wMonth = Month.w
sysTime\wDay = Day.w
*mem = VirtualAllocEx_(phwnd, #Null, SizeOf(SYSTEMTIME), #MEM_COMMIT, #PAGE_READWRITE)
If *mem
WriteProcessMemory_(phwnd, *mem, @sysTime, SizeOf(SYSTEMTIME), #Null)
SendMessage_(ghwnd, #DTM_SETSYSTEMTIME, 0, *mem)
VirtualFreeEx_(phwnd, *mem, SizeOf(Integer), #MEM_RELEASE)
EndIf
CloseHandle_(phwnd)
EndIf
EndIf
EndIf
EndIf
EndProcedure
Set(12.09.2012)PureBasic 5.71 | Windows 10 Home (x64)