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

Beiträge von markplus

  • Autoit TCP server aus Linux heraus erreichen

    • markplus
    • 4. August 2016 um 19:42
    Zitat von Bitnugger

    In Linux kannst du dem Echo-Befehl sagen, dass er kein LF ans Zeilenende anhängen soll.

    -n Keine Ausgabe des am Zeilenende stehenden Zeilentrenners

    $ echo -n 'Dies ist ein Text ohne LF (0A)...'


    Alternativ ginge auch dies...

    $ echo -e 'Dies ist ein Text mit CRLF (0D0A)...\r\n'

    Alles anzeigen

    Vielen Dank! Nützlicher Tipp für das nächste Mal! :)

  • Autoit TCP server aus Linux heraus erreichen

    • markplus
    • 31. Juli 2016 um 07:15

    Vielen, vielen Dank. Mit StringStripWS wurde das Problem gelöst!!! :)

  • Autoit TCP server aus Linux heraus erreichen

    • markplus
    • 31. Juli 2016 um 06:34

    Beide versenden als string. Allerdings habe ich jetzt festgestellt, dass mit

    $ echo "start" > /dev/tcp/192.168.2.5/80

    ein "0A" am Schluss mitgeschickt wird. Jetzt frage ich mich, wie man verhindern kann, dass dieser carriage return mitgeschickt wird.

  • Autoit TCP server aus Linux heraus erreichen

    • markplus
    • 30. Juli 2016 um 17:58

    Das ergibt das gleiche Ergebnis, da sonst kein traffic stattfand.

  • Autoit TCP server aus Linux heraus erreichen

    • markplus
    • 30. Juli 2016 um 16:32

    Tatsächlich. Vielen Dank für den Hinweis. Der Header sieht dann doch ähnlich aus, wenn ich das korrekte Paket heraussuche.

    Wenn ich nach der Ziel-IP-Adresse filtere kommen trotzdem in Windows all diese anderen Pakete noch vor. Obwohl der Browser gar nichts macht, geschweige denn an eine andere lokale IP-Adresse sendet.

    In Windows mache ich Folgendes:
    - state Autoit client und lasse ihn sich verbinden mit dem Server
    - starte Wireshark
    - schicke Kommando vom Client aus ab
    - stoppe Wireshark
    - filtere in den Paketen nach der Ziel-IP-Adresse des Desktops

    => es kommt ein riesen Haufen an Paketen zusammen inklusive solcher mit dem vorhin geposteten riesigen Header. Wobei der eigentliche Text-Befehl, wie Du richtig geschrieben hast, nur in einem kleinen Paket ohne Header enthalten ist.

  • Autoit TCP server aus Linux heraus erreichen

    • markplus
    • 30. Juli 2016 um 16:07

    Also, ich habe jetzt Wireshark auch auf Windows zum Laufen gebracht und den Unterschied festgestellt:

    Beim Verschicken aus der Linux Shell heraus, wird nur das Keyword verschickt. Wohingegen beim Verschicken durch den Autoit Client, ein riesiger Header mit verschickt wird:

    Linux command shell:
    [Blockierte Grafik: https://anonmgur.com/up/9e3d63b0cbb7c9d77807c261598b65db.jpg]

    Autoit Client:
    [Blockierte Grafik: https://anonmgur.com/up/c260f739fbc213124ce1386d5f2de667.jpg]

    Offenbar wäre die Lösung aus Linux heraus irgendwie den gesamten Header nachzubilden. Wie das zu bewerkstelligen ist, dazu habe ich allerdings (noch) keine Ahnung.

  • Autoit TCP server aus Linux heraus erreichen

    • markplus
    • 30. Juli 2016 um 15:38

    Vielen Dank für die Antwort!

    Jetzt habe ich es verstanden. Wenn, dann wäre das mit dem String am Schluss relevant, denn es sind viele verschiedene Keywords. Allerdings nutze ich dieses Client-Server-System schon seit langer Zeit und es hatte bisher nie den Anschein gemacht, dass Keywprd-Teile verschluckt oder überschrieben wurden. Sobald eine Connection da war, wurden alle Befehle immer korrekt ausgeführt.

    Danke für den Vorschag zum Senden der TCP-Daten. Leider das gleiche Resultat. Der Server reagiert nicht auf das Paket. Irgend etwas muss hier fehlen oder falsch sein. Habe per Wireshark geschaut. Das Keyword wird korrekt gesendet. Leider kann ich das Autoit-Client-Paket nicht per Wireshark zum Vergleich anschauen, da der in Windows kein network adapter interface findet.

  • Autoit TCP server aus Linux heraus erreichen

    • markplus
    • 30. Juli 2016 um 14:44

    Habe ich nicht ganz verstanden. Kannst Du mir ein Beispiel geben?

  • Autoit TCP server aus Linux heraus erreichen

    • markplus
    • 30. Juli 2016 um 14:22

    $msg ist eine globale Variable und die befindet sich doch immer in der while Schleife.

    Eine Idee, warum das mit der TCP Nachricht von Linux aus nicht funktioniert?

  • Autoit TCP server aus Linux heraus erreichen

    • markplus
    • 30. Juli 2016 um 13:48

    Hallo zusammen,

    auf meinem Desktop PC läuft folgendes Server Script:

    Code
    Func Server()
    	While 1
    			$msg = TCPRecv($Socket_Data[$x], 1000000)
    			If $msg Then
    				Call(Remote)
    			EndIf
    	WEnd
    EndFunc   ;==>Server
    
    
    Func Remote() 
    	Select ;If we receive a message
    		Case $msg = "start"
    			Run("C:\Program Files (x86)\Test\test.exe")
    	EndSelect
    EndFunc   ;==>Remote
    Alles anzeigen

    Auf meinem Laptop läuft folgendes Client Script:

    Code
    Remoote()
    Func Remoote()
    	TCPStartup()
    	$ipAddress = "192.168.0.105"
    	$portAddress = 666
    	$connectedSocket = TCPConnect($ipAddress, $portAddress) 
    	While 1
    		$msg = GUIGetMsg()
    		Select
    			Case $msg = $cb_start
    				$message = "start"
    				TCPSend($connectedSocket, $message)
    		EndSelect
    	WEnd
    	TCPShutdown()
    EndFunc   ;==>Remoote
    Alles anzeigen


    Nun möchte ich von einer Linux shell heraus Befehle an den Server schicken. Eigentlich müssten dafür nur drei Parameter von Nöten sein:
    - IP
    - Port
    - Text

    Ich habe es per folgendem Scapy Kommando erfolglos probiert:

    Code
    p=sr(IP(dst="192.168.0.105")/TCP(dport=666)/"start")


    Kann mir jemand sagen, warum das nicht funktioniert bzw. wie man aus Linux heraus ein funktionsfähiges Kommando schicken könnte?

    Hoffe, jemand kann hier helfen.

  • ShellExecute mit Inhalt aus einer einzigen Variablen

    • markplus
    • 23. November 2015 um 18:33

    Es handelte sich schon um einen absoluten Pfad. Habe das Problem gelöst indem ich @comspec verwendet habe.

  • ShellExecute mit Inhalt aus einer einzigen Variablen

    • markplus
    • 22. November 2015 um 14:40

    Also mit dem Run-Befehl hat es funktinoiet. Allerdings habe ich ein anderes seltsames Phänomen festgestellt, das ich in der Form so noch nie hatte.

    Wenn der Server von irgendeinem Verzeichnis aus gestartet wird, dann funktioniert der Run-Befehl.

    Wenn der Server infolge des Restarts des PCs aus dem Startup-Ordner heraus gestartet wird, funktioniert der Run-Befehl nicht.

    Woran könnte das liegen, dass der Run-Befehl aus dem Autostart Ordner heraus nicht funktioniert und aus irgendeinem "normalen" Ordner heraus nicht?

  • ShellExecute mit Inhalt aus einer einzigen Variablen

    • markplus
    • 21. November 2015 um 23:47

    Herzlichen Dank für die Antwort. Dann werde ich es doch mit dem Run()-Befehl probieren.

  • ShellExecute mit Inhalt aus einer einzigen Variablen

    • markplus
    • 21. November 2015 um 22:33

    Die gesamte Variable wird als String übergeben. Wie kann die Variable im Client gesplittet werden?

  • ShellExecute mit Inhalt aus einer einzigen Variablen

    • markplus
    • 21. November 2015 um 22:18

    Ich wollte es nur nicht verkomplizieren. Also, es geht darum, den VLC Media Player auf einem anderen Computer zu öffnen mit einem zu übergebenden Zeilenparameter.

    Auf dem gleichen PC würde man in der Kommandozeile Folgendes schreiben:

    Code
    ShellExecute('C:\Program Files\VideoLAN\VLC\vlc', 'http://192.168.0.103:8080/x.mp3')


    Nun ist es aber so, dass sich auf PC1 der client und auf PC2 der Server befindet. Der Server wartet auf eine Variable, diese sei $a und sobald die empfangen wird, wird mit dieser ein ShellExecute ausgeführt. Daher steht eben nur eine Variable zur Verfügung, die den gesamten Inhalt enthalten muss.

    Ist damit die Frage beantwortet?

  • ShellExecute mit Inhalt aus einer einzigen Variablen

    • markplus
    • 21. November 2015 um 21:56

    Hallo zusammen,

    ich hoffe, jemand kann mir bei meinem Problem weiter helfen. Ziel ist es ein ShellExecute durchzuführen, bei dem der gesamte Ihnalt ein einer einzigen Variablen enthalten ist. Um es anschaulicher zu machen:

    Code
    ShellExecute('C:\Program Files\VideoLAN\VLC\vlc', 'http://192.168.0.103:8080/x.mp3')


    funktioniert.

    Code
    $a = "'C:\Program Files\VideoLAN\VLC\vlc', 'http://192.168.0.103:8080/x.mp3'" 
    ShellExecute($a)

    funktioniert aber leider nicht.

    Habe schon alle möglichen Varianten probiert, aber nichts hat funktiniert.

    Weiss hier jemand Rat?

  • Problem beim mp3 mit Hilfe von Bass.dll per TCP streamen

    • markplus
    • 4. Juli 2015 um 00:06
    Zitat von Peter S. Taler

    welche autiIt version setzt du ein?

    gruß
    Peter

    AutoIt Version: 3.3.12.0

  • Problem beim mp3 mit Hilfe von Bass.dll per TCP streamen

    • markplus
    • 3. Juli 2015 um 12:30

    Hallo zusammen,

    hier
    https://www.autoitscript.com/forum/topic/98…th-bass/?page=1
    habe ich Skripte gefunden, mit deren Hilfe man im lokalen WLAN (oder sogar übers Internet) ein Lied von einem auf den anderen Computer streamen kann.

    Das Konzept beinhaltet eine
    - Broadcaster.au3, die das Datenpaket an einem vordefonierten Port zur Verfügung stellt
    - Radio.au3, die auf die zur Verfügung stellende IP:Port zugreift, die Datenpakete herunterläd und diese mit Hilfe der Bass.dll abspielt.

    Nun besteht das Problem darin, dass der empfancende Computer beim Abspielen des Lieders entweder Aussetzer hat oder sich sogar die die Daten zur Verfügung stellende Broadcaster.au3 aufhängt.

    Meine Idee war, dass vielleicht das Anpassen eines Parameters das Problem lösen kann. Bisher war ich aber erfolglos, zumal ich das Script noch nicht zu 100% verstehe.

    Broadcaster.au3 sieht wie folgt aus:

    C
    #cs
    	Very simple broadcasting script.
    	Opens connection to unlimited amount of clients and sends binary data to them
    #ce
    
    
    #include <StaticConstants.au3>
    #include <Array.au3>
    #include <WinApi.au3>
    Opt("GUIOnEventMode", 1)
    TCPStartup()
    
    
    Global Const $sIP = @IPAddress1, $iPort = 45672
    Global Const $iBufferSize = 2 * 1024
    Global Const $hBuffer = DllStructCreate("byte[" & $iBufferSize & "]")
    Global $sFile, $ListeningSocket, $Connections[1][2], $bBroadCasting = False, $hFile, $FileSize, $iRead
    
    
    
    
    $hWnd = GUICreate("Broadcaster++", 400, 150)
    GUISetBkColor(0)
    
    
    $label1 = GUICtrlCreateLabel("Status:", 10, 10, 380, 30, $SS_CENTER)
    GUICtrlSetColor(-1, 0xffffff)
    GUICtrlSetFont(-1, 24)
    
    
    $label2 = GUICtrlCreateLabel("Not broadcasting", 10, 45, 380, 50, $SS_CENTER)
    GUICtrlSetColor(-1, 0xff0000)
    GUICtrlSetFont(-1, 24)
    
    
    $button1 = GUICtrlCreateButton("Start Broadcasting", 200 - 75, 90, 150, 40)
    GUICtrlSetOnEvent(-1, "StartStopBroadcasting")
    
    
    GUISetOnEvent(-3, "close")
    GUISetState()
    
    
    
    
    
    
    Do
    
    
    	If $bBroadCasting Then
    
    
    		$tempsocket = TCPAccept($ListeningSocket)
    		If $tempsocket <> -1 Then
    			ReDim $Connections[UBound($Connections) + 1][2]
    			$Connections[UBound($Connections) - 1][0] = $tempsocket
    		EndIf
    
    
    		For $i = UBound($Connections) - 1 To 1 Step -1
    			_WinAPI_SetFilePointer($hFile, $Connections[$i][1])
    
    
    			_WinAPI_ReadFile($hFile, DllStructGetPtr($hBuffer), $iBufferSize, $iRead)
    			$Connections[$i][1] += $iRead
    			If $iRead = 0 Then
    				ConsoleWrite("All data pushed. See ya!" & @CRLF)
    				TCPCloseSocket($Connections[$i][0])
    				_ArrayDelete($Connections, $i)
    				ContinueLoop
    			EndIf
    
    
    			$tempbuffer = DllStructCreate("byte[" & $iRead & "]", DllStructGetPtr($hBuffer))
    			ConsoleWrite("Sending " & $iRead & " bytes of data." & @CRLF)
    			TCPSend($Connections[$i][0], DllStructGetData($tempbuffer, 1))
    			If @error Then ; Client disconnected
    				ConsoleWrite("Client disconnected." & @CRLF)
    				TCPCloseSocket($Connections[$i][0])
    				_ArrayDelete($Connections, $i)
    				ContinueLoop
    			EndIf			
    
    
    		Next
    
    
    
    
    
    
    
    
    	EndIf
    
    
    
    
    Until Not Sleep(10)
    
    
    
    
    Func StartStopBroadcasting()
    
    
    	If Not $bBroadCasting Then
    		$sFile = FileOpenDialog("Audio file to broadcast", "", "MP3 Files(*.mp3;)")
    		If $sFile = "" Then Return
    		$ListeningSocket = TCPListen($sIP, $iPort)
    		$FileSize = FileGetSize($sFile)
    		$hFile = _WinAPI_CreateFile($sFile, 2, 2)
    		GUICtrlSetData($label2, "Broadcasting")
    		GUICtrlSetColor($label2, 0x00ff00)
    		GUICtrlSetData($button1, "Stop broadcasting")
    
    
    	Else
    		_WinAPI_CloseHandle($hFile)
    		$hFile = 0
    		For $i = UBound($Connections) - 1 To 1 Step -1
    			TCPCloseSocket($Connections[$i][0])
    			_ArrayDelete($Connections, $i)
    
    
    		Next
    		GUICtrlSetData($label2, "Not Broadcasting")
    		GUICtrlSetColor($label2, 0xFF0000)
    		GUICtrlSetData($button1, "Start broadcasting")
    		TCPCloseSocket($ListeningSocket)
    
    
    	EndIf
    
    
    	$bBroadCasting = Not $bBroadCasting
    
    
    
    
    
    
    EndFunc   ;==>StartStopBroadcasting
    
    
    
    
    Func close()
    	If $hFile <> 0 Then _WinAPI_CloseHandle($hFile)
    	For $i = UBound($Connections) - 1 To 1 Step -1
    		TCPCloseSocket($Connections[$i][0])
    		_ArrayDelete($Connections, $i)
    	Next
    	TCPShutdown()
    	Exit
    EndFunc   ;==>close
    Alles anzeigen


    Und hier die Radio.au3:

    C
    #include <StaticConstants.au3>
    #include <Array.au3>
    
    
    
    
    ; Due to a bug in version <=3.3.0.0 the script will notfunction correctly in these warnings
    If Int(StringReplace(@AutoItVersion, ".", "")) <= 3300 Then
    	MsgBox(16,"Error!","This script is NOT compatible with this version of AutoIt!"&@CRLF&"Script will now exit!.")
    	Exit
    EndIf
    
    
    ; Bass constants
    Global Const $BASS_STREAM_BLOCK = 0x100000 ;// download/play internet file stream in small blocks
    Global Const $STREAMFILE_BUFFERPUSH = 2
    Global Const $STREAMFILE_BUFFER = 1
    Global Const $BASS_FILEDATA_END = 0
    Global Const $BASS_FILEPOS_BUFFER = 5
    
    
    ; Startup bass & create callbacks
    $bass = DllOpen("bass.dll")
    DllCall($bass, "int", "BASS_Init", "int", -1, "dword", 44100, "dword", 0, "hwnd", 0, "ptr", 0)
    $proc = DllStructCreate("ptr;ptr;ptr;ptr")
    $cb_close = DllCallbackRegister("Bass_Callback_Close", "none", "ptr")
    $cb_length = DllCallbackRegister("Bass_Callback_Length", "uint64", "ptr")
    $cb_read = DllCallbackRegister("Bass_Callback_Read", "dword", "ptr;dword;ptr")
    $cb_seek = DllCallbackRegister("Bass_Callback_Seek", "int", "uint64;ptr")
    DllStructSetData($proc, 1, DllCallbackGetPtr($cb_close))
    DllStructSetData($proc, 2, DllCallbackGetPtr($cb_length))
    DllStructSetData($proc, 3, DllCallbackGetPtr($cb_read))
    DllStructSetData($proc, 4, DllCallbackGetPtr($cb_seek))
    
    
    
    
    
    
    
    
    TCPStartup()
    
    
    Global Const $iPort = 45672
    Global $bListening = False, $Socket, $DataBuffer, $hStream = 0
    
    
    
    
    Opt("GUIOnEventMode", 1)
    $hWnd = GUICreate("Radio Client++", 400, 150)
    GUISetBkColor(0)
    
    
    $label1 = GUICtrlCreateLabel("Status:", 10, 10, 380, 30, $SS_CENTER)
    GUICtrlSetColor(-1, 0xffffff)
    GUICtrlSetFont(-1, 24)
    
    
    $label2 = GUICtrlCreateLabel("Not Listening", 10, 45, 380, 50, $SS_CENTER)
    GUICtrlSetColor(-1, 0xff0000)
    GUICtrlSetFont(-1, 24)
    
    
    $button1 = GUICtrlCreateButton("Start Listening", 200 - 75, 90, 150, 40)
    GUICtrlSetOnEvent(-1, "StartStopListening")
    
    
    GUISetOnEvent(-3, "close")
    GUISetState()
    
    
    
    
    
    
    
    
    Do
    
    
    	If $bListening Then
    
    
    
    
    		If $Socket <> -1 Then ; Recieve data
    			$verytemp = TCPRecv($Socket, 1024 ^ 2, 1)
    			If @error Then $Socket = -1
    			$DataBuffer = Binary($DataBuffer) & Binary($verytemp)
    		ElseIf BinaryLen($DataBuffer) = 0 Then ; End of data
    
    
    			Do
    				$call = DllCall($bass, "int64", "BASS_StreamGetFilePosition", "dword", $hStream, "dword", $BASS_FILEPOS_BUFFER)
    				Sleep(10)
    			Until Not $call[0] ; Wait until the playback buffer is empty
    			DllCall($bass, "dword", "BASS_StreamPutFileData", "dword", $hStream, "ptr", $BASS_FILEDATA_END, "int", 0)
    			StartStopListening()
    		EndIf
    
    
    
    
    
    
    
    
    		If $hStream = 0 And BinaryLen($DataBuffer) > 8192 Then ; When we have recieved some initial data lets create the stream
    
    			; Create data buffer
    			$tempbuffer = DllStructCreate("byte[" & BinaryLen($DataBuffer) & "]")
    			DllStructSetData($tempbuffer, 1, $DataBuffer)
    
    			; Create stream (here comes the story of bass):
    			; Even though I wanted to PUSH the data myself (you know, since we don't know when the data will be coming in),
    			; but Bass still wants to call the read callbacks making life, uhm quite  annoying. See the Bass_Callback_Read function.
    			$hStream = DllCall($bass, "dword", "BASS_StreamCreateFileUser", "dword", $STREAMFILE_BUFFERPUSH, "dword", 0, _
    					"ptr", DllStructGetPtr($proc), "ptr", DllStructGetPtr($tempbuffer))
    			$hStream = $hStream[0]
    
    			; Start the playback
    			DllCall($bass, "dword", "BASS_ChannelPlay", "dword", $hStream, "int", 0)
    
    
    
    
    		ElseIf $hStream <> 0 And (BinaryLen($DataBuffer)>1024*10 Or $Socket=-1) Then
    
    			; No need to copy entire buffer around, 256 kB should be enough.
    			If BinaryLen($DataBuffer) < 256 * 1024 Then
    				$tempbuffer = DllStructCreate("byte[" & BinaryLen($DataBuffer) & "]")
    			Else
    				$tempbuffer = DllStructCreate("byte[" & 256 * 1024 & "]")
    			EndIf
    			DllStructSetData($tempbuffer, 1, $DataBuffer)
    
    			; Push some data!
    			$call = DllCall($bass, "dword", "BASS_StreamPutFileData", "dword", $hStream, "ptr", DllStructGetPtr($tempbuffer), "int", DllStructGetSize($tempbuffer))
    
    			ConsoleWrite("Pushed "&$call[0]&" bytes of data (Total buffer size: "&BinaryLen($DataBuffer)&")."& @CRLF)
    
    			; Remove data that already have been pushed.
    			$DataBuffer = Binary(BinaryMid($DataBuffer, $call[0] + 1))
    		EndIf
    	EndIf
    Until Not Sleep(75)
    
    
    
    
    
    
    Func StartStopListening()
    
    
    	If Not $bListening Then
    		$sIP = InputBox("IP of broadcaster", "Please enter the dotted ip address of the broadcaster", @IPAddress1)
    		$Socket = TCPConnect($sIP, $iPort)
    		If $Socket = -1 Then
    			MsgBox(16, "Error", "Failed to connect")
    			Return
    		EndIf
    
    
    		GUICtrlSetData($label2, "Listening")
    		GUICtrlSetColor($label2, 0x00ff00)
    		GUICtrlSetData($button1, "Stop Listening")
    		$DataBuffer = ""
    
    
    
    
    	Else
    		DllCall($bass, "dword", "BASS_StreamFree", "dword", $hStream)
    		$hStream = 0
    		GUICtrlSetData($label2, "Not Listening")
    		GUICtrlSetColor($label2, 0xff0000)
    		GUICtrlSetData($button1, "Start Listening")
    		TCPCloseSocket($Socket)
    
    
    
    
    
    
    	EndIf
    
    
    	$bListening = Not $bListening
    
    
    EndFunc   ;==>StartStopListening
    
    
    
    
    
    
    Func close()
    	DllCall($bass, "int", "BASS_StreamFree", "dword", $hStream)
    	TCPShutdown()
    	Exit
    EndFunc   ;==>close
    
    
    
    
    
    
    Func Bass_Callback_Close($pUser)
    	ConsoleWrite("Bass wants to close the file." & @CRLF)
    EndFunc   ;==>Bass_Callback_Close
    
    
    Func Bass_Callback_Length($pUser)
    	ConsoleWrite("Bass wants the length of the file." & @CRLF)
    	; Returning 0 means Bass will get the data when bass gets it. 
    	Return 0
    EndFunc   ;==>Bass_Callback_Length
    
    
    Func Bass_Callback_Read($pBuffer, $iSize, $pUser)
    	; Write data to the buffer pointer Bass supplied us with.
    	; Hopefully bass don't want more than 8 kB (the amount of data guarantied to be in the buffer) 
    	$tBuffer = DllStructCreate("byte[" & $iSize & "]", $pBuffer)
    	DllStructSetData($tBuffer, 1, BinaryMid($DataBuffer, 1, $iSize))
    	$DataBuffer = BinaryMid($DataBuffer, $iSize)
    	ConsoleWrite("Bass wants to read " & $iSize & " bytes." & @CRLF)
    	Return $iSize
    EndFunc   ;==>Bass_Callback_Read
    
    
    Func Bass_Callback_Seek($iOffset, $pUser)
    	ConsoleWrite("Bass wants to seek the file." & @CRLF)
    EndFunc   ;==>Bass_Callback_Seek
    Alles anzeigen


    Kann hier jemand helfen?

  • Zwei Webcam-Anwendungen

    • markplus
    • 5. November 2014 um 22:08

    Hallo zusammen,

    also ich habe immer noch das gleiche Problem. Wenn ich folgenden Code benutze:

    [autoit]

    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_FILE_SET_CAPTURE_FILEA, "int", 0, "str", $moviefile)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DLG_VIDEOCOMPRESSION, "int", 0, "str", "")
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SEQUENCE, "int", 0, "int", 0)

    [/autoit]

    Dann erscheint folgendes Auswahlmenü:
    [Blockierte Grafik: https://www.anonimg.com/img/3da4687f3605c84abfdb99d62d0543d9.png]

    Wenn ich dann ein Komprimierungsprogramm auswähle, wird auch entsprechend komprimiert aufgenommen.

    Ich will das aber die Aufnahme von einem anderen Rechner aus per TCP ausführen und kann dahernicht jedesmal manuell den gewünschten Codec auswählen. Habe alle möglichen Variationen der obigen mittleren Code-Zeile versucht - ohne Erfolg. Es muss aber irgendwie gehen. Hat wirklich keiner von euch eine Idee?

  • Zwei Webcam-Anwendungen

    • markplus
    • 2. November 2014 um 15:35

    Hallo zusammen,

    ich bin ein begeisterter Nutzer der auf autoit.de und autoscript.com geposteten UDFs für webcams und konnte schon eine Menge an Hürden überwinden oder umschiffen. Bei einem ist es mir jedoch nicht gelungen.

    Folgende Aufnahmefunktionen nutze ich:

    [autoit]

    Func StartRecording()
    WinSetTitle($Main, "", "WebCam - Capturing...")
    HotKeySet("{HOME}", "StopRecording")
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_FILE_SET_CAPTURE_FILEA, "int", 0, "str", $moviefile)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SEQUENCE, "int", 0, "int", 0)
    EndFunc

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

    Func StopRecording()
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_STOP, "int", 0, "int", 0)
    WinSetTitle($Main, "", "WebCam - Ready")
    HotKeySet("{HOME}", "StartRecording")
    EndFunc

    [/autoit]

    Das Problem ist, dass das Video im Rohformat aufgenommen wird und ca 10 MB pro Sekunde(!) an Speicherplatz benötigt!

    Nun habe ich z.B. Folgendes probiert:

    [autoit]

    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_FILE_SET_CAPTURE_FILEA, "int", 0, "str", $moviefile)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DLG_VIDEOCOMPRESSION, "int", 0, "str", "C:\Program Files (x86)\Windows Live\Photo Gallery\MovieMaker.exe")
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SEQUENCE, "int", 0, "int", 0)

    [/autoit]

    Funktioniert leider nicht.

    Vielleicht weiss einer von euch, wie man gleichzeitig mit der Aufnahme auch komprimieren kann...?!?

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™