DateGadget in einem anderen Programm verändern ?

Anfängerfragen zum Programmieren mit PureBasic.
IronEagle
Beiträge: 64
Registriert: 13.10.2012 14:41
Wohnort: Berlin

DateGadget in einem anderen Programm verändern ?

Beitrag 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 :)
PureBasic 5.71 | Windows 10 Home (x64)
IronEagle
Beiträge: 64
Registriert: 13.10.2012 14:41
Wohnort: Berlin

Re: DateGadget in einem anderen Programm verändern ?

Beitrag 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.
PureBasic 5.71 | Windows 10 Home (x64)
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: DateGadget in einem anderen Programm verändern ?

Beitrag 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.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: DateGadget in einem anderen Programm verändern ?

Beitrag 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.
IronEagle
Beiträge: 64
Registriert: 13.10.2012 14:41
Wohnort: Berlin

Re: DateGadget in einem anderen Programm verändern ?

Beitrag 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
PureBasic 5.71 | Windows 10 Home (x64)
Mr.L
Beiträge: 51
Registriert: 05.02.2011 21:04

Re: DateGadget in einem anderen Programm verändern ?

Beitrag 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
IronEagle
Beiträge: 64
Registriert: 13.10.2012 14:41
Wohnort: Berlin

Re: DateGadget in einem anderen Programm verändern ?

Beitrag von IronEagle »

Jaaaaa :D Du bist mein Held :)

1000 Dank, genau das habe ich gesucht...
PureBasic 5.71 | Windows 10 Home (x64)
IronEagle
Beiträge: 64
Registriert: 13.10.2012 14:41
Wohnort: Berlin

Re: DateGadget in einem anderen Programm verändern ?

Beitrag 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 ;)
PureBasic 5.71 | Windows 10 Home (x64)
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: DateGadget in einem anderen Programm verändern ?

Beitrag 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.
IronEagle
Beiträge: 64
Registriert: 13.10.2012 14:41
Wohnort: Berlin

Re: DateGadget in einem anderen Programm verändern ?

Beitrag von IronEagle »

Eine Aufstellung der Events findest du z.B. hier
Cool so eine Liste ist mal nice :)
PureBasic 5.71 | Windows 10 Home (x64)
Antworten