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

  • Wie speichere ich lParam von WM_Notif?

    • nuts
    • 12. Dezember 2009 um 17:44
    Zitat von Raupi

    Das hat aber nichts mit speichern zu tun. Du ruftst die Func Test innerhalb von _DoubleClickOnListView auf. Da existiert der Pointer auf $lParam auch noch. Nach verlassen von _DoubleClickOnListView eben nicht mehr.


    Hö? ich speichere $lParam in einer globalen Variable und rufe diese in meiner Testfunktion auf.

  • Wie speichere ich lParam von WM_Notif?

    • nuts
    • 12. Dezember 2009 um 17:37

    Hm als Variable gehts ja:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    ;Globals für die Funktion:

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

    $MainGui = GUICreate("DBClick test", 616, 395, 192, 120)
    ;GUISetBkColor(0x0)

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

    $ListView = GUICtrlCreateListView("Produkt Name", 8, 8, 498, 214);Das ListView mit $LVS_LIST...
    $TestItem = GUICtrlCreateListViewItem("TEST1", $ListView);Test 1
    $TestItem = GUICtrlCreateListViewItem("TEST2", $ListView);Test 2
    $hEdit = GUICtrlCreateInput("edit", 1,300 , 177, 21)
    $hbutton = GUICtrlCreateButton("edit", 150,300 , 177, 21)
    Global $test
    GUISetState(@SW_SHOW)
    GUIRegisterMsg($WM_notify, "_DoubleClickOnListView");Die Funktion wird bei einem Klick auf die GUI aufgerufen!

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _DoubleClickOnListView($hWndGUI, $MsgID, $wParam, $lParam);Die Eigentliche Funktion
    Local $tagNMHDR, $event, $hwndFrom, $code
    ;ConsoleWrite( $hWndGUI& @CRLF& $MsgID& @CRLF& $wParam& @CRLF& $lParam& @CRLF)
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3); Checkt wie das EVENT aussieht
    If $wParam = $ListView Then;Wenn der Klick auf das ListView ging..
    If $event = $NM_DBLCLK Then;.. Wenn es ein DoppelKlick war
    ; Hier kommt hin was er machen soll:
    ConsoleWrite("Doppelklick ins Listview " & @CRLF)
    EndIf
    EndIf
    $tagNMHDR = 0
    $event = 0
    $test = $lParam
    _test()
    $lParam = 0
    EndFunc ;==>_DoubleClickOnListView

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

    Func _test()
    local $tagNMHDR = DllStructCreate("int;int;int", $test)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3); Checkt wie das EVENT aussieht
    If $event = $NM_DBLCLK Then;.. Wenn es ein DoppelKlick war
    ; Hier kommt hin was er machen soll:
    ConsoleWrite("Testfunktion" & @CRLF)
    EndIf
    EndFunc

    [/autoit]
  • Wie speichere ich lParam von WM_Notif?

    • nuts
    • 12. Dezember 2009 um 17:26

    Na klar. Siehe mein Zusatz zur Funktion von Progandy.
    Dort werden weitere Infos aus $ilParam geholt (Zeile 17-27).

    Ansonsten hast du ein konkretes Problem dazu? So gut erklären kann ich die halbverstandenen Sachen auch nicht :wacko:

  • Wie speichere ich lParam von WM_Notif?

    • nuts
    • 12. Dezember 2009 um 17:13

    Das funktioniert bei WM_Notify über eine Structur (jetzt frag mich aber nicht wieso und weshalb :D)

    [autoit]


    Func _SHLV_WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    ; Prog@ndy
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hListView1
    Switch $iCode
    Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
    ;Local $ItemText = _GUICtrlListView_GetItemText($hListView1, _GUICtrlListView_GetSelectedIndices($hListView1), 0)
    ;_Browse($ItemText)

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

    Case $LVN_KEYDOWN
    ;Nuts-mod ohne Garantie ;)
    Local $tagLVKEYDOWN = $tagNMHDR & "; USHORT wVKey; UINT flags;"
    $tNMHDR = DllStructCreate($tagLVKEYDOWN, $ilParam)
    Switch DllStructGetData($tNMHDR, "wVKey")
    Case 0x27; rechte Pfeiltaste
    ;Local $ItemText = _GUICtrlListView_GetItemText($hListView1, _GUICtrlListView_GetSelectedIndices($hListView1), 0)
    ;_Browse($ItemText)
    Case 0x25 ;linke Pfeiltaste
    ;_Browseback()
    EndSwitch
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_SHLV_WM_NOTIFY

    [/autoit]


    Hilft dir das?

  • Rechnen

    • nuts
    • 11. Dezember 2009 um 14:21

    Ähm subzero :D
    Vielleicht durch 100?

  • Rechnen

    • nuts
    • 11. Dezember 2009 um 14:06

    Also wirklich versucht hast du das nicht oder?

    [autoit]


    $1 = (65/1.7)/1.7
    MsgBox(1, "", $1)

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

    $2 = 100*24 + 100*24*0.1
    MsgBox(1, "", $2)

    [/autoit]
  • _GetSoftwareVersion(Versionsnr. aus Registry auslesen)

    • nuts
    • 11. Dezember 2009 um 14:00

    Sehe ich ähnlich.
    Die Info wo das Programm seine Programmversion hinterlegt gehört daher auch ausgelagert (.ini, .txt oder sowas).

  • List View + OnEventModus

    • nuts
    • 10. Dezember 2009 um 17:34

    Klicks kannst du so auswerten. Funktioniert im OneventModus genauso.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    ;Globals für die Funktion:

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

    $MainGui = GUICreate("DBClick test", 616, 395, 192, 120)
    ;GUISetBkColor(0x0)

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

    $ListView = GUICtrlCreateListView("Produkt Name", 8, 8, 498, 214);Das ListView mit $LVS_LIST...
    $TestItem = GUICtrlCreateListViewItem("TEST1", $ListView);Test 1
    $TestItem = GUICtrlCreateListViewItem("TEST2", $ListView);Test 2
    $hEdit = GUICtrlCreateInput("edit", 1,300 , 177, 21)
    $hbutton = GUICtrlCreateButton("edit", 150,300 , 177, 21)

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

    GUISetState(@SW_SHOW)
    GUIRegisterMsg($WM_notify, "_DoubleClickOnListView");Die Funktion wird bei einem Klick auf die GUI aufgerufen!

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _DoubleClickOnListView($hWndGUI, $MsgID, $wParam, $lParam);Die Eigentliche Funktion
    Local $tagNMHDR, $event, $hwndFrom, $code
    ConsoleWrite( $hWndGUI& @CRLF& $MsgID& @CRLF& $wParam& @CRLF& $lParam& @CRLF)
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3); Checkt wie das EVENT aussieht
    If $wParam = $ListView Then;Wenn der Klick auf das ListView ging..
    If $event = $NM_DBLCLK Then;.. Wenn es ein DoppelKlick war
    ; Hier kommt hin was er machen soll:
    ConsoleWrite("Doppelklick ins Listview " & @CRLF)
    EndIf
    EndIf
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    EndFunc ;==>_DoubleClickOnListView

    [/autoit]

    edit \
    Hab hier noch eine etwas erweiterte mit Pfeiltasten:

    Spoiler anzeigen
    [autoit]


    Func _SHLV_WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    ; Prog@ndy
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hListView1
    Switch $iCode
    Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
    ;Local $ItemText = _GUICtrlListView_GetItemText($hListView1, _GUICtrlListView_GetSelectedIndices($hListView1), 0)
    ;_Browse($ItemText)

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

    Case $LVN_KEYDOWN
    ;Nuts Zusatz ohne Garantie ;)
    Local $tagLVKEYDOWN = $tagNMHDR & "; USHORT wVKey; UINT flags;"
    $tNMHDR = DllStructCreate($tagLVKEYDOWN, $ilParam)
    Switch DllStructGetData($tNMHDR, "wVKey")
    Case 0x27; rechte Pfeiltaste
    ;Local $ItemText = _GUICtrlListView_GetItemText($hListView1, _GUICtrlListView_GetSelectedIndices($hListView1), 0)
    ;_Browse($ItemText)
    Case 0x25 ;linke Pfeiltaste
    ;_Browseback()
    EndSwitch
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_SHLV_WM_NOTIFY

    [/autoit]
  • ObjGet() und IsObj()

    • nuts
    • 10. Dezember 2009 um 15:50

    Sehe keinen Fehler, habe nur die Fehlermeldung kommentiert (anschließend selbst ausprobiert und gemerkt: am Aufruf liegts nicht) :)
    Ist schon seltsam :wacko:

  • ObjGet() und IsObj()

    • nuts
    • 10. Dezember 2009 um 15:40

    Liegt der Schluss nahe, dass deine Anfrage nicht korrekt ist.
    http://msdn.microsoft.com/en-us/library/aa390788(VS.85).aspx

    edit \ bei mir gehts übrigens ?(

    [autoit]


    $HKLM = 0x80000002
    $BaseKey = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\"
    $objReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" &"." & "\root\default:StdRegProv")
    dim $test
    If IsObj($objReg) Then
    $objReg.GetStringValue($HKLM, $BaseKey, "allocatecdroms",$test)
    endif
    MsgBox(1,"", $test)

    [/autoit]
  • Decompiler unschädlich machen

    • nuts
    • 10. Dezember 2009 um 12:06

    Absoluten Schutz gibt es sicher nicht.
    Nach "Autoit + Decompilierer" googeln ist aber doch etwas zu einfach.

    Um kommerzialisieren gehts mir gar nicht, eher darum per Autoit verschlüsselte Daten nicht so einfach (decomilieren des Decrypt-Scripts) zugänglich zu machen.

    Was meint ihr dazu:
    Eine Inputbox zur Passwortabfrage, Fileinstall mit Randomziel/Randomnamen des Autoitscript und ein einfaches Run in einer Hochsprache "richtig" compliliert. Vom Programmieraufwand würde sich der Deckmantel in Grenzen halten und man könnte fürs Hauptskript bei Autoit bleiben.
    Bringt das was? Die genaue Vorgehensweise wäre ja im Deckmantel verborgen und sozusagen geheim.

  • Decompiler unschädlich machen

    • nuts
    • 10. Dezember 2009 um 09:38

    Wie soll das den Sourcecode schützen?

    Gedanken sollte man sich trotzdem mal über das Thema machen.
    Die Decomplilierer verhindern, dass man "sensible" Daten in Autoitprogrammen verwenden kann, da per Decompilierer sofort die Verschlüsselungsmethode inkl. Passwort zu sehen ist.
    Vielleicht könnte man einen simplen Deckmantel mit Passwortschutz in einer Hochsprache über das Autoitskript legen?
    Allerdings ist mir nicht klar, ob der Code nicht zur Laufzeit abgreifbar bleibt, schließlich muss das Skript trotzdem durch den Interpreter.

  • Video Codecs mit Autoit Beutzen

    • nuts
    • 9. Dezember 2009 um 17:13

    Also die Umsetzung wäre mal wirklich interessant. Gibts dazu dann ein fertiges Skript?

  • Erfassungsmaske - Springen zwischen den Inputfeldern per Enter-Taste

    • nuts
    • 9. Dezember 2009 um 17:11

    Genau, bei dem Schritt die ID des Controls gleich mitzunehmen bin ich dann irgendwie durcheinander gekommen.
    Aber naja läuft ja jetzt.

  • Erfassungsmaske - Springen zwischen den Inputfeldern per Enter-Taste

    • nuts
    • 9. Dezember 2009 um 15:52

    So mach ich das eigentlich auch, nur kam in diesem Fall nur Unsinn raus. ?(
    Muss genauer untersucht werden, aber okay läuft ja erstmal - danke dir. :thumbup:

    edit \ So nochmal: Die Nachricht "Enter wurde gedrückt" kommt gar nicht vom Input Control richtig (sondern vom Fenster?)?

  • Erfassungsmaske - Springen zwischen den Inputfeldern per Enter-Taste

    • nuts
    • 9. Dezember 2009 um 15:04

    So wollte noch kurz ein Feedback geben. Die Methode von Funkey hat jetzt den Alltagstest bestanden und wird weiterhin verwendet.
    Eine Frage dazu: Wie wurde der abgefeuerte Wert für "Enter" ermittelt (Zeile 53 im Bsp.)?

    water: Bei deiner Variante sind mir auch keine "Nebenwirkungen" aufgefallen, WM_Command war mir aber lieber.

  • Werktage / Arbeitstage eines Monats ermitteln

    • nuts
    • 9. Dezember 2009 um 13:29

    Sehr schön. :thumbup:

  • Video Codecs mit Autoit Beutzen

    • nuts
    • 9. Dezember 2009 um 13:28

    Grundsätzlich ist das möglich (s. Anhang).
    Allerdings ist Directshow sehr kompliziert und per Autoit imho nicht zufriedenstellend nutzbar.
    Eine Mediaverwaltung ist schon ein interessantes Projekt, die Wiedergabe würde ich allerdings externen Playern überlassen (mpc-hc z.B.).

  • Werktage / Arbeitstage eines Monats ermitteln

    • nuts
    • 9. Dezember 2009 um 10:51

    Beziehe doch noch die Feiertage mit ein.
    Gibts dazu nicht auch schon ne UDF?

  • GDI+: Filled Brushes

    • nuts
    • 8. Dezember 2009 um 11:58

    Sehr cool.
    Fehlen 2 includes zum Testen, habs mal angehängt.

    Dateien

    GDIP.au3 842,03 kB – 308 Downloads

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™