hi,
ich möchte mehrere Daten speichern, um diese dann in ein SysDateTimePick32 Element einzutragen in einer externen Applikation. Wie mache ich das am besten?
hi,
ich möchte mehrere Daten speichern, um diese dann in ein SysDateTimePick32 Element einzutragen in einer externen Applikation. Wie mache ich das am besten?
ich möchte mehrere Daten speichern
Daten = Datumswerte
in einer externen Applikation
Da du erkennen konntest, dass es sich um ein SysDateTimePick32 - Control handelt (AutoItWindowInfo ?), brauchst du das Handle/die ID dieses Controls. und kannst dann mit den Funktionen aus der AutoIt-UDF darauf zugreifen.
Schau dir mal das Bsp. zu _GUICtrlDTP_SetSystemTime an.
Ich weiß jetzt nicht welcher Kalender dort verwendet wird, evtl. hilft dir dann auch das hier: Maske zum Markieren in Monatskalender erstellen
ja, es sind datumswerte und ich kann mir das format in dem ich sie lese aussuchen und moechte dann das datum entsprechend in dem SysDateTimePick32 setzen dessen id ich auch kenne. ich gucke mir mal das beispiel an, dankeschoen.
hi, ist mir noch etwas unklar:
meine Kalenderbox enthaelt jahr monat tag yyyy-mm-dd und daneben einen kalender zum auswählen und ich möchte jetzt automatisiert das datum überschreiben. ich habe das datum in ein array gelesen und folgendes probiert:
Local $hCalendar2 = GUICtrlGetHandle("SysDateTimePick321")
_GUICtrlDTP_SetSystemTime($hCalendar2, $aBeginDateArray)
wenn ich nur jahr monat tag in meinem array habe bemängel er das das array zu kurz ist und wenn ich fuer die zeit min 0en auffülle nimmt er es aber gibt false zurueck und aendert den wert nicht.
was mache ich falsch?
das element ist spähbar und wird als SysDateTimePick32 Instanz 1 angezeigt.
Zeig uns bitte mal etwas mehr Code, auch mit der Deklaration und Befüllung des Arrays.
Zum Anzeigen von Code im Post verwende bitte aus dem Menü im Editfeld: </> (Code)
Local $sBeginDate=""
$sBeginDate = _Excel_RangeRead($oWorkbook_1, "Basisdaten", "F2")
; danach steht in soetwas "2013.10.24"
Local $aBeginDateArray = StringSplit($sBeginDate, ".")
Local $aTimeFillerArray = [ 0 , 0, 0]
_ArrayAdd($aBeginDateArray, $aTimeFillerArray)
; erst habe ich es mit dem ursprungsarray versucht und dann die zeitwerte mit nullen befuellt
WinWait("[CLASS:#32770]")
WinActivate("[CLASS:#32770]")
WinWaitActive("[CLASS:#32770]")
; hier werden andere controls bearbeitet
Local $hCalendar2 = GUICtrlGetHandle("SysDateTimePick321")
_GUICtrlDTP_SetFormat($hCalendar2, "yyyy MM dd")
Local $bSucces = _GUICtrlDTP_SetSystemTime($hCalendar2, $aBeginDateArray)
; so sah mein versuch aus
Alles anzeigen
OK, schau bitte in meine Signatur, dort findest du ein Array Tutorial. Bitte gründlich lesen (Deklaration und Wertzuweisung)!
Dann wirst du merken, was du falsch gemacht hast.
also im prinzip sehen die arrays so aus wie ich das erwartet habe, aber im array an 0. stelle steht bei mir die laenge nach dem stringsplit und in dem bsp ein bool, brauche ich den bool fuer das interface?
Local $aTimeFillerArray = [ 0 , 0, 0]
Das ist KEINE gültige Arraydeklaration!
Schau noch mal genau hin. Wenn du den Fehler selber siehst, kannst du es dir besser merken.
aha muesste so aussehen:
Local $aTimeFillerArray[3] = [ 0 , 0, 0]
brauche ich trotzdem den bool an stelle 0 des arrays?
Lies in der Funktionsbeschreibung nach, welche Werte das Array enthalten muß. Und genau so baust du es dann auf.
Übrigens: StringSplit kann man auch mit einem zusätzlichen Flag aufrufen, dann wird kein Zähler an [0] zurück gegeben.
Dankeschoen fuer die Hilfe.
leider scheitert es immernoch mit dem setzen:
mein array sieht jetzt so aus:
False|2013|10|25|0|0|0
und ich bekomme als rueckgabe false also setzen klappt nicht, kann ich infos bekommen woran es liegt und falls ja wie?
Bitte poste immer deinen Code. Sonst kann ich nicht sehen, was du falsch machst.
Das Array muß 7 Elemente haben (daraus wird die Datumsstruktur befüllt) aber wenn du die Zeit auf '0' setzt, kannst du das beim Deklarieren auch weglassen. Beim Auslesen verwendet AutoIt dann für: kein Wert = 0.
Also: $a_Date[7] = [False, 2013, 10, 25] ist identisch mit $a_Date[7] = [False, 2013, 10, 25, 0, 0, 0]
EDIT:
Für ein besseres Verständnis ist es durchaus sinnvoll sich auch einmal die UDF anzuschauen. In SciTE: Cursor auf "#include UDF-Datei.au3" setzen und <Alt+I>. öffnet die Include Datei.
Die Funktion sieht dort so aus:
Func _GUICtrlDTP_SetSystemTime($hWnd, ByRef $aDate)
Local $tDate = DllStructCreate($tagSYSTEMTIME)
DllStructSetData($tDate, "Year", $aDate[1])
DllStructSetData($tDate, "Month", $aDate[2])
DllStructSetData($tDate, "Day", $aDate[3])
DllStructSetData($tDate, "Hour", $aDate[4])
DllStructSetData($tDate, "Minute", $aDate[5])
DllStructSetData($tDate, "Second", $aDate[6])
Return _GUICtrlDTP_SetSystemTimeEx($hWnd, $tDate, $aDate[0])
EndFunc ;==>_GUICtrlDTP_SetSystemTime
es liegt am handle den bekomme ich nicht richtig:
also es ist wie folgt ich kann alles mit autoit info ausspähen:
die basic window info sagt mir das es ein #32770 Class Fenster ist und in diesem fenster befinden sich 2 Elemente der Class SysDateTimePick32 Instance 1 und 2 die ich bearbeiten möchte. mein Code für den Handle sieht so aus:
Local $hCalendar1 = GUICtrlGetHandle("SysDateTimePick322")
; ich dachte die Controlid setzt sich aus Class+Instanz zusammen quasi SysDateTimePick32+instance2=SysDateTimePick322 scheint aber so nicht zu funktionieren? das hat bisher bei buttons und aehnlichem fuer mich auch immer so funktioniert
GUICtrlGetHandle("SysDateTimePick322")
DAS geht nur für eigene Ctrl.
Local $hCalendar = ControlGetHandle("FENSTERTITEL", "", "[CLASS:SysDateTimePick322; INSTANCE:1]") -- hier die Klassen- und Instancenamen für das Ctrl genau eintragen
Übrigens: "[CLASS:#32770]" als Identifizierung für das Fenster ist etwas ungünstig, das ist die Standard-Windows-Fensterklasse.
Local $hCalendar = ControlGetHandle("FENSTERTITEL", "", "[CLASS:SysDateTimePick322; INSTANCE:1]")
Bei CLASS:SysDateTimePick322 ist eine 2 zu viel...
Local $hCalendar = ControlGetHandle("FENSTERTITEL", "", "[CLASS:SysDateTimePick32; INSTANCE:1]")
Local $hCalendar = ControlGetHandle("FENSTERTITEL", "", "[CLASSNN:SysDateTimePick321]")
; ich dachte die Controlid setzt sich aus Class+Instanz zusammen quasi SysDateTimePick32+instance2=SysDateTimePick322 scheint aber so nicht zu funktionieren?
Zu controlID liest du hier: https://www.autoitscript.com/autoit3/docs/intro/controls.htm
ZitatID - The internal control ID. The Control ID is the internal numeric identifier that windows gives to each control. It is generally the best method of identifying controls. In addition to the AutoIt Window Info Tool, other applications such as screen readers for the blind and Microsoft tools/APIs may allow you to get this Control ID
ok, vielen dank. ich versuche es morgen.
das war ein missverstaendnis meinerseits da ich vorher controlcommand benutzt habe
Function ControlCommand
ControlCommand ( "title", "text", controlID, "command" [, "option"] )
da steht als dritter parameter dann controlid und der sah immer so aus Button4 und dann habe angenommen es handelt sich um die gleiche art von controlid. aber jetzt brauche ich die ganze information und sie heisst dann wieder control id.
es funktioniert jetzt, danke.