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

Beiträge von Pennywise

  • Standard Audiogerät setzen (Win XP + Win 7)

    • Pennywise
    • 4. April 2013 um 21:13

    Sorry für die Leichenschändung, aber da man über Google dieses Topic immer ganz oben findet, wollte ich dann doch mal meine Lösung posten:

    Über nircmd (http://www.nirsoft.net/utils/nircmd.html) und:

    [autoit]

    Run('nircmd.exe setdefaultsounddevice "Lautsprecher"')
    Run('nircmd.exe setdefaultsounddevice "Kopfhörer"')

    [/autoit]


    usw.

    Viel Spaß damit! :)

  • Master Sound Level auslesen

    • Pennywise
    • 16. Juli 2012 um 15:32
    [autoit]

    #include <AutoItObject.au3>

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

    Global $clsid = _AutoItObject_CLSIDFromString("{BCDE0395-E52F-467C-8E3D-C4579291692E}")
    Global $iid = _AutoItObject_CLSIDFromString("{A95664D2-9614-4F35-A746-DE8DB63617E6}")

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

    Global $plist
    _AutoItObject_CoCreateInstance(DllStructGetPtr($clsid), 0, 1, DllStructGetPtr($iid), $plist)

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

    Global $olist = _AutoItObject_WrapperCreate($plist, "GetPeakValue hresult();")

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

    MsgBox(0, @error, $olist.GetPeakValue())

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

    $olist = 0

    [/autoit]

    Ich beiße mir echt die Zähne dran aus - $olist wird einfach nicht zu einem Object. (ich denke mal, der Fehler liegt am zweiten Parameter von "WrapperCreate" - da bin ich einfach halbwegs ratlos - bin mir allerdings auch nicht sicher, ob die CLSID / IID absolute korrekt ist...

    http://msdn.microsoft.com/en-us/library/dd316561(VS.85).aspx

    Kann mir noch jemand nen Stups in die richtige Richtung geben? :D

  • Master Sound Level auslesen

    • Pennywise
    • 16. Juli 2012 um 14:01
    Zitat von AspirinJunkie

    Ich habe mich mit der Thematik noch nicht beschäftigt aber bringen dich die Informationen aus >>diesem Thread<< nicht wenigstens ein bisschen weiter?

    Das mit dem Peak-Meter habe ich mittlerweile tatsächlich auch gefunden, allerdings sitze ich momentan an dieser DLL: http://www.codeproject.com/Articles/18520…-Volume-Control

    Aber irgendwie kriege ich es nicht hin, den Code von C-Sharp (in Visual C# 2010 Express läuft das Programm tatsächlich einwandfrei) in AutoIt umzuwandeln. Die DLL lässt sich mit regsvr32 nicht registrieren (um via ObjCreate / COM zuzugreifen), und weder im PE-Explorer noch sonst einem DLL-Viewer werden mir Funktionen dieser DLL angezeigt.

    AutoItObject habe ich mir im laufe dieses Problems auch schon runtergeladen - werde gleich nochmal versuchen damit auf das Peak-Meter zuzugreifen.

  • Master Sound Level auslesen

    • Pennywise
    • 16. Juli 2012 um 11:58

    Hat niemand eine Idee? Evtl. gibt es ja doch einen weg über MCIsendString oder die BASS-UDF.
    Das Umstellen der Treiber auf "What you hear" bzw. das Verwenden von StereoMix funktioniert leider auch nicht so richtig.

    Hat schonmal jemand probiert über die Control-Befehle / etc. an die Werte für die Progressbars zu kommen? (AU3Info spuckt leider nur den ersten Tab dabei aus)

  • Problem mit Launcher

    • Pennywise
    • 16. Juli 2012 um 01:03

    Koda benutze ich nur zu Erstellung von Vorlagen, wenns ne aufwändigere GUI wird, um da ein bisschen die Controls hin und her zu schieben.
    Danach wirds komplett per Hand geschrieben - allein schon weil die Koordinaten dann saubere Werte haben. Schonmal versucht in Koda irgendwas "in die Mitte" von etwas zu kriegen? :D

  • Problem mit Launcher

    • Pennywise
    • 15. Juli 2012 um 21:41

    Apropos nicht die Feine - hier ein paar Tipps für sauberen Code ;)

    1. Keine Befehle vor Direktiven verwenden (SoundPlay / #include)
    2. Die von Koda generierten Namen sind ziemlich duselig - die Variablen für die GUI lassen sich besser manuell wählen.
    3. Auf Einrückung achten (insb. bei starken Verschachtelungen (kann natürlich auch beim einfügen hier verloren gegangen sein)
    4. Bei Anwendungsstarts würde ich Run dem ShellExecute vorziehen, und je nach Anwendung das Working-Dir auf @ScriptDir setzen.
    5. Dein Ordner heißt "sount" - das sollte bestimmt "sound" heißen.

    :) (Edit: Für so ein kleines Snippet natürlich keine unbedingt notwendigen Tipps)

  • Master Sound Level auslesen

    • Pennywise
    • 15. Juli 2012 um 15:10

    Hallo!

    Für mein aktuelles Projekt möchte ich das "Sound Level" von Windows 7 auslesen.
    Bitte ganz genau lesen, bevor gepostet wird - ich möchte nicht den Lautstärkeregler auslesen!

    [Blockierte Grafik: http://pennywise.e-ee.de/Webcam/linkout…5_150709723.jpg] Der kleine grüne Balken, bzw. noch besser: der dunkelgraue Balken.

    Auf dem Bild sollte der graue Balken etwa den Wert ~10 haben, der grüne ~1.

    Habe das ganze bisher über MemoryRead gemacht - also den Speicher/RAM der SndVol.exe, allerdings ändert sich bei jedem Start des Programms auch die Adresse des Speichers. (Auch Pointer-Suche hat nichts gebracht, der Pointer "springt" die ganze Zeit, vermutlich, da mehrere dieser horizontalen Progressbars gefüttert werden.)

    Über DLLs und Windows-APIs habe ich auch nichts erreichen können - jedesmal kriege ich nur den Regler-Wert zu fassen.

    Für Vorschläge, Ideen oder ganze Lösungen wäre ich unheimlich dankbar! :)


    Solved in: http://www.autoitscript.com/forum/topic/142523-master-loudnessvolume-via-peak-meter-windows-7-64-bit/#

  • Spaltenbreite anpassen GUICtrlCreateListView

    • Pennywise
    • 22. Mai 2011 um 11:32

    Ich würde einfach die Buchstaben zählen und dann hochrechnen, wie lang die Zeile in etwa sein muss. ;)

    Alternativ könnte man natürlich sicherlich für jeden Buchstaben die tatsächliche Breite in Pixeln bestimmen und dann einrechnen, aber die erste Lösung erscheint mir sinniger. ;)

  • Wieso ist eine Programmiersprache schneller als eine andre

    • Pennywise
    • 29. März 2011 um 17:03

    Also ich würds mir so vorstellen:

    Man programmiert einen einfachen Algorithmus nach, zum Beispiel zum Berechnen von Nachkommastellen - jeweils mit (technisch) der exakt gleichen Methode.
    Der Compiler übersetzt das jetzt in Binärcode, nach einem bestimmten Weg.

    Manche Compiler machen das eben nicht auf die effizienteste Variante, und daher sind diese eben langsamer - aber pauschal sagen, dass eine Programmiersprache langsamer ist, kann man eigentlich nicht.

    Ein gutes Beispiel dafür ist Prototype (oder die Arduino-Variante für Mikrocontroller) - diese Sprache wird in Java bzw. C "umgewandelt", und dann kompiliert.

    Ich hab mal vor einiger Zeit ein lustiges Experiment zum Thema Dateigrößen gemacht - immer der selbe Zweck, aber eben unterschiedlich interpretiert: http://nerdworld.de/programmierung…lichkeiten.html

  • Zufallszahlengenerator

    • Pennywise
    • 8. März 2011 um 19:03

    Warum müssen denn alle Variablen groß geschrieben sein? ;)

    Deine Frage verstehe ich noch nicht so ganz - aber ich kann mir vorstellen, dass die gleichen Werte dadurch entstehen, dass bei Random auch der Minimalwert der Spanne ausgegeben werden kann, also Random(0, 1) kann auch 0 zurückgeben. ;)

  • AutoIt trägt fehlerhaft ein..

    • Pennywise
    • 8. März 2011 um 19:00

    Anfang und Ende einer Zeichenkette müssen in RegExp maskiert sein, die richtige Syntax (für 8-16 Zeichen, A-Z, a-z, 0-9) lautet:

    [autoit]

    StringRegExp("Nutzername", "^([A-Za-z0-9]{8,16})$")

    [/autoit]
  • doppelte Einträge finden: Array, Listview, Stringlist was wäre schneller ?

    • Pennywise
    • 6. März 2011 um 14:24

    Aus Erfahrung weiß ich, dass die ListView sehr langsam ist - ich würde es einfach mal mit Timern testen. ;)

  • String Vergleich anhand von Ähnlichkeiten

    • Pennywise
    • 6. März 2011 um 14:22

    Ich denke ich kenne noch einen sehr viel einfacheren Weg:

    Alle Zeichen, außer A-Z und a-z aus den Dateinamen entfernen, dann zu Lowercase, so bekommst du z.B. aus 333wasarmichael-mittermeier.rtf ein wasarmichaelmittermeier und kannst es mit StrInStr und dem Namen "michaelmittermeier" abgleichen. ;)

  • Bildschirm abschalten für jedermann

    • Pennywise
    • 4. März 2011 um 21:18

    Sehr nützlich! Ich baue momentan ein Programm und eine Platine, um den Computer von meinem Bett aus zu steuern, von da komme ich nämlich nicht an den Knopf dran. ;)

  • Webcam Livestream

    • Pennywise
    • 24. Februar 2011 um 15:59

    Obwohl ich nicht mit Einzelnbildern arbeiten wollte, habe ich die Übertragung mit JPEG jetzt hinbekommen.

    Wens mal interessiert:

    Server

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=Server.exe
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    #include <WindowsConstants.au3>
    #include <WebcamConstants.au3>
    #include <GUIConstants.au3>
    #include <GDIPlus.au3>

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

    _GDIPlus_Startup()

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

    TCPStartup()
    $listen = TCPListen(@IPAddress1, 1234)
    Do
    $tcp = TCPAccept($listen)
    Until $tcp <> -1

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

    $gui = GUICreate("Webcam", 160, 120)

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

    $dll_avi = DllOpen("avicap32.dll")
    $dll_user = DllOpen("user32.dll")

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

    $cap = DllCall($dll_avi, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD, $WS_VISIBLE), "int", 0, "int", 0, "int", 160, "int", 120, "hwnd", $gui, "int", 1)

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

    DllCall($dll_user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DRIVER_CONNECT, "int", 0, "int", 0)
    DllCall($dll_user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_SCALE, "int", 1, "int", 0)
    DllCall($dll_user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_OVERLAY, "int", 1, "int", 0)
    DllCall($dll_user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEW, "int", 1, "int", 0)
    DllCall($dll_user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEWRATE, "int", 1, "int", 0)

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

    GUISetState(@SW_SHOW)

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

    $timer = TimerInit()
    $fps = 10
    While 1
    If (GUIGetMsg() = $GUI_EVENT_CLOSE) Then
    ExitLoop
    EndIf
    If (TimerDiff($timer) > 1000 / $fps) Then
    $timer = TimerInit()
    DllCall($dll_user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_GRAB_FRAME_NOSTOP, "int", 0, "int", 0)
    DllCall($dll_user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_FILE_SAVEDIBA, "int", 0, "str", "temp.bmp")
    $img = _GDIPlus_ImageLoadFromFile("temp.bmp")
    _GDIPlus_ImageSaveToFile($img, "temp.jpg")
    _GDIPlus_ImageDispose($img)
    TCPSend($tcp, StringToBinary(FileRead("temp.jpg")))
    EndIf
    WEnd

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

    DllCall($dll_user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_END, "int", 0, "int", 0)
    DllCall($dll_user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DRIVER_DISCONNECT, "int", 0, "int", 0)
    DllClose($dll_user)

    [/autoit]

    Client-Programm

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    GUICreate("Test", 320, 240)
    $pic = GUICtrlCreatePic("", 0, 0, 320, 240)
    GUISetState(@SW_SHOW)
    TCPStartup()
    $tcp = TCPConnect(@IPAddress1, 1234)
    While 1
    If (GUIGetMsg() = $GUI_EVENT_CLOSE) Then
    ExitLoop
    EndIf
    $r = TCPRecv($tcp, 1024)
    FileWrite("tcp.jpg", Binary($r))
    If (BinaryMid($r, BinaryLen($r)-1, 2) = "0xFFD9") Then
    GUICtrlSetImage($pic, "tcp.jpg")
    FileDelete("tcp.jpg")
    EndIf
    WEnd

    [/autoit]
  • Array erst ab [1] befüllen

    • Pennywise
    • 24. Februar 2011 um 13:26

    Achso - ich habe die Frage so verstanden - insb. durch das auskommentierte UBound, dass es die Länge des Arrays an die erste Position hängen will, ohne dabei das erste Feld zu überschreiben.

    In dem Fall kann man auch einfach mit zwei Arrays arbeiten, und die "aneinanderlegen".

  • Array erst ab [1] befüllen

    • Pennywise
    • 24. Februar 2011 um 12:51

    Müsste eigentlich klappen:

    [autoit]

    ReDim $array[UBound($array)+1]
    For $i = UBound($array)-1 To 1 Step -1
    $array[$i] = $array[$i-1]
    Next
    $array[0] = UBound($array)

    [/autoit]

    Edit:

    Hier nochmal als Funktion inkl. Beispiel.

    [autoit]

    #include <Array.au3>

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

    Dim $tarray[5]
    $tarray[0] = 1
    $tarray[1] = 2
    $tarray[2] = 3
    $tarray[3] = 4
    $tarray[4] = 5

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

    _ArrayAddBound($tarray)

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

    _ArrayDisplay($tarray)

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

    Func _ArrayAddBound(ByRef $array)
    ReDim $array[UBound($array)+1]
    For $i = UBound($array)-1 To 1 Step -1
    $array[$i] = $array[$i-1]
    Next
    $array[0] = UBound($array)
    EndFunc

    [/autoit]
  • Webcam Livestream

    • Pennywise
    • 24. Februar 2011 um 12:06

    Den Snippet habe ich jetzt wiedergefunden: https://autoit.de/index.php?page=Thread&postID=170173

    Ich werde mal versuche, dass auf Webcams zu übertragen.

  • Doppelklick OHNE Maus ausführbar ?

    • Pennywise
    • 24. Februar 2011 um 11:59

    Versuchs mal mit ControlClick - dafür muss afaik nicht mal das Fenster aktiv sein, das ist auch wesentlich sauberer, als die Maus "automatisch" zu bewegen, da z.B. das Ergebnis verfälscht werden kann, wenn man ausversehen gegen die Maus kommt.

  • Webcam Livestream

    • Pennywise
    • 24. Februar 2011 um 11:51

    Hallo!

    Ich habe vor kurzem einen Snippet gelesen, um Audio-Daten (vom Mic), über TCP an einen anderen Rechner zu streamen.

    Das gleiche möchte ich jetzt mit .avi-Dateien von einer Webcam machen - allerdings nicht über die VLC-Api (die läuft nämlich nicht so super), nicht über Einzelbilder und nicht über einen Browser.

    Allerdings finde ich den Snippet nicht mehr, und ich weiß nicht, wie ich "halbe" Videos zum laufen kriegen soll.

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™