Beiträge von nuts
-
-
-
-
Hi,
mal vorab: Ich habe keinen Yamaha Receiver mehr und kann daher selbst nicht testen.
[autoit]
Habe die Yamaha API nicht im Kopf, aber was steht in der Variablen $response wenn du deinen XML Code verwendest?
[/autoit][autoit][/autoit][autoit]
If $writelog Then _FileWriteLog($log, $header, 1)
;ConsoleWrite($header&@crlf)If _WinHttpQueryDataAvailable($hRequest) Then
[/autoit][autoit][/autoit][autoit]Do
[/autoit][autoit][/autoit][autoit]
$response &= _WinHttpReadData($hRequest)
Until @error
If $writelog Then _FileWriteLog($log, $response, 1)
;ConsoleWrite($response&@crlf)EndIf
[/autoit] -
Also Konstanten nachträglich zu ändern ist wirklich sehr (!!!) unschön.
Ich frage mich aber wie man mit Konstanten, die keinen MS konformen Inhalt haben (ebenso ziemlich fies!), richtig umzugehen hat?
Soll man das dann bis zum bitteren Ende durchziehen?
Jeder Neuling, der mit MSDN arbeitet, denkt sich dann WTF? Was machen die denn da?
Stures bestehen auf Abwärtskompatibilität hat schon viele Projekte in die Sackgasse geführt. -
1. Schritt: Yamaha_network_control.zip aus dem Startpost herunterladen
2. Schritt: Yamaha_Network_Control.exe einmal ausführen
3. Schritt: Die INI müsste sich öffnen
In der INI jetzt die IP deines AV-Receivers eintragen (z.B. IP=192.168.1.100) und die Änderungen abspeichern4. Schritt: Eine Verknüpfung zur Yamaha_Network_Control.exe und dort den gewünschten Kommandoparameter eintragen (Rechtsklick => Ziel):
z.B. um den Receiver einzuschalten:
%\Yamaha_Network_Control.exe <YAMAHA_AV cmd="PUT"><System><Power_Control><Power>On</Power></Power_Control></System></YAMAHA_AV> -
Die IP des AV-Receivers musst du in die INI eintragen. Diese findest du hier: @AppDataCommonDir & "\my_scripts"
Anschließend muss der entsprechende Befehl per cmdline (Kommandoparameter) an das Skript übermittelt werden. Ist der Schritt soweit klar?P.S. Das sind auch nur Demoskripte und keine ausgearbeiteten Anwendungen für Endbenutzer.
-
Das Beispiel im Startpost ist schon ein Sonderfall.
Ich glaube da würde ich auch mit If ... then Return arbeiten.Allgemein versuche ich das vorzeitige verlassen einer Funktion nurnoch fürs Errormanagment zu verwenden.
Wenn man bei jeder Gelegenheit aus den Funktionen springt ergibt das, gerade bei größeren Skripten/Funktionen, leicht Spaghetti-Code, der mit einigem Abstand nurnoch schwer lesbar ist.Ein Beispiel was ich für sehr unsauber halte:
[autoit]
[/autoit][autoit][/autoit][autoit]
Func _Demo($i_zahl)switch $i_tagl
[/autoit]
case 1
Return $i_zahl
case 2
Return $i_zahl*'$i_zahl
endswitch
endfunc
[autoit]
besser:
[/autoit]
Func _Demo($i_zahl)
local $ret
switch $i_tagl
case 1
$ret=$i_zahl
case 2
$ret=$i_zahl*'$i_zahl
endswitch
return $ret
endfunc -
Hey,
ich habe eine Verständnisfrage zu COM-Objekten.
Können COM-Objekte auch vom Systemkonto angesprochen werden?
Hintergrund ist folgender:
[autoit]
1. Ein Dienst (DVBViewer Recordingservice) startet mein Skript. Das Skript läuft dann wie der Dienst im Systemkonto.
2. Im normalen Benutzerkonto läuft eine Anwendung (DVBViewer) und diese soll vom Skript aus über das COM-Objekt gesteuert werden.
Normalerweise mache ich das immer so:Func _DVBV_Connect()
[/autoit]
; nuts (http://www.autoit.de)
;
; connect to DVBV COM Server
; succses => return Object
; failure => @error=1
Local $ret = ObjGet("", "DVBViewerServer.DVBViewer")
If @error Then
Return SetError(1, 0, 0) ;errorhandling
Else
Return $ret
EndIf
EndFunc ;==>_DVBV_Connect
Das funktioniert aus dem normalen Benutzerkonto einwandfrei, aber sobald das Skript im Systemkonto läuft schlägt schon der Verbindungsaufbau fehl.Ist das ein Denkfehler? Ich dachte COM-Objekte können unabhängig vom Benutzerkonto verwendet werden?
Gruß nuts
-
Ich wäre da aber immer vorsichtig.
Ich auch.
Gewollt oder ungewollt suggeriert so eine Lizenz eine gewisse Rechtssicherheit, die so nicht gegeben ist.Jura ist nicht wie programmieren.
-
Wann führen diese zur ihrer Nichtigkeit? Die Ansprüche dieses Punktes sind rechtsgültig.
Wie gesagt mein Fachgebiet ist das auch nicht ...
Viele Lizenzbestimmungen für Software enthalten eine Haftung für bestimmte Dinge um die oben angesprochene Gefahr zu vermeiden.
Hier ein Beispiel: http://www.dvbviewer.com/license.htm
Die beliebte Ebay-Klausel (Keine Garantie, keine Gewährleistung, keine Rücknahme) ist z.B. regelmäßig unwirksam.PuReIroNie: Eine Urheberrechtsverletzung kann man anzeigen.
Ein Verstoss gegen die anderen Bestimmungen dürfte keinen Straftatbestand erfüllen. -
Soll die Lizenz einen gewissen Rechtsschutz beinhalten?
Das ist leider auch nicht mein Fachgebiet, aber starre und vollumfängliche Ausschlussklauseln (Punkt3) führen häufig zu deren Unwirksamkeit/Nichtigkeit (insgesamt).
-
Hm ...
Hast du mal ausgewertet was _Singleton in erster Instanz zurückgibt?Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
; #FUNCTION# ====================================================================================================================
; Name...........: _Singleton
; Description ...: Enforce a design paradigm where only one instance of the script may be running.
; Syntax.........: _Singleton($sOccurenceName[, $iFlag = 0])
; Parameters ....: $sOccurenceName - String to identify the occurrence of the script. This string may not contain the \ character unless you are placing the object in a namespace (See Remarks).
; $iFlag - Behavior options.
; |0 - Exit the script with the exit code -1 if another instance already exists.
; |1 - Return from the function without exiting the script.
; |2 - Allow the object to be accessed by anybody in the system. This is useful if specifying a "Global\" object in a multi-user environment.
; Return values .: Success - The handle to the object used for synchronization (a mutex).
; Failure - 0
; Author ........: Valik
; Modified.......:
; Remarks .......: You can place the object in a namespace by prefixing your object name with either "Global\" or "Local\". "Global\" objects combined with the flag 2 are useful in multi-user environments.
; Related .......:
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func _Singleton($sOccurenceName, $iFlag = 0)
Local Const $ERROR_ALREADY_EXISTS = 183
Local Const $SECURITY_DESCRIPTOR_REVISION = 1
Local $tSecurityAttributes = 0If BitAND($iFlag, 2) Then
[/autoit] [autoit][/autoit] [autoit]
; The size of SECURITY_DESCRIPTOR is 20 bytes. We just
; need a block of memory the right size, we aren't going to
; access any members directly so it's not important what
; the members are, just that the total size is correct.
Local $tSecurityDescriptor = DllStructCreate("byte;byte;word;ptr[4]")
; Initialize the security descriptor.
Local $aRet = DllCall("advapi32.dll", "bool", "InitializeSecurityDescriptor", _
"struct*", $tSecurityDescriptor, "dword", $SECURITY_DESCRIPTOR_REVISION)
If @error Then Return SetError(@error, @extended, 0)
If $aRet[0] Then
; Add the NULL DACL specifying access to everybody.
$aRet = DllCall("advapi32.dll", "bool", "SetSecurityDescriptorDacl", _
"struct*", $tSecurityDescriptor, "bool", 1, "ptr", 0, "bool", 0)
If @error Then Return SetError(@error, @extended, 0)
If $aRet[0] Then
; Create a SECURITY_ATTRIBUTES structure.
$tSecurityAttributes = DllStructCreate($tagSECURITY_ATTRIBUTES)
; Assign the members.
DllStructSetData($tSecurityAttributes, 1, DllStructGetSize($tSecurityAttributes))
DllStructSetData($tSecurityAttributes, 2, DllStructGetPtr($tSecurityDescriptor))
DllStructSetData($tSecurityAttributes, 3, 0)
EndIf
EndIf
EndIfLocal $handle = DllCall("kernel32.dll", "handle", "CreateMutexW", "struct*", $tSecurityAttributes, "bool", 1, "wstr", $sOccurenceName)
[/autoit]
If @error Then Return SetError(@error, @extended, 0)
Local $lastError = DllCall("kernel32.dll", "dword", "GetLastError")
If @error Then Return SetError(@error, @extended, 0)
If $lastError[0] = $ERROR_ALREADY_EXISTS Then
If BitAND($iFlag, 1) Then
Return SetError($lastError[0], $lastError[0], 0)
Else
Exit -1
EndIf
EndIf
Return $handle[0]
EndFunc ;==>_Singleton
So wie ich das sehen müsste in @error was drinstehen wenn es nicht funktioniert. -
Die Mutex-Überprüfung (Singleton) ist ausreichend gut durchdacht und funktioniert immer zuverlässig (ansonsten müsste man sich wirklich anschauen wieso nicht).
Alles andere ist Murks. -
Es gibt einige Fehlerquellen. HD+ CAM und Abo-Karte gehört nicht dazu. Die Sender müssen auch ohne gefunden werden. Ich würde für den Sendersuchlauf das CAM entfernen.
Mögliche Fehlerquellen (Aufzählung nicht abschließend
1. Es liegt gar kein Kabelsignal an => Muss irgendwo im Haus "aktiviert werden" (jemand von Kabeldeutschland)
2. Signal ist zu schwach. Glaube ich nicht. So schwach das gar kein Sender ankommt?
3. Signalführung nach dem Wandkabel fehlerhaft. Dose richtig installiert? Eine andere Verkabelungsmöglichkeit habe ich ja schon beschrieben.
4. Den TV richtig eingestellt? Beim Suchlauf wird man angeben müssen welcher Tuner verwendet wird?
5. DVB-C Tuner defekt, aber davon wollen wir jetzt mal nicht ausgehen. -
Da gibt es zu 99% nichts was man einfach mit dem Schraubendreher optimieren könnte. Das ist ganz lahmes Design aus Fernost.
Vielleicht mit dem Lötkolben und entsprechender Fachkenntnis ...P.S.
ZitatAnsonsten vl. mal - wie oben geschildert - den Fernseher aufschrauben und mal ein bisschen an allem Drehen, was man drehen kann (Potis, Dreh- und Trimmkondensatoren, usw.) und sich in Nähe des Verstärkers befindet wobei man da natürlich das Risko hat, dass am Ende gar nichts mehr geht.
Mit solchen Tips im Zusammenhang mit Elektronik sollte man in öffentlichen Foren immer etwas vorsichtig sein.
Ihr seid später nicht mehr dabei und könnt die Umbaumaßnahmen überwachen. -
Nein nix aufschrauben und auch erstmal keinen Kabelverstärker.
Kabel (Wand) => F-Stecker=> Koax-Adapter => Koax Kabel => TV!
-
Also beim Sendersuchlauf wird gar kein Sender gefunden?
Die Sender (auch die verschlüsselten) müssen auch ohne Abo-Karte gefunden werden! An der Freischaltung der Karte kann es also nicht liegen.Anhand der Bilder kann man leider nicht erkennen ob du die Dose ordnungsgemäß installiert hast.
Wie das grundsätzlich funktioniert ist klar? Innenleiter / Außenleiter usw.?
Die wird eigentlich auch (erstmal) gar nicht gebraucht. Testweise kannst du dir mal einen F-Stecker und einen Adapter auf Koax besorgen. Das Anschlusskabel in der Wand sieht auch nicht mehr so fit aus. Könnte man mal neu abisolieren.
http://www.amazon.de/Vivanco-SAT-Adapter-F-Kupplung-Koaxstecker/dp/B001D68CO6/ref=sr_1_1?ie=UTF8&qid=1361815788&sr=8-1Im TV müsste man mal die durch Einstellungen stöbern ob man den Tuner-Typ (DVB-S bzw. DVB-C) vorgeben muss.
Und falls gar nichts hilft: Ich glaube Kabel-Deutschland prüft die Leitung nur bis zum "Verteiler" im Haus.
In manchen Fällen wird das vom Kabelanbieter stillgelegt nachdem das Abo vom Vormieter gekündigt/umgeschrieben wurde. -
Habs schon über GUISetAccelerators gelöst.
Danke an alle Helfer. -
Ah sorry die eigenen includes hab ich von einem anderern Skript kopiert.
Die werden nicht benötigt und sind nun im Startpost rausgelöscht.edit\ Hm GUISetAccelerators
Gute Idee. Damit scheint es zu gehen - danke