Super BugFix, auf dich ist immer Verlass! Vielen Dank...
Beiträge von ip_trainer
-
-
Hallo,
ich habe aus diesem Thread hier (http://www.autoitscript.com/forum/topic/27…age__hl__webcam) unten stehendes Skript (von verschiedenen Stellen zusammengesucht). Die Screenshots klappen, aber das Aufnehmen eines Films klappt nicht. Ich habe schon einiges ausprobiert, aber nichts hat funktioniert. Es wird zwar eine AVI-Datei angelegt, aber die hat 0KB.
Hat jemand eine Idee, wo das Problem liegt? Oder funktioniert es ggf. bei euch sogar - auf der Seite hat sich nie jemand beschwert (außer einem, der hatte eine TV-Karte), das die Funktion nicht funktioniert.
Gruß
TrainerSpoiler anzeigen
[autoit]#include-once
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>
#include <WindowsConstants.au3>;Konstanten - START
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#Region
$WM_CAP_START = 0x400
$WM_CAP_UNICODE_START = $WM_CAP_START +100
$WM_CAP_PAL_SAVEA = $WM_CAP_START + 81
$WM_CAP_PAL_SAVEW = $WM_CAP_UNICODE_START + 81
$WM_CAP_UNICODE_END = $WM_CAP_PAL_SAVEW
$WM_CAP_ABORT = $WM_CAP_START + 69
$WM_CAP_DLG_VIDEOCOMPRESSION = $WM_CAP_START + 46
$WM_CAP_DLG_VIDEODISPLAY = $WM_CAP_START + 43
$WM_CAP_DLG_VIDEOFORMAT = $WM_CAP_START + 41
$WM_CAP_DLG_VIDEOSOURCE = $WM_CAP_START + 42
$WM_CAP_DRIVER_CONNECT = $WM_CAP_START + 10
$WM_CAP_DRIVER_DISCONNECT = $WM_CAP_START + 11
$WM_CAP_DRIVER_GET_CAPS = $WM_CAP_START + 14
$WM_CAP_DRIVER_GET_NAMEA = $WM_CAP_START + 12
$WM_CAP_DRIVER_GET_NAMEW = $WM_CAP_UNICODE_START + 12
$WM_CAP_DRIVER_GET_VERSIONA = $WM_CAP_START + 13
$WM_CAP_DRIVER_GET_VERSIONW = $WM_CAP_UNICODE_START + 13
$WM_CAP_EDIT_COPY = $WM_CAP_START + 30
$WM_CAP_END = $WM_CAP_UNICODE_END
$WM_CAP_FILE_ALLOCATE = $WM_CAP_START + 22
$WM_CAP_FILE_GET_CAPTURE_FILEA = $WM_CAP_START + 21
$WM_CAP_FILE_GET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 21
$WM_CAP_FILE_SAVEASA = $WM_CAP_START + 23
$WM_CAP_FILE_SAVEASW = $WM_CAP_UNICODE_START + 23
$WM_CAP_FILE_SAVEDIBA = $WM_CAP_START + 25
$WM_CAP_FILE_SAVEDIBW = $WM_CAP_UNICODE_START + 25
$WM_CAP_FILE_SET_CAPTURE_FILEA = $WM_CAP_START + 20
$WM_CAP_FILE_SET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 20
$WM_CAP_FILE_SET_INFOCHUNK = $WM_CAP_START + 24
$WM_CAP_GET_AUDIOFORMAT = $WM_CAP_START + 36
$WM_CAP_GET_CAPSTREAMPTR = $WM_CAP_START + 1
$WM_CAP_GET_MCI_DEVICEA = $WM_CAP_START + 67
$WM_CAP_GET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 67
$WM_CAP_GET_SEQUENCE_SETUP = $WM_CAP_START + 65
$WM_CAP_GET_STATUS = $WM_CAP_START + 54
$WM_CAP_GET_USER_DATA = $WM_CAP_START + 8
$WM_CAP_GET_VIDEOFORMAT = $WM_CAP_START + 44
$WM_CAP_GRAB_FRAME = $WM_CAP_START + 60
$WM_CAP_GRAB_FRAME_NOSTOP = $WM_CAP_START + 61
$WM_CAP_PAL_AUTOCREATE = $WM_CAP_START + 83
$WM_CAP_PAL_MANUALCREATE = $WM_CAP_START + 84
$WM_CAP_PAL_OPENA = $WM_CAP_START + 80
$WM_CAP_PAL_OPENW = $WM_CAP_UNICODE_START + 80
$WM_CAP_PAL_PASTE = $WM_CAP_START + 82
$WM_CAP_SEQUENCE = $WM_CAP_START + 62
$WM_CAP_SEQUENCE_NOFILE = $WM_CAP_START + 63
$WM_CAP_SET_AUDIOFORMAT = $WM_CAP_START + 35
$WM_CAP_SET_CALLBACK_CAPCONTROL = $WM_CAP_START + 85
$WM_CAP_SET_CALLBACK_ERRORA = $WM_CAP_START + 2
$WM_CAP_SET_CALLBACK_ERRORW = $WM_CAP_UNICODE_START + 2
$WM_CAP_SET_CALLBACK_FRAME = $WM_CAP_START + 5
$WM_CAP_SET_CALLBACK_STATUSA = $WM_CAP_START + 3
$WM_CAP_SET_CALLBACK_STATUSW = $WM_CAP_UNICODE_START + 3
$WM_CAP_SET_CALLBACK_VIDEOSTREAM = $WM_CAP_START + 6
$WM_CAP_SET_CALLBACK_WAVESTREAM = $WM_CAP_START + 7
$WM_CAP_SET_CALLBACK_YIELD = $WM_CAP_START + 4
$WM_CAP_SET_MCI_DEVICEA = $WM_CAP_START + 66
$WM_CAP_SET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 66
$WM_CAP_SET_OVERLAY = $WM_CAP_START + 51
$WM_CAP_SET_PREVIEW = $WM_CAP_START + 50
$WM_CAP_SET_PREVIEWRATE = $WM_CAP_START + 52
$WM_CAP_SET_SCALE = $WM_CAP_START + 53
$WM_CAP_SET_SCROLL = $WM_CAP_START + 55
$WM_CAP_SET_SEQUENCE_SETUP = $WM_CAP_START + 64
$WM_CAP_SET_USER_DATA = $WM_CAP_START + 9
$WM_CAP_SET_VIDEOFORMAT = $WM_CAP_START + 45
$WM_CAP_SINGLE_FRAME = $WM_CAP_START + 72
$WM_CAP_SINGLE_FRAME_CLOSE = $WM_CAP_START + 71
$WM_CAP_SINGLE_FRAME_OPEN = $WM_CAP_START + 70
$WM_CAP_STOP = $WM_CAP_START + 68
#EndRegion
; Konstanten - ENDE$avi = DllOpen("avicap32.dll")
[/autoit] [autoit][/autoit] [autoit]
$user = DllOpen("user32.dll")
$snapfile = @ScriptDir & "\scrshot.bmp"
$moviefile = @ScriptDir & "\record.avi"$Main = GUICreate("Camera",350,270)
[/autoit] [autoit][/autoit] [autoit]
$cap = DllCall($avi, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD,$WS_VISIBLE), "int", 15, "int", 15, "int", 320, "int", 240, "hwnd", $Main, "int", 1)DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DRIVER_CONNECT, "int", 0, "int", 0)
[/autoit] [autoit][/autoit] [autoit]
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_SCALE, "int", 1, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_OVERLAY, "int", 1, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEW, "int", 1, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEWRATE, "int", 1, "int", 0)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]HotKeySet("!1", "SnapShot") ;ALT+1 --> Snapshot
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
HotKeySet("!2", "StartRecording") ;ALT+2 --> Aufnahme starten
HotKeySet("!3", "StopRecording") ;ALT+3 --> Aufnahme beendenWhile 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_CALLBACK_FRAME, "int", 0, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_END, "int", 0, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DRIVER_DISCONNECT, "int", 0, "int", 0)
DllClose($avi)
DllClose($user)
Exit
EndIf
Sleep(1)
Wend;--------------- Funktionen -----------------------
[/autoit] [autoit][/autoit] [autoit]
Func SnapShot()
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_GRAB_FRAME_NOSTOP, "int", 0, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_FILE_SAVEDIBA, "int", 0, "str", $snapfile)
EndFuncFunc StartRecording()
[/autoit] [autoit][/autoit] [autoit]
WinSetTitle($Main, "", "WebCam - Capturing...")
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)
EndFuncFunc StopRecording()
[/autoit]
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_STOP, "int", 0, "int", 0)
WinSetTitle($Main, "", "WebCam - Ready")
EndFunc -
Super, danke für die schnelle Hilfe!
-
Hallo,
kann mir jemand erklären, warum die obere Zeile (ohne den 2. Backslash) einen "Tabsprung" erzeugt?
[autoit]ConsoleWrite(StringFormat("\wav\test\%s.wav", "offen") & @CR)
[/autoit]
ConsoleWrite(StringFormat("\wav\\test\%s.wav", "offen") & @CR)Danke für Hilfe
Trainer -
Gern geschehen.
Bitte überprüfe mal deine privaten Nachrichten!
-
Hi,
dann dürfte das hier sein, was du meinst, oder?
Spoiler anzeigen
[autoit]#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>#Region ### START Koda GUI section ### Form=c:\users\luc fonjallaz\desktop\eigene dateien\autoit\form1.kxf
[/autoit] [autoit][/autoit] [autoit]
$Form1_1 = GUICreate("DerVersuch", 127, 180, 364, 130)
GUISetBkColor(0x00FFFF)
$kasten3 = GUICtrlCreateCheckbox("Englisch", 8, 40, 89, 17)
$knopf = GUICtrlCreateButton("OK", 8, 136, 97, 33, 0)
$kasten = GUICtrlCreateCheckbox("Französisch", 8, 8, 97, 17)
$kasten1 = GUICtrlCreateCheckbox("Deutsch", 8, 72, 97, 17)
$kasten2 = GUICtrlCreateCheckbox("Schweizer-Deutsch", 8, 104, 113, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###While 1
[/autoit] [autoit][/autoit] [autoit]$nMsg = GUIGetMsg()
[/autoit] [autoit][/autoit] [autoit]
Switch $nMsgCase $GUI_EVENT_CLOSE
[/autoit] [autoit][/autoit] [autoit]
ExitCase $knopf
[/autoit] [autoit][/autoit] [autoit]
If GUICtrlRead($kasten) = $GUI_CHECKED Then MsgBox(0, "", "Französisch")
If GUICtrlRead($kasten1) = $GUI_CHECKED Then MsgBox(0, "", "Deutsch")
If GUICtrlRead($kasten2) = $GUI_CHECKED Then MsgBox(0, "", "Schweizer-Deutsch")
If GUICtrlRead($kasten3) = $GUI_CHECKED Then MsgBox(0, "", "Englisch")EndSwitch
[/autoit] [autoit][/autoit] [autoit]WEnd
[/autoit]Noch besser wäre dann aber vermutlich das hier, da kann nämlich keine Mehrfachauswahl getroffen werden, falls du das nicht willst...
Spoiler anzeigen
[autoit]#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>#Region ### START Koda GUI section ### Form=c:\users\luc fonjallaz\desktop\eigene dateien\autoit\form1.kxf
[/autoit] [autoit][/autoit] [autoit]
$Form1_1 = GUICreate("DerVersuch", 127, 180, 364, 130)
GUISetBkColor(0x00FFFF)$radio_1 = GUICtrlCreateRadio("Französisch", 8, 8, 97, 17)
[/autoit] [autoit][/autoit] [autoit]
$radio_2 = GUICtrlCreateRadio("Deutsch", 8, 72, 97, 17)
$radio_3 = GUICtrlCreateRadio("Schweizer-Deutsch", 8, 104, 113, 17)
$radio_4 = GUICtrlCreateRadio("Englisch", 8, 40, 89, 17)
$knopf = GUICtrlCreateButton("OK", 8, 136, 97, 33, 0)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]
#EndRegion ### END Koda GUI section ###While 1
[/autoit] [autoit][/autoit] [autoit]$nMsg = GUIGetMsg()
[/autoit] [autoit][/autoit] [autoit]
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitCase $knopf
[/autoit] [autoit][/autoit] [autoit]
If GUICtrlRead($radio_1) = $GUI_CHECKED Then MsgBox(0, "", "Französisch")
If GUICtrlRead($radio_2) = $GUI_CHECKED Then MsgBox(0, "", "Deutsch")
If GUICtrlRead($radio_3) = $GUI_CHECKED Then MsgBox(0, "", "Schweizer-Deutsch")
If GUICtrlRead($radio_4) = $GUI_CHECKED Then MsgBox(0, "", "Englisch")EndSwitch
[/autoit] [autoit][/autoit] [autoit]WEnd
[/autoit]
Gruß
Trainer -
Sei so gut und poste doch mal den gui-schnipsel als quellcode..
-
Danke - ich denke mal damit werde ich es hinbekommen!
Gruß
Trainer -
Hi BugFix,
danke für deine Antwort.
Ich hab's mir durchgelesen, aber ich verstehe es nicht. Kannst du mal bitte noch ein Mini-Bsp. oder einen Hinweis geben?
Danke
Trainer -
Hallo,
kennt jemand eine gute Methode, wie man SQL-Befehle in einer SQLite-Datenbank speichern kann, ohne dass die Datenbank durcheinander gerät (will sagen den zu speichernden SQL-Befehl gleich versucht mitauszuführen).
Ein Sicherheitsproblem ist es in diesem konkreten Fall nicht, ich suche nur eine geeignete Methode die Daten umzuwandeln. In untem stehenden Beispiel wären die SQL-Befehle in $anweisung vorgehalten.Vielleicht string->Hex?
Und wie sieht es mit der max. Zeichenanzahl aus, was kann denn ein String speichern? Das müsste bei einer Umwandlung natürlich auch mitbedacht werden.
Und Sonderzeichen?
Oh, ich glaube es gibt doch einiges zu beachten ...
[autoit]
[/autoit]
_SQLite_Exec(-1, StringFormat("INSERT INTO `anweisungen` (`anweisung`) VALUES ('%s')", $anweisung))
Danke für jede Hilfe!Gruß
Trainer -
Hi,
meinst du so etwas?
Spoiler anzeigen
[autoit]#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>$form = GUICreate("Form1", 615, 438, 571, 228)
[/autoit] [autoit][/autoit] [autoit]
$checkbox = GUICtrlCreateCheckbox("Programm beenden", 56, 80, 200, 17)
GUISetState(@SW_SHOW)While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()Switch $nMsg
[/autoit] [autoit][/autoit] [autoit]Case $GUI_EVENT_CLOSE
[/autoit] [autoit][/autoit] [autoit]
Exit;Wenn die Checkbox angeklickt wird (Haken setzen / Haken entfernen)
[/autoit] [autoit][/autoit] [autoit]
Case $checkbox;Nur wenn der Haken gesetzt wird
[/autoit] [autoit][/autoit] [autoit]
If GUICtrlRead($checkbox) = $GUI_CHECKED Then$box = MsgBox(4 + 16 + 262144, "Frage", "Programm wirklich beenden?")
[/autoit] [autoit][/autoit] [autoit]
If $box = 6 Then ExitEndIf
[/autoit] [autoit][/autoit] [autoit]EndSwitch
[/autoit] [autoit][/autoit] [autoit]WEnd
[/autoit] [autoit][/autoit] [autoit][/autoit]
Gruß
Trainer -
Hallo Gemeinde,
möglicherweise gibt es noch eine einfachere Alternative, aber hier ist meine Lösung für alle, die beim Starten/Compilieren eines Skripts zwar die Au3Check.exe ausführen lassen möchten, aber bei Fehlern keine Messagebox sehen wollen, sondern nur die Konsolenausgabe.
Ich habe einfach eine Verknüpfung auf die .exe in den Autostart gelegt... vielleicht kann's ja jemand gebauchen, oder weiß wie es noch einfacher geht.
Gruß
TrainerP.S. Hier noch ein schönes Icon dazu: http://www.iconarchive.com/show/forum-fac…rator-icon.html
no_au3check_popup.au3:
[autoit]#include-once
[/autoit][autoit][/autoit][autoit]
#include "Misc.au3"
#include "Constants.au3";Tray-Menü anpassen
[/autoit][autoit][/autoit][autoit]
Opt("TrayOnEventMode",1)
Opt("TrayMenuMode",1)$exit = TrayCreateItem("Exit")
[/autoit][autoit][/autoit][autoit]
TrayItemSetOnEvent(-1,"exit_event");Nur einen Start zulassen
[/autoit][autoit][/autoit][autoit]
If _Singleton("no_au3check_popup", 1) = 0 Then Exit;Fenster-Titel-Erkennungsmethode (auch Teil-Texte erkennen)
[/autoit][autoit][/autoit][autoit]
AutoItSetOption("WinTitleMatchMode", 2);Auf Fenster warten
[/autoit][autoit][/autoit][autoit]
While 1
WinWait("Au3Check")
$handle = WinGetHandle("Au3Check")
WinClose($handle)
WEndFunc exit_event()
[/autoit]
Exit
EndFunc -
Hi, danke für's Testen...
Die Rückgaben bekomme ich auch. Nur machen tut er nichts.
Betas verwende ich nicht. Weiß auch nicht, was da los ist.
-
Hallo,
ich nehme hier Bezug auf folgenden Thread, bei dem es um das Starten der Bildschirmtastatur unter Windows 7 (64bit) ging: https://autoit.de/index.php?page=Thread&threadID=27697
Das Starten klappt nun also. Jedoch kann ich mit dem Fenster leider nicht weiterarbeiten (verschieben, ein- und ausblenden, etc.). Zu meiner Verwirrung liefern die entsprechenden Funktionen jedoch das Handle bzw. eine 1 (also alles erfolgreich) zurück.Hat jemad eine Idee, wie das zu lösen ist?
Danke
TrainerHier der Code zu Testen:
Spoiler anzeigen
[autoit]#include-once
[/autoit] [autoit][/autoit] [autoit]
#include "Array.au3"$handle = run_osk()
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($handle & @CRLF)$test = WinMove($handle, "Bildschirmtastatur", 0, 0)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($test & @CRLF)$test = WinSetState($handle, "Bildschirmtastatur", @SW_HIDE)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($test & @CRLF)$test = WinSetState($handle, "Bildschirmtastatur", @SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($test & @CRLF);----------------------------------------------------------------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]
Func Run_osk()Local $iState, $handle
[/autoit] [autoit][/autoit] [autoit]If @CPUArch = "X64" And Not @AutoItX64 Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "ptr", $iState)
EndIfShellExecute("osk.exe")
[/autoit] [autoit][/autoit] [autoit]$handle = WinHandFromPID(ProcessExists("osk.exe"), "Bildschirmtastatur")
[/autoit] [autoit][/autoit] [autoit]
$handle = $handle[1][1]If @CPUArch = "X64" And Not @AutoItX64 Then
[/autoit] [autoit][/autoit] [autoit]
DllCall("kernel32.dll", "int", "Wow64RevertWow64FsRedirection", "dword", $iState)
EndIfReturn $handle
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit];----------------------------------------------------------------------------------------------------------------------------------
[/autoit]
Func WinHandFromPID($pid, $winTitle = "", $timeout =
Local $secs = TimerInit()
Do
$wins = WinList($winTitle)
For $i = UBound($wins) - 1 To 1 Step -1
If (WinGetProcess($wins[$i][1]) <> $pid) Or (BitAND(WinGetState($wins[$i][1]), 2) = 0) Then _ArrayDelete($wins, $i)
Next
$wins[0][0] = UBound($wins) - 1
If $wins[0][0] Then Return SetError(0, 0, $wins)
Sleep(1000)
Until TimerDiff($secs) >= $timeout * 1000
Return SetError(1, 0, $wins)
EndFunc -
Jo, ich hab's auch gerade gemerkt. SUPER !!! - dass war es.
Vielen Dank.
Und sorry nochmal, ich wollte dich nicht ignorieren, bin nur mit dem Testen und Tippen kaum mehr hinterhergekommen, da ist es durchgerutscht.
Gruß
Trainer -
Ups, nein. Tut mir leid. Ich habe es getestet, aber es startet mir auch leider nur die alte XP-Tastatur.
-
Hab's probiert, klappt leider auch nicht...
-
@campweb: danke für das File - aber die alte XP-Tastatur kommt nicht mehr in Frage (zu klein) - da drücke ich auf meinem Touchscreen gleich 5 Tasten auf einmal
-
Nein, sind beides Administrator-Konten... :wacko:
-
Hm, aber im Ernst - ich hab es eben noch auf einem anderen Win7-Rechner getestet - klappt nicht. Unter XP klappt es.