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

Beiträge von veronesi

  • Aufnahme mit _BASS_Record

    • veronesi
    • 14. April 2010 um 11:42

    Guter Gedanke! Doch das ist es nicht.
    Ich habe nämlich den Stecker beim Line-Out drinnen gelassen. Somit kommt nichts aus dem integrierten PC-Lautsprecher.
    Und die aktiven Lautsprecher vom Line-Out habe ich ausgeschaltet.

    Im Büro ist es auch ruhig......

    Irgendwie glaube ich an Übersprechen innerhalb der Soundkarte auf den Mic-Eingang....
    Doch leider muss das ganze Schlussendlich mit genau dieser Soundkarte funktionieren :(

    Gruss
    Veronesi

  • Aufnahme mit _BASS_Record

    • veronesi
    • 14. April 2010 um 11:32

    Hab das Programm gleich getestet. Leider funktioniert es nicht....

    Ich habe mal den Line-In Eingang offen gelassen. Somit sollte die FreqOut = 1004Hz und FreqIn = 0Hz sein.
    Doch beide sind bei mir nun 1004Hz.

    (D.h. am Anfang sehe ich für den Out ganz kurz eine 0. Die wechselt dann aber innerhalb eines Wimpernschlages auf 1004Hz.!)

    Im Windows kann ich nur einen Eingang wählen. (Obwohl ich auf der Soundkarte einen Line-In und einen Mic-In habe.
    Doch da ich ja vom Line-Out komme, gehe ich auf den Line-In!

    Was kann hier wohl wieder falsch sein?

    Danke + Gruss
    Veronesi

  • Aufnahme mit _BASS_Record

    • veronesi
    • 14. April 2010 um 11:15

    Hey Eukalyptus, Du bist genial!

    Das war es! Nun funktioniert es!

    Hier das geänderte Script

    Spoiler anzeigen
    [autoit]

    #include "Bass.au3"
    #include "BassConstants.au3"

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

    Opt("MustDeclareVars", 1)

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

    Dim $test1 = 0, $test2 = 0

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

    $test1 = test("1kHz.wav")
    $test2 = test("test.wav")
    MsgBox(0,"",$test1 & " / " & $test2)
    exit

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

    Func test($file)
    Local $FrequencyOut = 0, $fftstruct = 0, $hMusic = 0, $TmpNr = 0, $TmpData
    Local $hMusic, $fftstruct, $fft
    _BASS_STARTUP ("BASS.dll") ;Open Bass.DLL.
    _BASS_Init(0, -1, 44100, 0, "") ;Initalize bass.

    $hMusic = _BASS_StreamCreateFile(False, $File, 0, 0, 0)
    _BASS_ChannelPlay($hMusic, 1)

    $fftstruct = DllStructCreate("float[4096]")
    _BASS_ChannelGetData($hMusic, DllStructGetPtr($fftstruct), $BASS_DATA_FFT8192)
    For $i = 0 To 4095
    $TmpData = Round(DllStructGetData($fftstruct, 1, $i + 1) * 100)
    If $fft < $TmpData Then ;Bestimme den Ort des Maximalwerts der FFT Analyse
    $fft = $TmpData
    $TmpNr = $i+1
    EndIf
    Next
    $FrequencyOut = Round(22000 / 4096 * $TmpNr) ;Max 22kHz.


    Sleep(800)
    _BASS_StreamFree($hMusic)
    _BASS_Free()
    Return $FrequencyOut
    EndFunc

    [/autoit]

    Natürlich werde ich das nun noch mit dem Aufnehmen einfügen und dann das ganze besser formattieren und überarbeiten!
    Aber im Grundsatz scheint es nun zu funktionieren!

    Vielen Dank!!!!

    Grüsse
    Veronesi

  • Aufnahme mit _BASS_Record

    • veronesi
    • 14. April 2010 um 07:20

    Leider hat das auch nichts gebracht.
    Ich hänge mal mein aktuelles Skript an.
    Hier wird nichts aufgezeichnet. Ich nehme einfach mein 1kHz. File (mit 1kHz. Ton) und mein Test.wav (leere Aufnahme). Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Spoiler anzeigen
    [autoit]

    #include "Bass.au3"
    #include "BassConstants.au3"

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

    Dim $File = "1kHz.wav", $hMusic, $fftstruct, $fft, $Recordstruct, $Record, $hRecord
    Dim $TmpData = 0, $TmpNr = 0, $TmpLevel = 0, $Level = 0, $Timer

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

    $test1 = test("1kHz.wav")
    $test2 = test("test.wav")
    MsgBox(0,"",$test1 & " / " & $test2)
    exit

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

    func test($file)
    $FrequencyOut = 0
    $fftstruct = 0
    $hMusic = 0
    _BASS_STARTUP ("BASS.dll") ;Open Bass.DLL.
    _BASS_Init(0, -1, 44100, 0, "") ;Initalize bass.

    $hMusic = _BASS_StreamCreateFile(False, $File, 0, 0, 0)
    _BASS_ChannelPlay($hMusic, 1)

    $fftstruct = DllStructCreate("float[4096]")
    _BASS_ChannelGetData($hMusic, DllStructGetPtr($fftstruct), $BASS_DATA_FFT8192)
    For $i = 0 To 4095
    $TmpData = Round(DllStructGetData($fftstruct, 1, $i + 1) * 100)
    If $fft < $TmpData Then ;Bestimme den Ort des Maximalwerts der FFT Analyse
    $fft = $TmpData
    $TmpNr = $i+1
    EndIf
    Next
    $FrequencyOut = Round(22000 / 4096 * $TmpNr) ;Max 22kHz.


    Sleep(800)
    _BASS_StreamFree($hMusic)
    _BASS_Free()
    Return $FrequencyOut
    EndFunc

    [/autoit]

    Hat sonst noch jemand eine Idee?
    Gruss
    Veronesi

    Dateien

    Ton-Dateien.zip 46,09 kB – 348 Downloads
  • Aufnahme mit _BASS_Record

    • veronesi
    • 13. April 2010 um 21:53

    So, nun bin ich wieder einen kleinen Schritt weiter zur Lösung gekommen.
    Mein Skript für die Aufnahmen scheint grundsätzlich zu funktionieren. (Ich hatte einen Hardware Defekt und schlechte Kontakte!)

    Nun kommt aber die nächste Hürde:
    Ich möchte ja schlussendlich von dem 1kHz. File welches abgespielt wird die Frequenz und den Pegel bestimmen. Danach das gleiche noch von dem aufgenommenen File.
    Das sollte dann schlussendlich +/- gleich sein!

    Spiele ich nun das 1kHz. File ab, kann ich die Frequenz mit dem Skript im 1. Post bestimmen. Geht prima, er erkennt mir immer 1004 Herz.
    Dann stoppe ich das Programm und ändere den Pfad für das File ab, so dass er nicht mehr das 1kHz. File abspielt, sondern ein "leeres" WAV.
    Nun starte ich mein Programm und er sagt mir, dass dies 0Hz. sind. Stimmt ja auch, denn es kommt kein Ton raus!

    Wenn ich nun aber beides in einem Programm nacheinander machen möchte, also 1kHz. abspielen, Frequenz bestimmen, _BASS_Free() wählen, alles neu initialisieren
    und dann das "leere" File abspiele, dann bestimmt er mir beim 2. (leeren) File immer auch 1004 Herz.
    Warum?

    Ich befürchte, dass das irgendwas mit einem Puffer oder so zu tun hat. Aber ich habe ja mit _BASS_Free() alles gelöscht, oder?

    Grüsse
    Veronesi

  • Aufnahme mit _BASS_Record

    • veronesi
    • 13. April 2010 um 20:06

    Hallo Techmix,

    danke für die Links. Doch unter Windows 7 scheint das (bei mir) nicht mehr zu laufen.
    Überhaupt möchte ich unabhängiger von der Betriebssystem-Version sein.

    Mit dem Script in meinem letzten Post kann ich ja grundsätzlich eine WAV Datei aufzeichnen. Doch es wird irgendwie das falsche (evtl. falscher Kanal?) aufgezeichnet.

    Trotzdem danke!

  • Aufnahme mit _BASS_Record

    • veronesi
    • 13. April 2010 um 15:08

    Hallo!

    Inzwischen bin ich so weit, dass ich zuerst das Audio Signal mit dem normalen Line-In Eingang der Soundkarte einlesen möchte. Einfach alles automatisch in ein temporäres File einlesen. Dann sehe ich weiter.
    Ich habe es geschafft, dass er mir ein WAV File erstellt. Er schreibt auch Daten rein. Aber irgendwie schreibt er nicht das rein, was über den Line-In Eingang reinkommt..

    Hat jemand eine Idee zu meinem kleinen Skript hier?

    Spoiler anzeigen
    [autoit]

    #include <BassEnc.au3>
    Local $RecordDevice, $hRecord, $EncHandle, $temp, $basscb_dll

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

    _BASS_STARTUP("Bass.dll")
    _BASS_Encode_STARTUP("BassEnc.dll")
    $basscb_dll = DllOpen("BASSCB.dll")
    $RecordDevice = _BASS_RecordInit(-1)

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

    $temp = DllCall($basscb_dll, "dword", "RecordStart", "dword", 44100, "dword", 2, "dword", _makelong($BASS_SAMPLE_FX, 10))
    $hRecord = $temp[0]

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

    ;~ $hRecord = _BASS_RecordStart(44100,2,0)
    $EncHandle = _BASS_Encode_Start($hRecord, @ScriptDir & "\Test.wav", $BASS_ENCODE_PCM)
    Sleep(500)
    _BASS_Encode_Stop($hRecord)

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

    _BASS_Free()
    _BASS_RecordFree()

    [/autoit]

    Ich suche einfach die EINFACHSTE Möglichkeit, um automatisch 500ms lang ein Audiosignal auf dem Line-In aufzuzeichnen. Das kann doch nicht so schwer sein!
    Wer hat eine Idee?

    Grüsse
    Veronesi

  • Aufnahme mit _BASS_Record

    • veronesi
    • 11. April 2010 um 18:31

    Hallo (Auto)Bert,

    vielen Dank für die Antwort. Doch leider hilft mir das im Moment noch nicht viel weiter.
    Ich möchte ja nicht direkt aufzeichnen, sondern nur analysieren, was beim Mikrofon Eingang reinkommt.

    Das Tool sieht zwar echt genial aus, doch ich kann nur die EXE starten. Die Source selber hat dutzende von Fehler (bei meiner Auto-IT Version; die momentan aktuellste).
    Eigentlich müsste ich ja nur noch die beiden Funktionen "_BASS_RecordStart" und "_BASS_ChannelGetData" korrekt ausführen können - und zwar auf dem Mic-Eingang.

    Dann würde es laufen.
    Hast Du vielleicht gleich eine Idee?
    Im Script wird mit "_BASS_Encode_Start" gearbeitet. Das brauche ich aber gar nicht, oder???

    Grüsse
    Veronesi

  • Aufnahme mit _BASS_Record

    • veronesi
    • 11. April 2010 um 14:25

    Hallo zusammen,

    ich habe mir ein kleines Script zusammengebastelt, welches folgendes tun sollte:
    - 1kHz. Sinuston ausgeben
    - Eigene Ausgabe bezüglich Frequenz und Pegel messen
    - Mikrofoneingang bezüglich Frequenz und Pegel messen.

    Die ersten beiden Punkte habe ich schon geschafft und das scheint gut zu funktionieren. Doch nun müsste ich noch die Frequenz des Tones am Mikrofoneingang und dessen Pegel messen. Das klappt nicht.

    Zur Erklärung ich habe einfach den Kopfhörer Ausgang mit dem Mikrofon Eingang verbunden und sollte somit +/- das gleiche Ergebnis erhalten. Letzten Endes ist dann natürlich kein einfaches Kabel dazwischen, sondern ein Gerät, welches geprüft werden soll.

    Hier mal mein SCHNELL zusammengebasteltes Test-Script:

    Spoiler anzeigen
    [autoit]

    #include "Bass.au3"
    #include "BassConstants.au3"

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

    Dim $File = "1kHz.wav", $hMusic, $fftstruct, $fft, $Recordstruct, $Record, $hRecord
    Dim $TmpData = 0, $TmpNr = 0, $TmpLevel = 0, $Level = 0, $Timer

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

    _BASS_STARTUP ("BASS.dll") ;Open Bass.DLL.
    _BASS_Init(0, -1, 44100, 0, "") ;Initalize bass.

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

    $hMusic = _BASS_StreamCreateFile(False, $File, 0, 0, 0)
    _BASS_ChannelPlay($hMusic, 1)

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

    $fftstruct = DllStructCreate("float[4096]")
    _BASS_ChannelGetData($hMusic, DllStructGetPtr($fftstruct), $BASS_DATA_FFT8192)
    For $i = 0 To 4095
    $TmpData = Round(DllStructGetData($fftstruct, 1, $i + 1) * 100)
    If $fft < $TmpData Then ;Bestimme den Ort des Maximalwerts der FFT Analyse
    $fft = $TmpData
    $TmpNr = $i+1
    EndIf
    Next
    $FrequencyOut = Round(22000 / 4096 * $TmpNr) ;Max 22kHz.

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

    $Timer = TimerInit()
    While 1
    Sleep(10)
    $TmpLevel = _BASS_ChannelGetLevel($hMusic) ;Get Sound Level for max 500ms
    If $Level < $TmpLevel Then $Level = $TmpLevel
    If TimerDiff($Timer) > 500 Then ExitLoop
    WEnd

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

    _BASS_RecordInit(-1)
    $hRecord = _BASS_RecordStart(44100,1,0,"Bass_Callback_Record",0)
    $Recordstruct = DllStructCreate("float[4096]")
    _BASS_ChannelGetData($hRecord, DllStructGetPtr($Recordstruct),$BASS_DATA_FFT8192)

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

    $TmpData = 0
    $Record = 0
    $TmpNr = 0

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

    For $i = 0 To 4095
    $TmpData = Round(DllStructGetData($Recordstruct, 1, $i + 1) * 100)
    If $Record < $TmpData Then ;Bestimme den Ort des Maximalwerts der FFT Analyse
    $Record = $TmpData
    $TmpNr = $i+1
    EndIf
    Next
    MsgBox(0,$i+1,$Record & "/" & $TmpNr)

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

    MsgBox(0,"Ausgabe","Frequenz: " & $FrequencyOut & "Hz." & @LF & "Maximalpegel: " & $Level)
    _BASS_Free()
    _BASS_RecordFree()
    Exit

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

    Func Bass_Callback_Record($handle, $buffer, $length, $user)
    Return 1
    EndFunc

    [/autoit]

    Die dafür notwendigen externen Dateien sind im hier ( Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. ) enthalten.

    Vielleicht kann mit ja jemand helfen. Ich verstehe auch nicht, was eine Callback Funktion sein soll......
    Vielen Dank für Eure gnädigen und geduldigen Antworten!

    Grüsse
    Veronesi

    Dateien

    BASS_Record.zip 144,21 kB – 434 Downloads
  • Bildschirmauflösung für Multiscreen

    • veronesi
    • 4. April 2010 um 14:59

    Zur Dokumentation hier noch die Lösung:

    Link zum original Post

  • Automatisch Fenster auf dem Bildschirm anordnen, auf welchem der Mauscursor ist

    • veronesi
    • 2. April 2010 um 07:50

    Mit diesem Skript kann man automatisch alle offenen Fenster auf dem Bildschirm anordnen, auf welchem der Mauscursor ist:

    Spoiler anzeigen
    [autoit]

    Func _TileWindows()
    ;Tile Windows on that screen where the mouse is!
    ;Call: _TileWindows()
    ;Don't miss to include the Func_GetMonitorInfo.au3 (#include "Func_GetMonitorInfo.au3")
    ;Don't miss to include the Func_GetMouseInfo.au3 (#include "Func_GetMouseInfo.au3")

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

    Local $MonNr, $Left, $Top, $Right, $Bottom, $tStruct, $Rect
    $MonNr = _GetMouseInfo()
    $Left = _GetMonitorInfo("PosX",$MonNr)
    $Top = _GetMonitorInfo("PosY",$MonNr)
    $Right = $Left + _GetMonitorInfo("ResX",$MonNr)
    $Bottom = $Top + _GetMonitorInfo("ResY",$MonNr)

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

    $tStruct = DllStructCreate("int[4]");4 points of values that are integers
    DllStructSetData($tStruct, 1, $Left, 1)
    DllStructSetData($tStruct, 1, $Top, 2)
    DllStructSetData($tStruct, 1, $Right, 3)
    DllStructSetData($tStruct, 1, $Bottom, 4)
    $Rect = DllStructGetPtr($tStruct);Now $rect holds our left/top/right/bottom values in a type of array basically

    DllCall("user32.dll", "int", "TileWindows", "int", 0, "int", 0, "Ptr", $Rect, "int", 0, "int", 0)
    EndFunc

    [/autoit]

    Dazu werden noch zwei Funktionen gebraucht, welche ich bereits hier veröffentlicht habe.

    Viel Spass!
    Veronesi

  • Bildschirmauflösung für Multiscreen

    • veronesi
    • 2. April 2010 um 07:47

    Hallo,

    inzwischen habe ich herausgefunden, wie man die Auflösungen von den einzelnen Monitoren bestimmen kann.
    MonitorInfo (2. Skript)

    Doch wie kann ich nun die Auflösungen für einzelne Monitore setzen?

    Grüsse
    Veronesi

  • Herausfinden, auf welchem Monitor der Mouscursor ist

    • veronesi
    • 1. April 2010 um 14:33

    Mit dem folgenden Skript kann man herausfinden, auf welchem Monitor sich der Mauscursor befindet:

    Spoiler anzeigen
    [autoit]

    Func _GetMouseInfo()
    ;Returns the screen number on which the actual mouse cursor is
    ;Call: _GetMouseInfo()
    ;Don't miss to include the Func_GetMonitorInfo.au3 (#include "Func_GetMonitorInfo.au3")

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

    $MousePos = MouseGetPos()
    $NrOfScreens = _GetMonitorInfo("Nr","")
    For $i = 1 To $NrOfScreens
    If $MousePos[0] >= _GetMonitorInfo("PosX",$i) AND ($MousePos[0] <= _GetMonitorInfo("PosX",$i) + _GetMonitorInfo("ResX",$i)) AND $MousePos[1] >= _GetMonitorInfo("PosY",$i) AND ($MousePos[1] <= _GetMonitorInfo("PosY",$i) + _GetMonitorInfo("ResY",$i)) Then Return $i
    ;Checks on which Screen the Mousecursor is
    Next
    EndFunc

    [/autoit]

    Dazu wird noch die folgende Funktion benötigt:

    Spoiler anzeigen
    [autoit]

    Func _GetMonitorInfo($Typ, $Nr)
    ;Returns some informations about your screens
    ;Call: _GetMonitorInfo("Typ", "Nr")
    ;Possible Values for "Typ": "Nr" / "ResX" / "ResY" / "PosX" / "PosY"
    ;If "Typ" = "Nr", then the Number of asked Screen will be ignored!
    ;Nr = Number of asked Screen

    Local $NrOfMonitors, $ResolutionX[32], $ResolutionY[32], $PositionX[32], $PositionY[32]
    Local $cbMonitorEnumProc = DllCallbackRegister("MonitorEnumProc", "ubyte", "ptr;ptr;ptr;int")

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

    If @error Then Return SetError(1, 0, False)
    Local $strctCount = DllStructCreate("uint Count;uint Width[12];uint Height[12];int left[12];int top[12]")
    If @error Then Return SetError(2, @error, False)
    Local $iCount

    DllStructSetData($strctCount, "Count", 0)

    $Ret = DllCall("User32.dll", "ubyte","EnumDisplayMonitors","ptr", 0,"ptr", 0, "ptr", DllCallbackGetPtr($cbMonitorEnumProc), "ptr", DllStructGetPtr($strctCount))
    If @error Or $Ret[0] = 0 Then Return SetError(3, @error, False)

    DllCallbackFree($cbMonitorEnumProc)

    $iCount = Int(DllStructGetData($strctCount, "Count"))

    Local $aMonitors[$iCount+1][4] = [[$iCount]]

    For $i = 1 To $iCount
    $aMonitors[$i][0] = Int(DllStructGetData($strctCount, "Width",$i))
    $aMonitors[$i][1] = Int(DllStructGetData($strctCount, "Height",$i))
    $aMonitors[$i][2] = Int(DllStructGetData($strctCount, "left",$i))
    $aMonitors[$i][3] = Int(DllStructGetData($strctCount, "top",$i))
    Next

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

    If Not @error Then
    $NrOfMonitors = $aMonitors[0][0]
    For $i = 1 To $NrOfMonitors
    $ResolutionX[$i] = $aMonitors[$i][0]
    $ResolutionY[$i] = $aMonitors[$i][1]
    $PositionX[$i] = $aMonitors[$i][2]
    $PositionY[$i] = $aMonitors[$i][3]
    Next
    EndIf
    Select
    Case $Typ="Nr"
    Return $NrOfMonitors
    Case $Typ="ResX"
    Return $ResolutionX[$Nr]
    Case $Typ="ResY"
    Return $ResolutionY[$Nr]
    Case $Typ="PosX"
    Return $PositionX[$Nr]
    Case $Typ="PosY"
    Return $PositionY[$Nr]
    EndSelect
    EndFunc

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

    Func MonitorEnumProc($hMonitor, $hdcMonitor, $lprcMonitor, $dwData)
    Local $strctRECT = DllStructCreate("long left;long top;long right;long bottom", $lprcMonitor)
    Local $strctCount = DllStructCreate("uint Count;uint Width[12];uint Height[12];int left[12];int top[12]", $dwData)
    Local $iNumber = DllStructGetData($strctCount, "Count")
    Local $Height = Int(DllStructGetData($strctRECT, "bottom"))-Int(DllStructGetData($strctRECT, "top"))
    Local $Width = Int(DllStructGetData($strctRECT, "right"))-Int(DllStructGetData($strctRECT, "left"))

    DllStructSetData($strctCount, "Width", $Width, $iNumber+1)
    DllStructSetData($strctCount, "Height", $Height, $iNumber+1)
    DllStructSetData($strctCount, "left", Int(DllStructGetData($strctRECT, "left")), $iNumber+1)
    DllStructSetData($strctCount, "top", Int(DllStructGetData($strctRECT, "top")), $iNumber+1)
    DllStructSetData($strctCount, "Count", $iNumber+1)
    Return True
    EndFunc

    [/autoit]
  • Wallpaper im laufenden Betrieb ändern (inkl. auswahl des Styles)

    • veronesi
    • 1. April 2010 um 13:33

    Mein neues Skript sieht nun so aus:

    Spoiler anzeigen
    [autoit]

    Func Wallpaper($Wallpaper, $Stile)
    ;Set Wallpaper
    ;In XP only bmp files!
    ;$Wallpaper = Full Path and Filename. Leave blank if no Wallpaper
    ;$Stile = Wallpaper Style
    ;Call: Wallpaper("Path\Filename.extention","Stile")
    ;Don't miss to include the GDIPlus.au3 (#include <GDIPlus.au3>)

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

    Select
    Case $Stile="Center"
    $Stile="0"
    $Stile2="0"
    Case $Stile="Fit"
    $Stile="1"
    $Stile2="0"
    Case $Stile="Stretch"
    $Stile="2"
    $Stile2="0"
    Case $Stile="Fill"
    $Stile="-1"
    $Stile2="0"
    Case $Stile="Tile"
    $Stile="0"
    $Stile2="1"
    EndSelect

    Local $TempWallpaper = @TempDir & "\Wallpaper.bmp"
    _GDIPlus_Startup()
    $hBitmap = _GDIPlus_BitmapCreateFromFile($Wallpaper) ;Converts Image to Bitmap
    _GDIPlus_ImageSaveToFile($hBitmap, $TempWallpaper) ;Save in temp directory
    _GDIPlus_BitmapDispose($hBitmap) ;Release Bitmap Resource
    _GDIPlus_Shutdown()

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

    RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "WallpaperStyle", "REG_SZ", $Stile)
    RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "TileWallpaper", "REG_SZ", $Stile2)
    RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "Wallpaper", "REG_SZ", $TempWallpaper)
    DllCall("user32.dll", "int", "SystemParametersInfo","uint",20,"uint",0,"str",$TempWallpaper,"uint",3)
    EndFunc ;EndFunc Wallpaper

    [/autoit]

    Vielen Dank für Deine Hilfe!
    Funktioniert wunderbar!

    Grüsse
    Veronesi

  • Multiscreen Befehle

    • veronesi
    • 1. April 2010 um 11:19

    Hallo Oscar!

    Vielen Dank! Genau da was ich gesucht habe.
    Ich habe das Script für mich etwas angepasst, damit ich es direkt in meinem Code sauber benutzen kann!

    Vielen herzlichen Dank!!!
    :thumbup:

  • Multiscreen Befehle

    • veronesi
    • 1. April 2010 um 08:25

    Hallo Schnitzel,

    ja MouseGetPos liefert immer die richtigen Koordinaten (welche auch negativ sein können, sofern ein Bildschirm links oder oberhalb des Bildschirmes 1 ist).
    Leider nützt mir das nur bedingt etwas.

    Der PC hier hat 8 (!!) Monitore. Und leider haben alle Monitore unterschiedliche Auflösungen.
    Wie kann ich nun sicher sein, dass die Maus auf dem ganz linken unteren Monitor ist, wenn ich die einzelnen Auflösungen (geschweige denn die Anordnung) nicht kenne?

    Trotzdem danke.

    Hat sonst noch jemand einen Rat?
    Grüsse
    Veronesi

  • Wallpaper im laufenden Betrieb ändern (inkl. auswahl des Styles)

    • veronesi
    • 1. April 2010 um 07:17

    Hallo!

    Mit dieser Funktion ist es möglich das Hintergrundbild im laufenden Betrieb zu ändern.
    Dabei kann der Pfad auf eine beliebige JPG oder BMP Datei sowie der Style (Anzeigeart) übergeben werden.

    Spoiler anzeigen
    [autoit]


    Func Wallpaper($Wallpaper, $Stile)
    ;Set Wallpaper
    ;In XP only bmp files!
    ;$Wallpaper = Full Path and Filename. Leave blank if no Wallpaper
    ;$Stile = Wallpaper Style
    ;Call: Wallpaper("Path\Filename.extention","Stile")
    Select
    Case $Stile="Center"
    $Stile="0"
    $Stile2="0"
    Case $Stile="Fit"
    $Stile="1"
    $Stile2="0"
    Case $Stile="Stretch"
    $Stile="2"
    $Stile2="0"
    Case $Stile="Fill"
    $Stile="-1"
    $Stile2="0"
    Case $Stile="Tile"
    $Stile="0"
    $Stile2="1"
    EndSelect

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

    RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "WallpaperStyle", "REG_SZ", $Stile)
    RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "TileWallpaper", "REG_SZ", $Stile2)
    DllCall("user32.dll", "int", "SystemParametersInfo","uint",20,"uint",0,"str",$Wallpaper,"uint",3)
    EndFunc ;EndFunc Wallpaper

    [/autoit]
  • Multiscreen Befehle

    • veronesi
    • 1. April 2010 um 07:13

    Hallo zusammen,

    ich habe folgendes Problem:
    An einem PC sind mehrere Monitore angeschlossen. Ich möchte nun abfragen, auf welchem Monitor sich der Mauszeiger befindet. (Also Bildschirm 1 oder 2 oder 3 oder...)

    Danach möchte ich ein SplathTextOn in die Mitte des vorher ermittelten Bildschimes platzieren.

    Kann mir da jemand helfen?
    In RunCmd waren das jeweils ein einziger Befehl. Dann lief das einwandfrei. Doch in AutoIt scheint das schwieriger zu sein!

    Ich bin über jede Hilfe froh!

    Danke!
    Veronesi

  • Bildschirmauflösung für Multiscreen

    • veronesi
    • 31. März 2010 um 12:34

    Hallo zusammen,

    ich bin neu zu AutoIt gestossen und habe gleich schon ein Problemchen:

    Ich möchte die Bildschirmauflösung ändern und zwar unter Angabe der Bildschirmnummer.
    D.h. Ich habe z.B. 3 Bildschirme und möchte den Bildschirm Nr. 1 auf 1920x1200 setzen. Den 2. und 3. möchte ich aber auf 2560x1600 setzen.

    Ich habe bereits mehrere Skripte für einen Monitor gefunden, es jedoch nicht geschaft, dieses für 2 oder mehr Monitore zu ändern.

    Am liebsten hätte ich den Quellcode in AutoIt und kein EXE, da ich noch weitere Dinge implementieren muss.

    Zudem wäre der umgekehrte Weg (Auflösung von Screen x lesen) auch noch wichtig!
    Vielen Dank schon mal an alle, die mir helfen!

    Freundliche Grüsse
    Veronesi

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™