Seite 1 von 2

DateGadget in einem anderen Programm verändern ?

Verfasst: 01.03.2013 17:00
von IronEagle
Hallo Leute,

gibt es eine Möglichkeit, dass ich ein DateGadget in einem anderen Programm auf das heutige Datum setzen kann?

Vielleicht ein ähnlicher Befehl wie:

Code: Alles auswählen

 SendMessage_(GadgetID.l, #WM_GETTEXT, TextLength.l, @Content.s)
Vielen Dank schon mal vorraus :)

Re: DateGadget in einem anderen Programm verändern ?

Verfasst: 02.03.2013 12:38
von IronEagle
Also das Handle des Gadgets aus dem anderen Programm habe ich. Ich frage mich nur, ob es überhaupt möglich ist diesem Gadget mit SendMessage_ ein neues Datum zu senden.

Re: DateGadget in einem anderen Programm verändern ?

Verfasst: 02.03.2013 13:09
von Josh
Prinzipiell sollte es funktionieren, allerdings nicht mit Pb-Befehlen sondern nur über Api's. Ich kenne die erforderlichen API Befehle für das SysDateTimePick32 nicht, musst du dir selber suchen.

Am besten erstellst du erst mal ein DateGadget mit Pb und versuchst in deinem eigenen Prozess die erforderlichen Änderungen per API vorzunehmen. Wenn du nur numerische Variablen benötigst, kannst du das einfach auf das ermittelte hWnd vom fremden Prozess umsetzen. Etwas komplizierter wird es, wenn du mit Strings arbeiten musst. In diesem Fall musst du erst mit VirtualAllocEx_ im fremden Prozess einen Speicher reservieren und mit WriteProcessMemory_ deinen String da reinstellen bzw. auslesen.

Re: DateGadget in einem anderen Programm verändern ?

Verfasst: 02.03.2013 13:54
von edel
Josh hat geschrieben:Etwas komplizierter wird es, wenn du mit Strings arbeiten musst. In diesem Fall musst du erst mit VirtualAllocEx_ im fremden Prozess einen Speicher reservieren und mit WriteProcessMemory_ deinen String da reinstellen bzw. auslesen.
Nicht nur Strings, sondern ueberall wo man den Speicher uebergibt.
Also auch bei DTM_SETSYSTEMTIME.

Re: DateGadget in einem anderen Programm verändern ?

Verfasst: 04.03.2013 17:31
von IronEagle
Also das DateGadget via. API zu verändern habe ich gelöst, nur habe ich keine Erfahrung mit VirtualAllocEx_ und WriteProcessMemory_ :(

Könnt ihr mir dabei vlt. ein wenig unter die Arme greifen ?

Viele Grüße

Re: DateGadget in einem anderen Programm verändern ?

Verfasst: 05.03.2013 23:10
von Mr.L
Wenn du das handle des fremnden DateGadgets kennst, hilft dir das hier evtl weiter...

Code: Alles auswählen

Procedure WriteDate(hDate, wYear.w,wMonth.w,wDay.w)
	Protected hProc, pId, sysTime.SYSTEMTIME, *mem, result
	
	If GetWindowThreadProcessId_(hDate, @pID)
		hProc = OpenProcess_(#PROCESS_ALL_ACCESS, 0, pID)
		If hProc
			sysTime\wYear = wYear
			sysTime\wMonth = wMonth
			sysTime\wDay = wDay
			*mem = VirtualAllocEx_(hProc, #Null, SizeOf(SYSTEMTIME), #MEM_COMMIT, #PAGE_READWRITE)
			If *mem
				WriteProcessMemory_(hProc, *mem, @sysTime, SizeOf(SYSTEMTIME), #Null)
				result = SendMessage_(hDate, #DTM_SETSYSTEMTIME, 0, *mem)
				VirtualFreeEx_(hProc, *mem, SizeOf(Integer), #MEM_RELEASE)
			EndIf
			CloseHandle_(hProc)
		EndIf
	EndIf
	ProcedureReturn result
EndProcedure

Re: DateGadget in einem anderen Programm verändern ?

Verfasst: 06.03.2013 11:40
von IronEagle
Jaaaaa :D Du bist mein Held :)

1000 Dank, genau das habe ich gesucht...

Re: DateGadget in einem anderen Programm verändern ?

Verfasst: 06.03.2013 11:47
von IronEagle
Ich habe leider noch ein letztes kleines Problem...

Das DateGadget kann ich nun ohne Probleme verändern :)
Leider erkännt das Zeilprogramm die änderung nicht. Also der an das DateGadget geknüpfte Kalender ändert seinen Tag nicht auf das gesetzte Datum.

Kann ich mit einem SendMessage-Befehl dem Fenster oder dem DateGadget sagen, dass es verändert wurde ?

Viele Grüße und vielen Dank für die tolle Hilfe ;)

Re: DateGadget in einem anderen Programm verändern ?

Verfasst: 06.03.2013 12:06
von Josh
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.

Re: DateGadget in einem anderen Programm verändern ?

Verfasst: 06.03.2013 12:12
von IronEagle
Eine Aufstellung der Events findest du z.B. hier
Cool so eine Liste ist mal nice :)