Das heißt es gibt keine Möglichkeit zu prüfen ob die Cam aktiv ist oder nicht?
Zumindest ich hätte jetzt keinen verwertbaren Ansatz dazu.
Das heißt es gibt keine Möglichkeit zu prüfen ob die Cam aktiv ist oder nicht?
Zumindest ich hätte jetzt keinen verwertbaren Ansatz dazu.
Meiner Erfahrung nach, hast du keine Chance das zuverlässig zu nutzen.
Die einzelnen Anwendungen blocken auf irgendeine Art und Weise den Zugang zur Cam, selbst wenn sie nicht aktuell darauf zugreifen.
Bsp., wie in meinem Thread zur WebCam-App beschrieben:
https://autoit.de/index.php?page…7502#post287502
Ich werde nicht ganz schlau, was du eigentlich möchtest. Dein Bsp. macht für mich wenig Sinn, da du durch GDI-Malerei aus einem Sizebox-Window ein Popup-Window machst - dann nimm doch gleich den Style.
Weiterhin solltest du dir vor Augen halten, dass GDI-Zeichnung in Fenstern immer einen Pferdefuß hat: Die Paint-Messages des Systems bewirken keine Neuzeichnung der GDI-Malerei, da musst du immer zusätzlich diese Messages abfragen und mit einem Repaint deiner zeichnungen reagieren.
Insofern bevorzuge ich Child-Windows anstelle von GDI-Gepinsel. ![]()
Was deine NCPAINT-Auswertung angeht, da reicht es imho nicht auf Paint zu reagieren, sondern du musst bereits bei PrePaint aktiv werden.
Man sollte also am Anfang der Funktion _KeyProc noch den Status des Programmfensters abfragen.
Ja, aber bitte nicht nur Return, dann geht die Msg verloren. Wenn du den Hook auswertest, musst du ihn auf jeden Fall an das System weiterreichen, wenn die Msg nicht verfallen soll:
If Not WinActive($GUI) Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
[/autoit]BugFix Dafür gibt es doch extra @NumParams:
Ich weiß - aber dann muss man Eval nutzen, was ich möglichst vermeide.
Ich brauch eine Funktion, die n-Parameter aufnimmt, daraus ein Array bildet und es zurückgibt.
Geht sowas?
Mit undefiniert vielen Parametern geht das nicht. Wenn du aber weisst, dass z.B. nicht mehr als 10 Parameter jemals verwendet werden, kannst du sowas machen:
Function _bla($p1, $p2=Chr(0), $p3=Chr(0), $p4=Chr(0), $p5=Chr(0), $p6=Chr(0), $p7=Chr(0), $p8=Chr(0), $p9=Chr(0), $p10=Chr(0))
Local $aParam[10] = [$p1, $p2, $p3, $p4, $p5, $p6, $p7, $p8, $p9, $p10]
For $i = 1 To 9
If $aParam[$i] = Chr(0) Then ExitLoop
Next
ReDim $aParam[$i]
Return $aParam
EndFunc
Mal meine Meinung zum Thema Autoradios:
Ich bekack mich immer bald vor Lachen, wenn ich von Bekannten höre, dass sie sich nun ein HiFi-System ins Auto eingebaut haben. Meine erste Frage ist immer, ob sie denn nur noch beim Parken Radio hören wollen. Die Gesichter sind natürlich immer gleichermassen dumm.
Meinen Hinweis, dass die Möglichkeit HiFi-Klang in einem Auto auch wirklich zu hören erst bei Autos der oberen Luxusklasse tatsächlich möglich ist, da diese über eine ausreichende Fahrgeräuschdämmung verfügen will man natürlich nicht wahrhaben.
Ich empfehle zum Test immer, den Titel "Shine on you crazy diamond" von Pink Floyd. Wer beim Fahren in den ersten 30 s des Titels (bei normaler Lautstärke) auch nur einen einzigen Ton hört, hat ein leises Auto und kann sich auch solch HiFi-Kram zulegen. Alle anderen können sich das Geld sparen und sind mit jedem 50 EUR Radio bestens bedient. (Aus einem Kuhfladen wird eben auch dann keine Pizza, wenn man Salamischeiben drauf legt.)
Was die Bedienung angeht: Sattelitenbedienung über Bedienelemente am Lenkrad ist zum Glück schon bei vielen Mittelklassewagen Standard und ermöglicht ein blindes Bedienen. Habe auch schon recht günstige Nachrüstsätze dafür gesehen.
Dann stimmt aber in der Hilfe etwas nicht:
Die Hilfe stimmt schon - es sind ja beides Status-Variablen. Aber die eine ist abfragbar über GuiCtrlRead und die andere über GuiCtrlGetState.
Da hat Schnitzel völlig recht - habe ich auch total überlesen. Das sind zwei verschiedene Paar Schuh, die man nicht vermengen kann.
James: So geht das nicht. Die Abfragewerte müssen verknüpft werden:
[autoit]If BitAND(GUICtrlRead($bCheckbox08), BitOr($GUI_ENABLE, $GUI_CHECKED)) Then
[/autoit]Wie wär es, wenn du dir einfach mal in der Hilfe anschaust, wie die Funktion arbeitet? Du musst natürlich den Rückgabewert auffangen. :wacko:
Wenn du das erste Child-Handle hast, suchst du mit demselben Befehl (aber andererem Flag) die Geschwister-Handle des Childs.
_WinAPI_GetWindow
[/autoit]und tatsächlich als $GW_CHILD erhalte ich eine "5"
Da machst du was falsch: "5" ist der Wert der Konstante $GW_CHILD. ![]()
Dabei kommt ein Fenster, in dem Checkboxen als ein einziges Control zusammengefasst werden. Es gibt also nur ein Handle für die Liste aus Checkboxes und nicht für jede Checkbox einzeln.
Im Allgemeinen, ist das Handle, das du bekommst, das des Parents. Die Checkboxen selbst sind Childs davon. Du kannst versuchen mit
[autoit]_WinAPI_GetWindow($hWndParent, $GW_CHILD)
[/autoit]die Handle der einzelnen Checkboxen abzufragen. Wenn das gelingt, kannst du sie auch bearbeiten.
Bei der gewünschten Vielfalt erweist sich eine Lösung mit RegExp nicht als erste Wahl.
Die folgende Variante ist wesentlich einfacher umzusetzen. Einzige Bedingung: Steht der Dateiname alleine, darf er nicht auf ")" oder "}" enden! Denn dieses sind die Marker für die Zusatzinfos Jahr und Info und werden im String von rechts abgefragt.
$s1 = 'Da~tei•ÄÖÜß[ bla ] 1 (2012) {Info}'
$s2 = 'Da~tei•ÄÖÜß[ bla ] 1 {Info}'
$s3 = 'Da~tei•ÄÖÜß[ bla ] 1 (2012)'
$s4 = 'Da~tei•ÄÖÜß[ bla ] 1'
$aRet = _SeperateFileName($s1)
ConsoleWrite('NAME: ' & $aRet[0] & ', JAHR: ' & $aRet[1] & ', INFO: ' & $aRet[2] & @LF)
$aRet = _SeperateFileName($s2)
ConsoleWrite('NAME: ' & $aRet[0] & ', JAHR: ' & $aRet[1] & ', INFO: ' & $aRet[2] & @LF)
$aRet = _SeperateFileName($s3)
ConsoleWrite('NAME: ' & $aRet[0] & ', JAHR: ' & $aRet[1] & ', INFO: ' & $aRet[2] & @LF)
$aRet = _SeperateFileName($s4)
ConsoleWrite('NAME: ' & $aRet[0] & ', JAHR: ' & $aRet[1] & ', INFO: ' & $aRet[2] & @LF)
Func _SeperateFileName($_sFile)
Local $aOut[3] ; == [NAME, JAHR, INFO]
Local $pos
Switch StringRight($_sFile, 1)
Case ')'
$pos = StringInStr($_sFile, '(', 1, -1)
$aOut[0] = StringTrimRight(StringLeft($_sFile, $pos -1), 1)
$aOut[1] = StringMid($_sFile, $pos +1, 4)
Case '}'
$pos = StringInStr($_sFile, '{', 1, -1)
$aOut[2] = StringMid($_sFile, $pos +1, StringLen($_sFile) -$pos -1)
If StringMid($_sFile, $pos -2, 1) = ')' Then
$pos = StringInStr($_sFile, '(', 1, -1)
$aOut[0] = StringTrimRight(StringLeft($_sFile, $pos -1), 1)
$aOut[1] = StringMid($_sFile, $pos +1, 4)
Else
$aOut[0] = StringTrimRight(StringLeft($_sFile, $pos -1), 1)
EndIf
Case Else
$aOut[0] = $_sFile
EndSwitch
Return $aOut
EndFunc
Wie würde denn eine Lösung aussehen, wenn da nur deutsche Sonderzeichen zugelassen wären?
Melde mich dazu nachher nochmal - jetzt muss ich erst mal den Hund begleiten ![]()
Das ist zwar nicht unmöglich - aber hier wäre es dann sinnvoller, die Dateinamen zu regeln.
Mit Windows XP ist die Unsitte aufgekommen, nicht nur die Basisbuchstaben des engl. Alphabets zuzulassen, sonder auch Sonderzeichen und umlaute - Das isr echt KRANK!!
Bei mir werden wder Umlaute noch sonstige "abnormen" Zeichen erlaubt. Dateinamen haben sauber zu bleiben und Leerzeichen nee, nee, die haben da auch nix verloren: Wozu gibt es Unterstriche.
• Bevor wir jetzt weitermachen, gib bitte mal alle Zeichen an, die im Dateinamen vorkommen können (etwa auch Umlaute und ß ? ).
• Ist das Jahr immer in runden und die Info immer in geschweiften Klammern?
• werden alle Elemente immer durch genau ein Leerzeichen getrennt?
Andere Variante:
[autoit]$p = "(\w+)\s?((\(\d{4}\))?)\s?((\{\w+\})?)"
[/autoit][autoit][/autoit][autoit]$aSplit = StringSplit(StringRegExpReplace('Dateiname1 (2012) {Info}', $p, '$1 $2 $4'), ' ')
ConsoleWrite('Name: ' & $aSplit[1] & @TAB & 'Jahr: ' & StringRegExpReplace($aSplit[2], '[\(\)]', '') & @TAB & 'Info: ' & StringRegExpReplace($aSplit[3], '[\{\}]', '') & @TAB & @LF)
$aSplit = StringSplit(StringRegExpReplace('Dateiname2 {Info}', $p, '$1 $2 $4'), ' ')
ConsoleWrite('Name: ' & $aSplit[1] & @TAB & 'Jahr: ' & StringRegExpReplace($aSplit[2], '[\(\)]', '') & @TAB & 'Info: ' & StringRegExpReplace($aSplit[3], '[\{\}]', '') & @TAB & @LF)
$aSplit = StringSplit(StringRegExpReplace('Dateiname3 (2012)', $p, '$1 $2 $4'), ' ')
ConsoleWrite('Name: ' & $aSplit[1] & @TAB & 'Jahr: ' & StringRegExpReplace($aSplit[2], '[\(\)]', '') & @TAB & 'Info: ' & StringRegExpReplace($aSplit[3], '[\{\}]', '') & @TAB & @LF)
$aSplit = StringSplit(StringRegExpReplace('Dateiname4', $p, '$1 $2 $4'), ' ')
ConsoleWrite('Name: ' & $aSplit[1] & @TAB & 'Jahr: ' & StringRegExpReplace($aSplit[2], '[\(\)]', '') & @TAB & 'Info: ' & StringRegExpReplace($aSplit[3], '[\{\}]', '') & @TAB & @LF)
ne andere Funktion von BugFix
Diese nutzt zum Vermessen aber auch: _GDIPlus_GraphicsMeasureString ![]()
@Acanis: Unabhängig von den rechtlichen Gegebenheiten (bin ich nicht aussagekräftig) kann ich nur meine persönliche Meinung zum Ausdruck bringen:
Werbung ist Schei...!
Ich nutze keine Programme/Tools, die mich mit Werbebanneren/Einblendungen etc. nerven. Wenn die Software so gut ist, dass sie einen Bonus verdient, zahle ich auch gern an den Ersteller.
Einfach im "About" den kleinen Hinweis, bei Gefallen eine Unterstützung per Paypal (oder wie auch immer) leisten zu können.
Ich vertrete eh den Standpunkt, dass Software Open-Source sein soll. Alles, was ich erstelle, biete ich auch offen an.