Beiträge von Zoli1972

    Leider habe ich mit der _CreateTask() Funktion aus der UDF aus diesem Thread (Post #10) kleinere Probleme.


    Ich kann mit der Funktion meinen Aufgabenplaner-Eintrag nicht so erzeugen, daß er unter Windows 7 auch das Programm im Windows 7-Modus ausführt. Stattdessen steht da immer "Windows Vista, Windows Server 2008". Zum besseren Verständnis hier ein Bild von der Option im GUI des Aufgabenplaners. Die, die ich meine ist rot umrandet:


    Klick mich


    Die erwähnte UDF enthält leider keinen Zugang zu dem COM-Objektelement, mit dem ich diesen Wert verändern könnte. Auch die Dokumentation von MS zum Aufgabenplaner schweigt sich darüber scheinbar aus, welches COM-Objektelement das wäre, oder vielleicht verstehe ich nur nicht, was da steht. Brauche daher Hilfe von jemandem, der sich mit COM-Objekten und speziell den Elementen des Aufgabenplaners auskennt.


    Zoli

    Hi,


    Leider startet das Script aus Post #10 bei mir nicht. Es gibt auch keinerlei Fehlermeldung. Egal, ob ich das Script als Exe kompiliere, und dann als Admin starte, oder als User. Auch aus Scite heraus keine Funktion, keine Fehlermeldung. Die Aufgabe wird einfach nicht erstellt. Nutze Win7Pro 32Bit.


    Was kann das Problem sein?


    Hier mein Script:



    und in der IncludeCreateTask.au3:



    Ich habe eigentlich nur soviel verändert, daß ich die für mich unnötigen Parameter fest codiert habe. Siehe dazu die von mir hinzugefügten Zeilen.


    Was mache ich falsch?


    Zoli

    Hallo, Leute!


    Sorry, daß ich mich so lange nicht mehr gemeldet habe, hatte nicht soviel Zeit, mich um das Problem zu kümmern. Es besteht weiterhin, und ich habe zwecks Lösung noch ein wenig weiter geforscht. Hinzuzufügen wäre vielleicht noch, daß ich bei jedem Neustart des Laptops das doofe PC Beep erneut ausmachen muß, die Einstellung scheint sich nicht korrekt in der Registry zu speichern.


    Das mit dem Abstellen des Beep-Treibers im Gerätemanager bringt leider nichts.


    Zwecks Dll-Call habe ich folgendes Schnipsel gefunden.


    Func _SoundGetWaveVolume()
    Global $WaveVol = -1, $p, $ret
    Const $MMSYSERR_NOERROR = 0
    $p = DllStructCreate ("dword")
    If @error Then
    SetError(2)
    Return -2
    EndIf
    $ret = DllCall("winmm.dll", "long", "waveOutGetVolume", "long", -1, "long", DllStructGetPtr ($p))
    If ($ret[0] == $MMSYSERR_NOERROR) Then
    $WaveVol = Round(Dec(StringRight(Hex(DllStructGetData ($p, 1), 8), 4)) / 0xFFFF * 100)
    MsgBox(1,"", hex(DllStructGetData($p,1)))
    Else
    SetError(1)
    EndIf
    ;DllStructDelete ($p)
    Return $WaveVol
    EndFunc ;==>_SoundGetWaveVolume
    Allerdings bräuchte ich das Schnipsel umgebaut zum Schreiben der Einstellungen, und nicht zum Lesen. Leider kenne ich mich Dlls nicht besonderts gut aus. Das weitere Dumme ist auch noch, das Schnipsel hier behandelt den WaveOut-Volume, und ich schaffe es nicht, es auf PC Beep anzuwenden. Es scheint wohl so zu sein, daß der Dll-Call statt auf "waveOutGetVolume", auf "pcbeepGetVolume", oder so ähnlich anzuwenden wäre. Nur funktioniert das mit "pcbeepGetVolume" dummerweise eben nicht. Wenn ich nur eine Liste der anwendbaren Funktionen hätte...


    Übrigens, Douky: Dein Script habe ich derweil in Verwendung und arbeitet einwandfrei. Vielen Dank einstweilen.


    Grüße


    Zoli

    Hallo,


    Vielen Dank erst mal. Das hilft mir schon mal weiter. Aber genau von dieser Funktion gibt es irgendwo auch ein Pendant, der das ohne verstecktes Öffnen eines Fensters über Winapi, mithilfe einer Dll hinbekommt. Das wäre super, wenn mir jemand sagen könnte, wie ich dann welche dll ansprechen muß, damit dieser Schalter "gesetzt" wird.


    EDIT:


    Es gibt wohl ei paar Schlüssel in der Registry, die anscheinend mit diesem Regler zu tun haben. Der eine ist {C57704A3-108F-4760-99BA-6369AD13345D}, der andere ist {093C0065-6B45-4582-87D7-5A6742F6E859}. Letzterer ist in HKLM\SYSTEM\ControlSet001\Control\Class\{093C0065-6B45-4582-87D7-5A6742F6E859}\Settings\Drv5152\Mute0_RearLineOutWave3_{093c0065-6b45-4582-87d7-5a6742f6e859} zu finden.


    Der Binary-Wert in diesem Schlüssel scheint mitunter der Mute-Schalter für besagten Regler zu sein. Den Eintrag gibt es an mehreren Stellen in der Registry. Wenn ich in der Lautstärkeregelung das "Mute" für diesen Regler setze, und dann die Anzeige in Regedit aktualisiere, bekomme ich als Wert für besagten Schlüssel 01 00 00 00. Ansonsten steht der auf einem 32-Bit-Wert, der durch die Stellung des Reglers irgendwie bestimmt wird. Wie, hab ich noch nicht rausbekommen. Meine Frage ist jetzt, wie kann ich mit RegWrite() einen binären Registry-Wert schreiben?


    Mein zweites Problem ist, ich habe mal versucht, den Wer manuell mit Regedit auf 01 00 00 00 zu setzen. Das ändert aber den Mute-Schalter in der Lautstärkeregelung nicht.


    Zoli

    Also das Ding hier ist uralt. Das BIOS kann sowas wie "anmelden als..." nicht, und außerdem, wenn 3 Einstellungen dort veränderbar sind, ist es schon viel. ;-) Medion, halt.


    Nee, alles schon versucht. Der Speaker ist auch kein echter Piezo-Speaker, sondern ist als Funktion auf der Soundkarte des Laptops drauf. Daher auch als Regler in den Lautstärkeeinstellungen sichtbar. Somit wird der Tipp mit dem Montageschaum nicht helfen. Den Tipp mit der Registry habe ich auch schon versucht, auch den Treiber, den es im Gerätemanager gibt, deaktiviert, nichts hat geholfen. Einen Dienst namens "Beep" gibt es im Übrigen in msconfig.msc auch nicht, falls noch jemand vorschlagen möchte, diesen zu deaktivieren. Wie gesagt, alles schon durch. Was ich suche, ist eine UDF, die nicht nur die Standard-Regler der Lautstärkeeinstellungen per WinApi verstellen kann, sondern auch die Herstellerspezifischen, wie bei diesem Medion.


    Edit:


    Ich habe übrigens auch schon Eventghost versucht, um mich damit wenigstens vom Piep bei Ruhezustand zu befreien, aber manchmal passiert es eben, daß der Eventghost den Event "Ruhezustand" nicht schnell genug behandelt, und den Lautsprecher stummschaltet. Somit kommt das nervige vollgas-Piep noch manchmal durch.


    Auch, wenn ich den entsprechenden Regler in der Lautstärkeregelung auch 0 stelle, oder deaktiviere, ist er beim nächsten Neustart zu 90% sicher wieder auf Vollanschlag, und an.


    Zoli

    Hallo, Forum!


    Ich suche mir schon die Finger wund nach einer Möglichkeit, bei einem Medion Akoya Laptop in der Lautstärkesteuerung den Regler "PC Beep" dauerhaft auf 0 zu setzen. Windows XP "vergißt" diese Einstellungen immer, und das Laptop piept mich volles Rohr an, wenn ich es mitten in der Nach auf Ruhezustand versetze, oder das Ladekabel ab- oder anstecke. Damit meine Nachbarn nicht von dem Piep-Lärm immer aufwachen, brauche ich deshalb ein Script, das ohne die Lautstärke-Steuerung von Windows als Fenster zu öffnen, also am Besten über WinApi-Funktionen, an diese eine Einstellung rankommen kann. Es gibt wohl ein Script /UDF, das die Standard-Regler der Lautstärke-Steuerung auf diese Weise verstellen kann, aber "PC Beep" ist leider kein Standard-Regler. Somit fehlen mir auch die Handles dafür. Leider habe ich jetzt auch nicht den Link zur Hand, wo ich damals das Script / die UDF gefunden habe, das auf die Sound-Einstellungen zugreifen kann. Im Prinzip bräuchte ich davon eine Erweiterung, kenne mich aber zu wenig damit aus.


    Zoli

    Zitat

    Ist dir denn der Pfad vorher bekannt in dem die Datei gespeichert wird?


    Ja, der ist bekannt.


    Zitat

    Dann könntest du vllt prüfen bei welcher Datei sich die Größe ändert.


    OK. So ähnlich verfahre ich auch in meiner derzeitigen Script-Version. Nichts für ungut, ist eine gute Idee, aber das ist in meinem Script derzeit eher "zurechtgeprügelt" als gelöst, und mir etwas zu "dirty" programmiert, es können sich dabei Fehler einschleichen, die dann bewirken, daß vielleicht die falsche Datei umbenannt wird. Es gibt wie gesagt Tools, die das selbst können. Folglich muß es in Windows bereits eine Funktion geben, mit dessen Hilfe das möglich ist. Vielleicht WinApi? Nur leider finde ich nirgends was vergelichbares. :-(


    Zoli

    Hallo,


    Ich habe ein kleines Script, das ein Aufnahmeprogramm steuern soll. Das Programm erzeugt dabei eine Datei, die nach Startdatum, Uhrzeit und aufgenommenem Programm benannt wird. Im Programm selbst läßt sich kein anderer Dateiname definieren. Deshalb müßte mein Script bereits während der laufenden Aufnahme duch eine Funktion Zugriff auf das Handle der durch das Aufnahmeprogramm geöffneten Datei erhalten, um daraus dann den Pfad und den Daeteinamen der Datei auszulesen. Nachdem dann das Aufnahmeprogramm das Schreiben in die Datei beendet und diese geschlossen hat, soll das Script die Datei, die ja dann namentlich bekann ist, nach meinen Bedürfnissen (Aufnahmetitel) umbenennen.


    Gibt es eine Funktion, die so ein File-Handle aus einem laufenden Prozess auslesen kann?


    Als Alternative habe ich noch ein kleines Kommandozeilen-Tool bei Microsoft gefunden, das sich "Handle" nennt. Das macht aber genau das umgekehrte von dem, was ich machen will. Der sucht nach dem zu einer Datei gehörenden Prozess. Ich will aber die zu einem zum Prozess gehörende Datei haben. Am Liebsten nach Endungen gefiltert, aber das ist eher zweitrangig.


    Ich habe hier: UDF Sammlung schon mal eine Funktion in einer UDF gefunden, die sich mit Prozessinfos beschäftigt, aber weiß nicht, ob man die dazu "frisieren" könnte, daß sie die Infos liefert, die ich brauche. Kann mir da jemand helfen?


    Grüße


    Zoli

    Eigentlich wäre somit alles klar, wenn ich das Problem nicht hätte kein Informatikstudium gemacht zu haben ;-)


    Ich bin was das angeht, leider fast schon ein "Laihe mit vertiefter Kenntnis in der Registry/in Autoit", der hier versucht, seinem PC etwas beizubringen. Kannst Du mir deshalb bitte folgende Begriffe erklären?


    -Was ist ein Teilbinär?
    -Was ist die Bitsummenbildung aus einem Hexwert. (was ein Hexwert ist, weiß ich ;-) )


    Eigentlich geht es mir darum, daß mein Win2k-Rechner nicht andauernd in Ruhezustand geht, wenn bestimmte Proggies laufen. Die Proggies, um die es geht, brauchen fast keine CPU-Last, somit meint mein PC ständig, "idle" zu sein, was dann nach der voreingestellten Zeit den Ruhezustand zufolge hat. Mein Script soll das Vorhandensein der Proggies checken, und dann in Abhängigkeit davon für die Laufzeit der Proggies die Einstellungen des aktuellen Energieschemas so anpassen, daß kein Ruhezustand stattfindet. Nachher soll das Script die Einstellungen wieder so setzen, wie sie vorher waren. Das Script wäre soweit schon fertig. Mir fehlt jetzt nur noch der Teil mit dem RegRead/RegWrite für die Änderung.


    Zoli

    Vielen Dank.


    Gibt es dazu auch irgendwo Beschreibungen, welcher Teil dieses Binärwertes was genau bewirkt? Würde mir das Erstellen solcher Profile nämlich gerne sparen, und stattdessen einfach eines der bereits vorhandenen per AutoIt-Funktion RegWrite() entsprechend verändern.


    Dabei würde mich interessieren, ob nach so einer Änderung ein re-Logon des Benutzers oder sogar ein Windows-Neustart zwingend durchgeführt werden muß, oder ob Windows irgendwie zur automatischen Übernahme der Änderungen "überredet" werden kann? (ich glaube eher ersteres) Das was ich nämlich vor habe, sollte ohne Neustart oder re-Logon funzen.


    Zoli

    Hallo,


    sorry, wenn ich ein wenig vom Thema abweiche:


    Kann jemand von Euch mir sagen, wie ich auf diese Weise anstatt den Bildschirmschoner zu entfernen, eher die Zeit für den automatischen Ruhezustand auf einen bestimmten Wert setzen kann, oder diese automatik so per Script deaktivieren kann?


    Grüße


    Zoli

    Hallo, Forum!


    Ich habe ein Skript, in dem eine GUI erzeugt wird, in dem einige Icons blinken sollen. Das machen sie, indem die Icons gezeigt und wieder versteckt werden. Das tun sie auch, aber leider nur solange das GUI-Fenster den Focus hat. Wenn ich während das Skript ausgeführt wird, auf ein anderes Fenster klicke, stoppt das Blinken, und geht erst wieder weiter, wenn ich wieder auf mein GUI-Fenster klicke.


    Bitte sagt mir, wie ich dieses Problem lösen kann? Ich brauche unbedingt blinkende Icons.


    Euer Zoli