Da du die Datei abspielen kannst, ist der Inhalt unbeschädigt. Vermutlich sind im Header Informationen beschädigt. Du hast nicht geschrieben, was es für eine Videodatei ist. Aber für AVI hatte ich mal ein Programm mit dem der Header neu erstellt werden konnte, sollte es auch für andere Formate geben, denke ich. Viel Glück beim Suchen. ![]()
Beiträge von BugFix
-
-
Hier nochmal der Code, aber auf Basis eines gespeicherten Bildes.
Basis *.bmp
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <ScreenCapture.au3>
#include <WinAPI.au3>_Main()
[/autoit] [autoit][/autoit] [autoit]Func _Main()
[/autoit] [autoit][/autoit] [autoit]
Local $hBitmap, $iX, $iY_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]; Capture 32 bit bitmap
[/autoit] [autoit][/autoit] [autoit]
_ScreenCapture_Capture(@TempDir & '\capture.bmp')
$hBitmap = _GDIPlus_BitmapCreateFromFile(@TempDir & '\capture.bmp'); Create 24 bit bitmap clone
[/autoit] [autoit][/autoit] [autoit]
$iX = _GDIPlus_ImageGetWidth ($hBitmap)
$iY = _GDIPlus_ImageGetHeight ($hBitmap)MsgBox(0, 'Maße', 'Bildabmessung: ' & $iX & ' x ' & $iY)
[/autoit] [autoit][/autoit] [autoit]; Clean up resources
[/autoit] [autoit][/autoit] [autoit]
_WinAPI_DeleteObject ($hBitmap); Shut down GDI+ library
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_ShutDown ()EndFunc ;==>_Main
[/autoit]
Edit:Basis *.jpg
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <ScreenCapture.au3>
#include <WinAPI.au3>_Main()
[/autoit] [autoit][/autoit] [autoit]Func _Main()
[/autoit] [autoit][/autoit] [autoit]
Local $hBitmap, $iX, $iY, $hImage_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]; Capture 32 bit bitmap
[/autoit] [autoit][/autoit] [autoit]
_ScreenCapture_Capture(@TempDir & '\capture.jpg')
$hBitmap = _GDIPlus_BitmapCreateFromFile(@TempDir & '\capture.jpg')
$hImage = _GDIPlus_ImageLoadFromFile(@TempDir & '\capture.jpg'); Create 24 bit bitmap clone
[/autoit] [autoit][/autoit] [autoit]
$iX = _GDIPlus_ImageGetWidth($hImage); ($hBitmap)
$iY = _GDIPlus_ImageGetHeight($hImage); ($hBitmap)MsgBox(0, 'Maße', 'Bildabmessung: ' & $iX & ' x ' & $iY)
[/autoit] [autoit][/autoit] [autoit]; Clean up resources
[/autoit] [autoit][/autoit] [autoit]
_WinAPI_DeleteObject ($hBitmap); Shut down GDI+ library
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_ShutDown ()EndFunc ;==>_Main
[/autoit]
Gib mal in der SuFu Screencapture ein, da findest du schon etliche Lösungen. -
Ich hab das Bsp. aus der Hilfe mal leicht verändert, so siehst du, wie du zu den Maßen kommst:
Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <ScreenCapture.au3>
#include <WinAPI.au3>_Main()
[/autoit] [autoit][/autoit] [autoit]Func _Main()
[/autoit] [autoit][/autoit] [autoit]
Local $hWnd, $hBitmap, $hClone, $hImage, $iX, $iY, $hDC; Initialize GDI+ library
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_Startup (); Handle des aktiven Fensters holen
[/autoit] [autoit][/autoit] [autoit]
$hWnd = WinGetHandle('[ACTIVE]'); Capture 32 bit bitmap
[/autoit] [autoit][/autoit] [autoit]
$hBitmap = _ScreenCapture_CaptureWnd ("", $hWnd)
$hImage = _GDIPlus_BitmapCreateFromHBITMAP ($hBitmap); Create 24 bit bitmap clone
[/autoit] [autoit][/autoit] [autoit]
$iX = _GDIPlus_ImageGetWidth ($hImage)
$iY = _GDIPlus_ImageGetHeight ($hImage)MsgBox(0, 'Maße', 'Bildabmessung: ' & $iX & ' x ' & $iY)
[/autoit] [autoit][/autoit] [autoit]; Clean up resources
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_ImageDispose ($hClone)
_GDIPlus_ImageDispose ($hImage)
_WinAPI_DeleteObject ($hBitmap); Shut down GDI+ library
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_ShutDown ()EndFunc ;==>_Main
[/autoit] [autoit][/autoit] [autoit][/autoit] -
Aber eine Frage hab ich dann doch noch wie kann ich denn nun die Bildgröße herausfinden? Danke
Ich verstehe den Sinn deiner Frage nicht. Du willst doch nur einen bestimmten Bildausschnitt capturen. Dafür übergibst du die Koordinaten - also weißt du doch, welche Abmessungen dein Bild hat. -
Du solltest nur die Befehle (ohne ID-Variable) übergeben. Die ID's der erstellten Ctrls läßt du dir einfach in einem Array speichern.
[autoit]
Übergib auch gleich ein Array, sparst du dir das Splitten.Local $Cmd[4] = [ _
[/autoit][autoit][/autoit][autoit]
'GUICreate("Form2", 131, 79, 192, 124)', _
'GUICtrlCreateButton("Button1", 8, 8, 75, 25)', _
'GUICtrlCreateButton("Button2", 8, 40, 75, 25)', _
'GUISetState(@SW_SHOW)']$getID = _PlugIn_ExecAll($Cmd)
[/autoit][autoit][/autoit][autoit]
Sleep(1000)
GUISetState(@SW_MAXIMIZE, $getID[0])
Sleep(1000)
GUISetState(@SW_RESTORE, $getID[0])MsgBox(0, "ID Form2", $getID[0])
[/autoit][autoit][/autoit][autoit]Func _PlugIn_ExecAll($__CMD)
[/autoit]
Local $ret_ID[UBound($__CMD)]
For $x = 0 To UBound($__CMD) -1
$ret_ID[$x] = Execute($__CMD[$x])
Next
Return $ret_ID
EndFunc ;==>_PlugIn_ExecAll -
[OT]
Bitte benutze Groß-/Kleinschreibung UND Interpunktion! Es grenzt sonst an ein Ratespiel, dein Problem zu Erkennen. Und entsprechend wenig Resonanz wirst du haben.
[/OT] -
Was ich weis liegt das prob an autoit, daher kann man da eig nix machen, also glaub nict das das mal irgendwer schaffen sollte. Aber vllt mal mit ner neuen version von autoit od so. Aber derezit is dasa leider nicht möglich
Man, was seit ihr negativ.
Ein bischen Überlegen und dann fällt einem auch der richtige Weg ein:Spoiler anzeigen
[autoit]#include <WindowsConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WinAPI.au3>Global $hDC, $hPen, $obj_orig
[/autoit] [autoit][/autoit] [autoit]
Global $active, $lastActive = 0
HotKeySet("!e", '_ende')AdlibEnable('_SetCrossToActive')
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc _SetCrossToActive()
[/autoit] [autoit][/autoit] [autoit]
$active = WinGetHandle('[ACTIVE]')
If $lastActive = $active Then Return
$lastActive = $active
$hDC = _WinAPI_GetWindowDC($active)
ShowCross($hDC, @DesktopWidth / 2, @DesktopHeight / 2, 20, 2, 0xFF)
EndFuncFunc ShowCross($hDC, $start_x, $start_y, $length, $width, $color)
[/autoit] [autoit][/autoit] [autoit]
$hPen = _WinAPI_CreatePen($PS_SOLID, $width, $color)
$obj_orig = _WinAPI_SelectObject($hDC, $hPen)
_WinAPI_DrawLine($hDC, $start_x - $length, $start_y, $start_x - 5, $start_y) ; horizontal left
_WinAPI_DrawLine($hDC, $start_x + $length, $start_y, $start_x + 5, $start_y) ; horizontal right
_WinAPI_DrawLine($hDC, $start_x, $start_y - $length, $start_x, $start_y - 5) ; vertical up
; _WinAPI_DrawLine($hDC, $start_x, $start_y + $length, $start_x, $start_y + 5) ; vertical down
_WinAPI_MoveTo($hDC, $start_x, $start_y + $length)
_WinAPI_LineTo($hDC, $start_x, $start_y + 5)
EndFunc ;==>ShowCrossFunc _ende()
[/autoit]
AdlibDisable()
_WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, BitOR($RDW_INVALIDATE,$RDW_ALLCHILDREN))
_WinAPI_SelectObject($hDC, $obj_orig)
_WinAPI_DeleteObject($hPen)
_WinAPI_ReleaseDC(0, $hDC)
Exit
EndFunc -
Du liest am Anfang 3 Parameter aus:
[autoit]$main_pid = $CmdLine[1]
[/autoit]
$cool_key = $CmdLine[2]
$cool_hwnd = $CmdLine[3]
Das heißt aber auch, dass du zwingend dein Programm mit allen 3 Parametern aufrufen mußt. Verwendest du nur 2 kommt der Fehler:
Error: Array variable subscript badly formatted -
Aber wieso WAV-Dateien? Was für Probleme gibt es denn mit MP3?
Das Ausführen von mp3 mit SoundPlay() od. _SoundPlay() funktioniert und bringt AutoIt-technisch auch keinen Fehler. Aber nach jedem Sound erhalte ich eine externe Fehlermeldung (Rückgabefehler) von einer .cpp-Datei. Da diese Datei irgendwo als Source eingebunden ist, habe ich keine Chance, die Fehlerquelle zu finden.
Und wenn dies bei mir passiert, ist es nicht unwahrscheinlich, dass bei anderen derselbe Fehler auftaucht. Somit habe ich mich für die sichere Variante entschieden.
Ich vermute, Windows ist von Haus aus aus Lizenzgründen nicht mit einem mp3-Encoder ausgestattet. Erst die Installation von Programmen, die diese Lizenzen führen, macht mp3-Betrieb möglich.
Ich hätte auch lieber mp3 verwendet. Schließlich ist das Speicherverhältnis 1:10. -
Ja, das geht z.B. mit meiner Funktion _SplashOn.
Damit kannst du auch Text mit transparentem Hintergrund frei positionieren. -
Wo hast du eigentlich die Geräuche her?
Die findest du auf: https://autoit.de/www.partnersinrhyme.com und https://autoit.de/www.infilmserver.de -
Hi,
nun habe ich mich auch mal drangesetzt und ein Spiel für Kinder erstellt.
Beim Tierstimmenrätsel geht es darum, nacheinander 10 Tierstimmen zu erkennen.
Es ertönt erst die Tierstimme, dann wird eine GUI mit 30 Tierbildern (Anordnung jedes mal wechselnd) eingeblendet. Je nach Level hat man 30, 20, 10 oder 5 Sekunden Zeit auf das richtige Bild zu klicken. Dabei zählt ein Punktwert von 100 gegen 0. Wird auf das Bild geklickt, bleibt der Punktwert stehen und wird, wenn es das richtige Bild ist, zu den Gesamtpunkten addiert.
Ein Highscore mit 10 Einträgen für jedes Level wird geführt.
Im Übungsmode werden alle Bilder eingeblendet und bei Klick ertönt der zugehörige Sound.
Damit es überall abgespielt werden kann, liegen die Sounds als *.wav vor, was leider das Ganze aufbläht.
Deshalb habe ich den gezipten Programmordner auf meinen Webspace gepackt.Anmerkung zum Urheberrechtsschutz:
Die verwendeten Symbole/Klänge sind laut Info der Anbieter für die nichtkommerzielle Nutzung frei verwendbar.
Eine Quellenangabe befindet sich in der Source.Download: animal.zip
Und hier noch ein paar Bilder:
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. -
Jetzt soll diese Datei ausgelesen werden und auf die jeweilige Taste per Send der String hinter dem ; ausgeführt werden.
Na genau das geht doch mit dem Bsp., dass ich dir gezeigt habe.
Per HotkeySet wird in der dazugehörigen Funktion die Dummy-Funktion mit dem jeweiligen Befehlsstring ausgeführt. -
Mal unabhängig vom Lösungsweg:
Ich persönlich finde es mehr als nervig, wenn bei irgendwelchen, nicht sicherheitsrelevanten Aktionen diese Abfrage: "Sind Sie sicher bla bla" auftaucht. Da frag ich mich immer: Hä, halten die Programmierer die User für grenzenlos dämliche Trottel, die ausnahmslos immer auf irgendwelche Button klicken?
Man muß nicht immer jede mögliche Dummheit abfangen. Ist auch ein Stück Lernprozeß für den User, wenn er ohne zu Denken klickt.
-
Geht auch ohne lästige Send-Befehle:
[autoit]RunWait(@ComSpec & " /c " & 'net stop spooler', "", @SW_HIDE)
[/autoit]
Local $PID = Run(@ComSpec & " /c " & 'del %WINDIR%\System32\spool\PRINTERS\*.*', "", @SW_HIDE, 0x1)
StdinWrite($PID, 'J')
StdinWrite($PID)
RunWait(@ComSpec & " /c " & 'net start spooler', "", @SW_HIDE) -
wie wär es denn, wenn du dein Skript auch mal zeigst. Aus deiner Beschreibung kann ich icht viel herauslesen.
-
Erstelle doch eine Dummy-Funktion, der du den variablen Befehlsstring übergibst:
[autoit]$ToDo = InputBox('Variable Befehle', 'Gib eine Befehlszeile ein', 'MsgBox(0, "TEST", "Das ist ein Testbefehl")')
[/autoit][autoit][/autoit][autoit]
_Dummy($ToDo)Func _Dummy($ToDo)
[/autoit]
Execute($ToDo)
EndFunc -
2. Wie kann ich die Sortierung der Spalten im einem ListView speichern und Widerherstellen? Ich habe das ListView so eingestellt, dass man auf die Columns klicken kann und sich die Sortierung ändert ... nur wie stell ich das nach nem Neustart wieder her (mit ListView-Command)? Das ListView wird über eine DB gefüllt, die Einträge sind erstmal nach OID sortiert.
Nach welcher Spalte sortiert wurde kannst du ja beim ColumnClick in einer Globalen Variable speichern.
Und um die Sortierrichtung zu erfahren gehst du genau so vor, wie du es mit den Augen machst: Vergleiche die ersten beiden Einträge der Sortierspalte, dann kennst du auch die Sortierrichtung.
-
Du hast genau den Code weggelassen, der notwendig ist um dein Problem zu finden - nämlich die Erstellung/Befüllung des Array.
Dieser Zugriff: $traffic = $array[3][2] verweist laut Fehlermeldung auf einen Bereich außerhalb des Arrays. Zeile4/Spalte3 gibt es also nicht. Das Array hat weniger Zeilen od. Spalten laut Fehlermeldung. Dort mußt du also deine Überprüfung ansetzen. -
Sollte so gehen:
[autoit]$fh = FileOpen("meine.txt",0)
[/autoit]
$text = FileRead($fh)
FileClose($fh)
$mp3 = StringRegExp($text, "\.mp3", 3)
MsgBox(0, 'mp3', 'Anzahl .mp3 = ' & Ubound($mp3))