1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. nuts

Beiträge von nuts

  • Skripte = Trojaner

    • nuts
    • 9. Januar 2010 um 18:57

    :rofl:

  • Skripte = Trojaner

    • nuts
    • 9. Januar 2010 um 18:41

    Würde eher sagen deine Uhr ist verschoben. :D

  • BASS dll verwenden (AndyTR)

    • nuts
    • 9. Januar 2010 um 18:39
    Zitat von progandy

    Wenn du willst, kannst du es ja machen (nimm als Beispiel die BASS.au3)
    [/autoit]

    Sieht so aus als müsste doch etwas mehr gemacht werden, z.B. ein Parameter für die Errorfunktion der Bass.au3, da auch andere Bass UDF's darauf zugreifen (wozu die dll übergeben werden müsste) .
    Ich schaus mir mal an, möchte aber niemand reinpfuschen.

  • BASS dll verwenden (AndyTR)

    • nuts
    • 9. Januar 2010 um 16:06

    Kann es sein, dass in diesem Paket: http://www.autoitscript.com/forum/index.php?showtopic=83481
    seit dem Update der Bass.au3 die anderen UDF's nichtmehr richtig funktionieren?

    Zitat von nuts


    Arbeitet jemand mit der neusten Version der BASS UDF's?
    Diese scheinen mir ziemlich fehlerhaft. z.B. BassEnc.au3 -> Zeile 108 WARNING: $bassenc_dll: possibly used before declaration.

    edit \ Noch was ist mir aufgefallen: zu den BassEnc.au3 Funktionen wir auch die _BASS_ErrorGetCode() aufgerufen.
    Diese Funktion erfordert aber mit der neusten Bass.au3 keinen Parameter mehr.
    Harmoniert noch nicht wirklich miteinander :(

  • [beendet] µit Light Januar 2010

    • nuts
    • 9. Januar 2010 um 14:53

    Ohne die befürchtete Stringquälerei bin ich dabei. :thumbup:

  • [beendet] µit Light Januar 2010

    • nuts
    • 9. Januar 2010 um 14:34

    Hm naja wir wollen jetzt den Wettbewerb nicht vorzeitig lösen, aber ist dabei nicht z.B. Schluss wenn ein e^ in der Formel vorkommt?
    Oder wir beschränken uns auf die in Autoit definierten Rechenarten?

  • COM-Objekt und die Datentypen.

    • nuts
    • 9. Januar 2010 um 14:21

    Wow ich glaubs nicht - es funktioniert :thumbup:
    Nicht nur die Umwandlung, sondern es wird tatsächlich ein EPG-Item erfolgreich erstellt 8)

    Tausend Dank, bastle schon 4 Tage an den paar Zeilen.

    opaed: Die Verbindung per ObjGet geht nur zu "DVBViewerServer.DVBViewer"
    Zu den untergordneten Methode lässt sich dann nur wie im meinem Skript eine Verbindung herstellen. ?(

  • COM-Objekt und die Datentypen.

    • nuts
    • 9. Januar 2010 um 13:57

    Hm meinste? Die Abfragen funktionieren ja alle. ?(
    Naja Versuch macht klug, melde mich wieder. ^^

  • Cotrolclick

    • nuts
    • 9. Januar 2010 um 13:36

    Kommt auf die Anwendung an. Vielleicht gibts ne bessere Möglichkeit als ein Klicker-Skript? Asnonsten gibt es noch die Mouse-Funktionen.

  • Cotrolclick

    • nuts
    • 9. Januar 2010 um 13:32

    Dann wirds mit Controlclick schwierig.

  • COM-Objekt und die Datentypen.

    • nuts
    • 9. Januar 2010 um 13:26
    Zitat

    ConsoleWrite(Number($item.Duration) & " " & VarGetType(Number($item.Duration)) &@CRLF) = 18991230004500 Int64


    edit \ vermutlich soll die Delphi Ausgabe von 18991230004500 das bedeuten: 0.004500 -> 45min im EPG (lt angezeigtem Sender EPG im Programm)
    1891230 hat irgendwas mit dem Delphiurknall zu tun.
    Die Objekte mit Daten zu füttern ist ein einziges Minenfeld. :(

    Mir ist durchaus bewusst, das Hilfe bei unbekannte, nicht testbaren Objekten schwierig ist.
    Solltet ihr Infos brauchen fragt einfach.

  • Nach jeden 4. Zeichen ein "-" setzen

    • nuts
    • 9. Januar 2010 um 13:09

    Nicht schlecht. :thumbup:
    Könnte je nach Anforderung den Nachteil haben, dass nachträgliche Eingaben die bisherige Eingabe nach rechts durchschieben.

  • COM-Objekt und die Datentypen.

    • nuts
    • 9. Januar 2010 um 12:49

    Hm? Der Forumbereich ist nur für Member.
    Hab den Firefox nicht installiert, aber wie muss ich den Link anpassen das jeder drauf zugreifen kann?

  • Nach jeden 4. Zeichen ein "-" setzen

    • nuts
    • 9. Januar 2010 um 12:40

    zu1.: Stimmt, wird geändert.
    zu2. Die Funktion _Newitem() ist ja nur ein Beispiel. Die Funktion kann ja beliebig geändert/erweitert werden (_Serialisvalid oder sowas)

  • [beendet] µit Light Januar 2010

    • nuts
    • 9. Januar 2010 um 11:18

    Grundsätzlich ist diese Aufgabe interessant.
    Ich verstehe nur nicht so ganz die Stringübergabe. Das artet in ganz wilde Regexp Konstruktionen für alle erdenklichen "Rechenarten" (sin, cos, e^, ln, Wurzel usw. wenn ich mir meinen Taschenrechner ansehe wird mir ganz schwindlig) aus.
    Soweit meine Gedanken dazu. :whistling:

  • Nach jeden 4. Zeichen ein "-" setzen

    • nuts
    • 9. Januar 2010 um 10:54

    Hab das jetzt mal mit 4 Controls und WM_Command umgesetzt.

    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <Guilistview.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 438, 192, 132)
    $ListView1 = GUICtrlCreateListView("Input1|Input2|Input3|Input4", 16, 16, 601, 265)
    Global $hLVHandle = GUICtrlGetHandle($ListView1)
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Input1", 130, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 1, "Input2", 130, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 2, "Input3", 130, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 3, "Input4", 130, 0)
    $Input1 = GUICtrlCreateInput("", 16, 320, 129, 24)
    GUICtrlSetLimit(-1, 4)
    $Input2 = GUICtrlCreateInput("", 168, 320, 129, 24)
    GUICtrlSetLimit(-1, 4)
    $Input3 = GUICtrlCreateInput("", 328, 320, 137, 24)
    GUICtrlSetLimit(-1, 4)
    $Input4 = GUICtrlCreateInput("", 496, 320, 121, 24)
    GUICtrlSetLimit(-1, 4)

    [/autoit] [autoit][/autoit] [autoit]

    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

    [/autoit] [autoit][/autoit] [autoit]

    $button = GUICtrlCreateButton("ADD", 250, 350, 100, 50)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hCM = GUICtrlCreateContextMenu($ListView1) ; ein Kontextmenü für das Listview erstellen
    Global $hCMDel = GUICtrlCreateMenuItem("Markierte Einträge löschen", $hCM) ; der 3. Kontextmenüeint

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button
    _NewItem()
    Case $hCMDel
    _GUICtrlListView_DeleteItemsSelected($hLVHandle)
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    $nNotifyCode = BitShift($wParam, 16)
    If $nNotifyCode = $EN_UPDATE Then
    Switch ControlGetFocus("Form1")
    Case "Edit1"
    If StringLen(GUICtrlRead($Input1)) = 4 Then GUICtrlSetState($Input2, $gui_focus)
    Case "Edit2"
    If StringLen(GUICtrlRead($Input2)) = 4 Then GUICtrlSetState($Input3, $gui_focus)
    Case "Edit3"
    If StringLen(GUICtrlRead($Input3)) = 4 Then GUICtrlSetState($Input4, $gui_focus)
    Case "Edit4" ;Vorsicht es droht eine Endlosschleife
    If StringLen(GUICtrlRead($Input4)) = 4 Then
    ConsoleWrite("Achtung - Dieser Befehl muss gut durchdacht sein" & @CRLF & "Soll der Fokus wieder auf Input1 gesetzt werden müssen die Controls zuerst wieder zurückgesetzt werden, da das Skript sonst in einer Endlosschleife hängt")
    _NewItem()
    GUICtrlSetData($Input1, "")
    GUICtrlSetData($Input2, "")
    GUICtrlSetData($Input3, "")
    GUICtrlSetData($Input4, "")
    GUICtrlSetState($Input1, $gui_focus)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    EndIf
    EndFunc ;==>MY_WM_COMMAND

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _NewItem() ; Funktion zum auslesen der Eingabefelder (Neuer Eintrag bzw. Eintrag bearbeiten)
    GUICtrlCreateListViewItem(GUICtrlRead($Input1) & "|" & GUICtrlRead($Input2) & "|" & GUICtrlRead($Input3) & "|" & GUICtrlRead($Input4), $ListView1)
    EndFunc ;==>_NewItem

    [/autoit]

    edit \ verbesserte Version

  • COM-Objekt und die Datentypen.

    • nuts
    • 9. Januar 2010 um 09:07

    Hallo, danke für deine Antwort. Das mit dem Link stimmt :( lässt sich aber nicht ändern.
    Hier ein Auszug aus dem Gespräch:

    Spoiler anzeigen
    Zitat


    Du holst dir erst die EPG Collection:


    QUELLTEXT
    $List = .EPGManager.Get(132,6 ,0,0)


    Danach das Item (alles pseudocode!):


    QUELLTEXT
    $Item = List.Item(0)


    Danach erzeugst Du Dir eine neues Item:


    QUELLTEXT
    $EPGAddBuffer = EPGManager.EPGAdd()
    $NewItem = EPGAddBuffer.Newitem()


    Und dann:


    QUELLTEXT
    NewItem.description = Item.Description
    NewItem.Title = Item.Title
    NewItem.ChannelID = Neue channelID
    NewItem.Genre = Item.Genre
    [...]


    Wenn alles durch ist machst Du:


    QUELLTEXT
    EPGAddBuffer.additem(NewItem)


    Das ganze in einer schleife für alle Items in der Collection und zum schluss kommt ein


    QUELLTEXT
    EPGAddBuffer.commit()

    Alles anzeigen

    Ich frage mal ob man die Com-Doku hier anhängen kann.

    Der Code im Startpost ist überarbeitet, da einige Eigenschaften "readonly" sind und daher gar nicht funktionieren können. :whistling:

    edit \ bezüglich Methoden / Events: Mal schaun ob die Doku angehängt werden darf.
    Ist zielführender, da ich totaler Anfänger im objektorientierten Programmieren bin.

    edit2 \ Com-Doku angehängt

    Dateien

    DVBViewer COM Interface.zip 204,34 kB – 280 Downloads
  • COM-Objekt und die Datentypen.

    • nuts
    • 8. Januar 2010 um 14:35

    Hey,

    sitze immernoch an einem Skript für den DVBViewer (TV-Software - in Delphi geschrieben).
    Folgendes soll gemacht werden: EPG-Daten von einem Sender holen und die gleichen Daten wieder setzen, nur für einen anderen Sender (der keine eigenen EPG-Daten hat).
    Soweit so gut - Hier mal der Link zum Gespräch mit dem Entwickler: http://www.dvbviewer.info/forum/index.php?showtopic=38502
    Und das Skript:

    Spoiler anzeigen
    [autoit]


    $DVBViewer = ObjGet("", "DVBViewerServer.DVBViewer");Verbindung aufbauen -> klappt
    If $DVBViewer = 0 Then; ohne Verbindung das Skript beenden
    MsgBox(1, "", "Keine Verbindung zum DVBViewer möglich")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $epg = $DVBViewer.EPGManager
    $get = $epg.Get(132,6 ,0,0)
    $count = $get.Count()
    $item = $get.Item(1)
    $add = $epg.addEPG
    $newitem = $add.newitem

    [/autoit] [autoit][/autoit] [autoit]

    with $item
    $charset = .Charset;
    $content = .Content;
    $Description = .Description;
    $duration = .Duration;
    $endtime = .EndTime;
    $EPGEventID = .EPGEventID;
    $Event = .Event;
    $EventID = .EventID;
    $serviceID = .ServiceID;
    $Time = .Time;
    $Title = .Title;
    $TransportID = .TransportID;
    ConsoleWrite(VarGetType($duration) & @CRLF)
    EndWith

    [/autoit] [autoit][/autoit] [autoit]

    with $newitem
    .charset=$charset
    .content = $content
    .Description = $Description

    [/autoit] [autoit][/autoit] [autoit]

    .Duration=$duration ; -> TDateTime (Delphi spezifisch?) entspricht einer Fliesskommazahl (double)
    .time=$Time ; -> TDateTime entspricht einer Fliesskommazahl (double)
    .event=$Event
    .eventID=$EventID
    .title=$Title
    .EPGEventID=$EPGID ; EPGChannelID vom neuen Sender (hier eurosport)

    [/autoit] [autoit][/autoit] [autoit]

    EndWith

    [/autoit] [autoit][/autoit] [autoit]

    $add.add($newitem)
    $add.commit()

    [/autoit]


    Leider interpretiert Autoit die geholten Daten "falsch" und bei der Übergabe kommt ein Error (Request to Objekt failed oder so ähnlich)

    Das wieder zurechtzubiegen funktioniert nur teilweise:

    Spoiler anzeigen
    [autoit]


    with $item
    $duration = .Duration; -> $duration wird als String interpretiert
    $endtime = .EndTime; -> string ..
    $Time = .Time; -> string ..
    EndWith
    with $newitem
    .Duration=_WinAPI_IntToFloat(Number($Duration)); -> Geht nach der Wandlung von String to Int to Float
    .time=_WinAPI_IntToFloat(Number($time)); -> Error
    EndWith

    [/autoit]


    Sehr verwirrend ?(

    [autoit]

    $Newitem.Duration = $Item.Duration; ohne Zwischenschritt klappts auch nicht

    [/autoit]


    Vielleicht fällt euch ja noch was ein?

    Gruß nuts

    P.S. aus der COM-Doku:

    Spoiler anzeigen
    Code
    EPGChannelID; // Longword (unsigned int)
    EventID; // Longword (unsigned int)
    Time; // Datetime (Double)
    Duration; // Datetime (Double)
    Event; // String
    Title; // String
    Description; // String
    CharSet; // Byte
    Content; // Byte
  • Shadows opensource Obfuscator

    • nuts
    • 7. Januar 2010 um 20:10

    Contra: Lange Variablen sind Gift für den Interpreter.

    Der Nachteil am öffentlichen, eigenen Obfuscator ist außerdem, dass er möglicherweise mit in die Decompilierer eingebaut werden kann.
    Ansonsten aber nicht schlecht gemacht ;)

  • Com-Objekt mit 2D Array Rückgabe

    • nuts
    • 7. Januar 2010 um 11:17

    Hm verdammt :(
    Gibts da kein workaround?

    Edit \ Gibts vielleicht eine .dll die man für den Aufruf verwenden könnte und das Ergebnis als Array liefert?
    Brauche nur die Daten, die SpeicherReferenz zum zurückgeben brauch ich erstmal nicht, da es die Funktion AddArray gar nicht gibt.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™