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. eukalyptus

Beiträge von eukalyptus

  • DllCallBack stürzt ab, außer ich verschiebe das GUI

    • eukalyptus
    • 25. Januar 2008 um 19:47

    hallo

    folgendes script stürzt nach ein paar callback-durchläufen immer ab!
    jedoch NICHT, wenn ich im GUI in die titlebar klicke und das GUI kontinuierlich verschiebe

    solange ich das GUI verschiebe, läuft die callback-routine einwandfrei!!!

    [autoit]

    $RecordCallBack=DllCallbackRegister ("_RecordCallBack", "int", "hwnd;ptr;int;int")

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

    $BASS = DllOpen(@ScriptDir & "\bass.dll")
    Global $HRecord,$cbcount=0

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

    GUICreate("TestCallBack")
    GUISetState()

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

    DllCall($BASS, "dword", "BASS_RecordInit", "dword", 0)
    DllCall($BASS, "dword", "BASS_RecordSetDevice", "dword", 0)
    $HRecord = DllCall($BASS, "hwnd", "BASS_RecordStart", "dword", 44100, "dword", 2, "dword", 128, "ptr", DllCallbackGetPtr($RecordCallBack), "dword", 0)

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

    While 1
    sleep(50)
    WEnd

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

    Func _RecordCallBack($hwnd,$ptr,$int1,$int2)
    Local $Ret
    $cbcount+=1
    ToolTip($cbcount & " " & $ptr & " " & $int1)
    Return 1
    EndFunc

    [/autoit]

    kann mir das bitte jemand erklären, oder mir eine lösung mitteilen?!?
    bin schon am verzweifeln...

    die dazu benötigte dll befindet sich im anhang (auch mit hilfedatei...)

    thx E

  • WebcamScript

    • eukalyptus
    • 22. Januar 2008 um 23:48

    was genau soll dein script denn können/machen?

    das erste script sieht auf den ersten blick ganz ok aus...
    aber das zweite versteh ich irgendwie nicht...
    du erstellst bei jedem aufruf der func ein neues, zusätzliches gui und connectest erneut die treiber der webcam!?

    ich hab vor über einem jahr mal ein script geschrieben, welches alle 10 sec ein webcambild gemacht, in jpg umgewandelt und dann auf einen server hochlädt - falls dir das was hilft werd ich mal versuchen es zu finden.

    aber was soll dein script wirklich genau machen?

    lgE

  • nach kompilieren läuft das Script nicht mehr

    • eukalyptus
    • 20. Dezember 2007 um 00:04

    compilier mal direkt im script-editor mit "build" (F7)

    sl, E

  • Icons klappen nicht, Bug im Compiler?

    • eukalyptus
    • 10. Dezember 2007 um 20:12

    ich hab mal einem button ein icon aus shell32.dll zugeordnet

    $button = GUICtrlCreateButton("", 5, 5, 50, 50, $BS_ICON)
    GUICtrlSetImage($button, @SystemDir & "\shell32.dll", 15)

    nach einem autoit-update ist mir dann aufgefallen, dass der zähler in GUICtrlSetImage nicht mehr stimmte! also statt 15 musste ich nun 14 oder 16(?) eingeben...


    das hat mir etwas kopfzerbrechen bereitet, herauszufinden, dass es am autoit-update lag ;)

  • Netzwerktraffic messen, die Zweite!

    • eukalyptus
    • 10. Dezember 2007 um 12:49

    starte netstat nicht mit jeder schleife erneut, sondern insgesammt nur 1 mal mit der intervall-abfrage:

    netstat -e 1
    (liefert alle 1 sekunden eine ausgabe)

    hab das mal kurz angetestet, hatte jedoch probleme den stdout korrekt auszulesen und hab jetzt leider keine zeit mehr zum weitertüffteln :(

    vielleicht hilft das ja...

    lgE

  • Programm ab xxx MB im RAM neustarten.

    • eukalyptus
    • 7. Dezember 2007 um 10:23

    kann mich leider grad nicht mehr erinnern, wo ich die func herhab...


    Spoiler anzeigen

    Global Const $PROCESS_QUERY_INFORMATION = 0x400
    Global Const $PROCESS_VM_READ = 0x10

    Func _ProcessGetMem($sProcess)
    ;get process ID
    $nPID = ProcessExists($sProcess)
    If $nPID = 0 Then Return -1
    ;get process handle, required for GetProcessMemoryInfo
    $aRet = DllCall("Kernel32.dll", "int", "OpenProcess", _
    "dword", $PROCESS_QUERY_INFORMATION+$PROCESS_VM_READ, "dword", False, "dword", $nPID)
    If @error Or ($aRet[0] = 0) Then Return -1
    $hProc = $aRet[0]
    ;create PPROCESS_MEMORY_COUNTERS to receive data, required for GetProcessMemoryInfo
    $structPROCESS_MEMORY_COUNTERS = DllStructCreate("dword; dword; uint peakmemsize; uint memsize; uint; uint; uint; uint; uint; uint")
    $nSize = DllStructGetSize($structPROCESS_MEMORY_COUNTERS)
    ;call GetProcessMemoryInfo
    $aRet = DllCall("Psapi.dll", "int", "GetProcessMemoryInfo", _
    "hwnd", $hProc, "ptr", DllStructGetPtr($structPROCESS_MEMORY_COUNTERS), "dword", $nSize)
    ;close process handle
    DllCall("Kernel32.dll", "int", "CloseHandle", "hwnd", $hProc)
    ;return memory size in kb
    Return DllStructGetData($structPROCESS_MEMORY_COUNTERS, "memsize") / 1024
    EndFunc

  • Kommandozeilen-Ausgabe in eine Textdatei schreiben ?

    • eukalyptus
    • 7. Dezember 2007 um 10:11

    hi

    du kannst die consolenausgabe direkt in dein script umleiten, schau dir doch in der hilfe die funktionen stdoutread und stderrread an.

    #include<Constants.au3>

    $foo=Run(@ComSpec & " /c " & 'command + parameter', "", @SW_HIDE,$STDOUT_CHILD)

    While1
    $line=StdoutRead($foo)
    If@errorThenExitLoop
    MsgBox(0,"STDOUT read:",$line)
    Wend


    das ist im prinzip dasselbe, wie die ausgabeumleitung ">dateiname", nur halt direkt in dein script...

  • Netzwerktraffic messen, die Zweite!

    • eukalyptus
    • 3. Dezember 2007 um 17:14
    Zitat von progandy

    Das liegt daran, dass man den Stream "leerlesen" muss, damit er geschlossen wird. Sonst wird jedesmal ein neuer geöffnet:

    das dachte ich zunächst auch und ich hab das auch ausprobiert, jedoch das problem wurde dadurch nicht gelöst! zumindest bei mir...

    startet man cmd.exe und ruft "netstat -e" mehrmals auf, wird auch der cmd.exe-speicher regelmässig um 4kb größer...allerdings nur bis zu einer gewissen grenze...

  • Netzwerktraffic messen, die Zweite!

    • eukalyptus
    • 3. Dezember 2007 um 15:20

    Hab mal etwas herumprobiert und es liegt meiner meinung nach am stdout stream

    hab dann bemerkt, dass bei meinen scripts das gleiche phänomen auftritt und das prog zusehends mehr und mehr speicher benötigt, wenn man den stdout liest. (getestet mit lame.exe und ftp.exe) allerdings habe ich meine progs noch nie lange genug laufen lassen sodaß es zu einem problem geworden wäre...

    könnte das ein bug sein?!?

  • Contest: uIT! #1 (24.11.2007)

    • eukalyptus
    • 3. Dezember 2007 um 01:37

    Zu dumm - das habe ich jetzt glatt übersehen... :(

    na dann außer konkurenz mein script:

    Spoiler anzeigen

    $t=StringSplit(FileRead(FileOpenDialog("","","(*.txt)")) & " ","")
    $a=1
    $s=""
    For $i= 1 To $t[0]
    $z=Asc($t[$i])
    If ($z<65)Or(($z>90)And($z<97))Or($z>122)Then
    If $i>$a+4 Then
    For $j= $a+2 to $i-2
    $y=Random($a+2,$i-2,1)
    $x=$t[$j]
    $t[$j]=$t[$y]
    $t[$y]=$x
    Next
    EndIf
    $a=$i
    EndIf
    Next
    for $i=1 To $t[0]
    $s=$s & $t[$i]
    Next
    MsgBox(0,"",$s)

    Original Text

    Spoiler anzeigen

    Mit neuen Algorithmen ließen die Gen-Forscher an der Cornell Universität ihren 850-Knoten-Supercomputer nach Verwandtschaften von Genen bei einigen Säugetieren suchen, nicht nur von Menschen und Mäusen, wie der Titel des berühmten Romans von John Steinbeck – der unter anderem ja auch Meeresbiologie studierte, aber die Elite-Universität Stanford ohne Abschluss verließ – lautet, sondern auch von Huhn und Ratte. Mit bestimmten Annahmen über die Änderung von Basenpaaren im Laufe der Evolution konnte die Forschergruppe um Adam Siepel aber nicht nur Verwandtschaften aufspüren, sondern auch über 300 bislang unbekannte menschliche Gene in der etwa 3 Milliarden "Zeichen" großen menschlichen DNA identifizieren, sowie neue Einzelheiten über einige Hundert der etwa 20.000 bereits identifizierten Gene ermitteln. Das berichtet Sciencedaily vorab, der ausführliche Bericht wird in der Dezember-Ausgabe von Science erscheinen.

    Bearbeitet

    Spoiler anzeigen

    Mit neeun Athgielmorn ließen die Gen-Foshcerr an der Cnerlol Usnirvietät ierhn 850-Konetn-Somrpeteuupcr ncah Vawnhdasttfercen von Genen bei eieingn Säuitregeen suchen, nihct nur von Mscneehn und Mäuesn, wie der Ttiel des berühmetn Rnaoms von John Seienbtck – der uentr anederm ja auch Mrbgiieeeoolse seuttride, aber die Etlie-Uiresinvtät Sftaornd onhe Ascsbulhs vlireeß – lutaet, sroednn auch von Huhn und Rttae. Mit btmsmetein Amannehn über die Änrudneg von Beenrpasaan im Lufae der Eulitovon kotnne die Fspghecroprrue um Aadm Spieel aebr nhict nur Veecrantdawshftn aufspüren, serodnn auch über 300 basinlg utbnanekne mhhncielsce Gene in der ewta 3 Mdlairelin "Zicheen" großen mscehhleincn DNA iezeedrifiitnn, soiwe neue Ezeelehiintn über eignie Hnderut der etwa 20.000 biretes iifteezrtedinin Gene etimeltrn. Das bicthreet Sacneeildicy vraob, der ausfühhcrlie Bheicrt wrid in der Dmbezeer-Augabse von Senccie eheercnsin.

    bin ziemlich gespannt, wie die anderen lösungsansätze so aussehen...

  • Mp3-Recording via bass.dll

    • eukalyptus
    • 1. November 2007 um 17:22

    Hallo

    ich hab mir ein mp3-recording programm gebastelt und dazu die bass.dll & bassenc.dll von http://www.un4seen.com/ verwendet

    UDF BASS.AU3:

    Spoiler anzeigen
    [autoit]


    $BASS = DllOpen(@ScriptDir & "\bass.dll")
    $BASSENC = DllOpen(@ScriptDir & "\bassenc.dll")
    Dim $HRecord,$CHFX

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

    Func Mp3Active()
    Local $Ret[1]
    $Ret = DllCall($BASSENC, "dword", "BASS_Encode_IsActive", "hwnd", $HRecord[0])
    Return $Ret[0]
    EndFunc ;==>Mp3Active

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

    Func StopMp3()
    DllCall($BASSENC, "dword", "BASS_Encode_Stop", "hwnd", $HRecord[0])
    EndFunc ;==>StopMp3

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

    Func CloseBass()
    DllCall($BASS, "dword", "BASS_RecordFree")
    DllClose($BASS)
    DllClose($BASSENC)
    EndFunc ;==>CloseBass

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

    Func SetInput($Init, $Chnl, $Volume, $Active)
    DllCall($BASS, "dword", "BASS_RecordSetDevice", "dword", $Init - 1)
    if $Volume >=0 Then $Ret = DllCall($BASS, "dword", "BASS_RecordSetInput", "dword", $Chnl, "dword", BitOR($Volume, 0x40000))
    If $Active = 1 Then $Ret = DllCall($BASS, "dword", "BASS_RecordSetInput", "dword", $Chnl, "dword", BitOR(1, 0x20000))
    If $Active = 0 Then $Ret = DllCall($BASS, "dword", "BASS_RecordSetInput", "dword", $Chnl, "dword", BitOR(1, 0x10000))
    EndFunc ;==>SetInput

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

    Func MakeMp3($output)
    DllCall($BASSENC, "long", "BASS_Encode_Start", "hwnd", $HRecord[0], "str", "lame --alt-preset insane - " & $output, "dword", 0, "dword", 0, "dword", 0)
    ;DllCall($BASSENC, "long", "BASS_Encode_Start", "hwnd", $CHFX[0], "str", "output.wav", "dword", 0, "dword", 0, "dword", 0)
    DllCall($BASS,"long","BASS_ChannelPlay","hwnd",$hrecord[0],"dword",0)
    EndFunc ;==>MakeMp3

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

    Func RecStart($Init,$gain,$attack,$release,$threshold,$ratio,$predelay)
    DllCall($BASS, "dword", "BASS_RecordSetDevice", "dword", $Init - 1)
    $HRecord = DllCall($BASS, "hwnd", "BASS_RecordStart", "dword", 44100, "dword", 2, "dword", 128, "dword", 0, "dword", 0)
    $CHFX=DllCall($BASS, "dword", "BASS_ChannelSetFX", "hwnd", $HRecord[0], "dword", 1, "dword", 0)
    $Ret=DllCall($BASS, "dword", "BASS_ErrorGetCode")
    $str="float gain;float attack;float release;float threshold;float ratio;float predelay"
    $struct=DllStructCreate($str)
    DllStructSetData($struct,"gain",$gain)
    DllStructSetData($struct,"attack",$attack)
    DllStructSetData($struct,"release",$release)
    DllStructSetData($struct,"threshold",$threshold)
    DllStructSetData($struct,"ratio",$ratio)
    DllStructSetData($struct,"predelay",$predelay)
    $Ret=DllCall($BASS, "dword", "BASS_FXSetParameters", "hwnd", $CHFX[0], "ptr", DllStructGetPtr($struct))
    $Ret=DllCall($BASS, "dword", "BASS_ErrorGetCode")
    EndFunc ;==>RecStart

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

    Func GetPeak()
    Local $Ret[1]
    Dim $Return[2]
    $Ret = DllCall($BASS, "dword", "BASS_ChannelGetLevel", "hwnd", $HRecord[0])
    $Return[0] = LoWord($Ret[0]) * 100 / 32768
    If $Return[0] < 0 Then $Return[0] = $Return[0] * (-1)
    $Return[1] = HiWord($Ret[0]) * 100 / 32768
    If $Return[1] < 0 Then $Return[1] = $Return[1] * (-1)
    Return $Return
    EndFunc ;==>GetPeak

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

    Func GetInputs($Init)
    Local $Ret[1], $Count, $Name
    Dim $Return[1][2]
    DllCall($BASS, "dword", "BASS_RecordInit", "dword", $Init - 1)
    For $Count = 0 To 10
    $Ret = DllCall($BASS, "dword", "BASS_RecordGetInput", "dword", $Count)
    If $Ret[0] <= 0 Then ExitLoop
    $Name = DllCall($BASS, "str", "BASS_RecordGetInputName", "dword", $Count)
    ReDim $Return[$Count + 2][2]
    $Return[$Count + 1][0] = $Name[0]
    $Return[$Count + 1][1] = LoWord($Ret[0])
    Next
    $Return[0][0] = $Count
    Return $Return
    EndFunc ;==>GetInputs

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

    Func GetDevices()
    Local $Count, $Ret[1], $Loop
    Dim $Return[1]
    For $Count = 0 To 10
    $Ret = DllCall($BASS, "dword", "BASS_RecordGetDeviceDescription", "dword", $Count)
    If $Ret[0] <= 0 Then ExitLoop
    Next
    ReDim $Return[$Count + 1]
    For $Loop = 0 To $Count - 1
    $Ret = DllCall($BASS, "str", "BASS_RecordGetDeviceDescription", "dword", $Loop)
    $Return[$Loop + 1] = $Ret[0]
    Next
    $Return[0] = $Count
    Return $Return
    EndFunc ;==>GetDevices

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

    Func LoWord($dword)
    If BitAND($dword, 0x8000) = 0 Then
    Return BitAND($dword, 0xFFFF)
    Else
    Return BitOR($dword, 0xFFFF0000)
    EndIf
    EndFunc ;==>LoWord

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

    Func HiWord($dword)
    Return BitAND($dword, 0xFFFF0000) / 0x10000
    EndFunc ;==>HiWord

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

    Func MakeLong($LoWord, $HiWord)
    Return BitOR(BitAND($HiWord * 0x10000, 0xFFFF0000), BitAND($LoWord, 0xFFFF))
    EndFunc ;==>MakeLong

    [/autoit]

    GetDevices liefert ein Array:
    [0]=Anzahl der Audiointerfaces
    [1]=Name des 1 Audiointerface
    [2]=Name des 2 Audiointerface
    .
    .

    GetInputs(1) liefert ein Array des 1 Audiointerface:
    [0][0]=Anzahl der AudioInputs
    [1][0]=Name des 1 AudioInputs (z.b: Mikrofoneingang)
    [1][1]=Eingestellte Lautstärke
    .
    .

    RecStart startet den Input. Noch NICHT die Aufnahme, aber man kann schon die Peaks ablesen
    Außerdem lassen sich noch Einstellungen des Compressors vornemen

    GetPeak liefert ein Array:
    [0]=Ausschlag des linken Kanals
    [1]=Ausschlag des rechten Kanals

    SetInput setzt einen AudioInput auf Aktiv oder Inaktiv und stellt die Lautstärke ein

    MakeMp3 schließlich startet die eigentliche Aufnahme und codiert als MP3


    man benötigt die Dateien Bass.dll, BasEnc.dll und Lame.exe


    dieses UDF ist natürlich auf mein programm zugeschnitten und z.z. sind keine @Error-Codes eingebaut.

    aber vielleicht kann ja jemand etwas damit anfangen...

    und vielleicht hat ja mal jemand Lust ein ordentliches UDF für Bass.dll zu coden ;)

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™