Ich hoere in der Werkstatt auf dem Rechner Radio von dieser Internetseite: http://www.surfmusik.de/ Mein Lieblingssender hat die unangenehme Eigenschaft, jeweils 3 Minuten vor der vollen Stunde respektive halben Stunde die Modulation hochzuziehen und mich mit der immer gleichen Reklame zuzudroehnen...:-( Jetzt frage ich: Ist es moeglich ein Programm zu schreiben, was im Hintergrund auf dem Rechner laueft und die Systemzeit holt. Wenn es erkennt, dass es z.B. 8.57 Uhr ist, soll die Lautstaerke stark abgesenkt bzw. ganz unterdrueckt werden, bis es 9 Uhr geworden ist. Der naechste Vorgang waere dann um 9.27 Uhr bis 9.30 Uhr. Das Betriebssystem ist Windows XP. Ich habe vor Jahren mit Turbo-Pascal auf dem Rechner herumgetobt, aber ob und womit sich die obige Funktion erreichen laesst, weiss ich nicht. MfG Paul
Sicher geht das, wenn Du eine Programmiersprache verwendest, die Win32-API-Aufrufe ausführen kann. Anzusteuern ist der Multimediamixer, hier ein Beispiel dafür in C++ (MFC): http://www.codeproject.com/KB/audio-video/alexfmixer.aspx oder hier für Freunde des .Net-Geraffels in Form von C#: http://www.codeproject.com/KB/audio-video/AudioLib.aspx
Falls du Turbo-Pascal kennst wäre eventuell Delphi eine Variante. Ich bin mir sicher schon Codeschnipsel für die Mixersteuerung unter www.delphipraxis.de gesehen zu haben.
Wirklich Flux wäre das mit einem netten Qt Tool... QTime + QSound sind die gesuchten Klassen.
Danke für Eure Hinweise und Ratschläge. Da werde ich mich am Besten bei Delphi umsehen; -mit dem C++ -Kram komme ich überhaupt nicht klar. Was mich wundert ist, daß ich der Erste sein soll, der von der Reklame geplagt so ein Programm sucht. MfG Paul
Wer weiß... So ein Programm schreibt man doch in 5min. Wenn noch schön aussehen soll vielleicht in 10.
Samuel schrob: >So ein Programm schreibt man doch in 5min. Wenn noch schön >aussehen soll vielleicht in 10. Fein, dann schreib es mir mal in 10 Minuten; es muß noch nicht einmal schön aussehen. ;-) SCNR Paul
Hmm... irgendwas fehlt mir ;)
1 | err:module:import_dll Library mscoree.dll (which is needed by L"Z:\\var\\tmp\\Radio.exe") not found |
2 | err:module:LdrInitializeThunk Main exe initialization for L"Z:\\var\\tmp\\Radio.exe" failed, status c0000135 |
oder
1 | ** (Radio.exe:4824): WARNING **: The following assembly referenced from /var/tmp/Radio.exe could not be loaded: |
2 | Assembly: Microsoft.VisualBasic (assemblyref_index=1) |
3 | Version: 10.0.0.0 |
4 | Public Key: b03f5f7f11d50a3a |
5 | The assembly was not found in the Global Assembly Cache, a path listed in the MONO_PATH environment variable, or in the location of the executing assembly (/var/tmp/). |
6 | |
7 | |
8 | ** (Radio.exe:4824): WARNING **: Could not load file or assembly 'Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. |
Sorry hab nicht mehr rein geschaut. Ich hab grad auch mal so ein Progrämmchen geschrieben. Weiß aber nicht ob es funktioniert, da auf vista64bit der Zugriff über winmm.dll da nicht funzt. Vielleicht kanns ja einer testen. Achja Quellcode hab ich auch beigelegt. Darf man fragen was du mit radio machst? Bei mir springt sofort Norton ein. Ich führs mal auf der VM aus. Da lässt es mich wenigstens in Ruhe. EDIT: Also Net4 installiere ich mir nicht auf der VM. NET2.0 hab ich drauf mehr aber auch nicht.
So, jetzt bin ich dazu gekommen, die Programme von Christopher und von Samuel zu testen: Zunächst möchte ich mich bei Euch beiden für die Programmierarbeit bedanken. @Christopher Dein Programm tut nach der Installation von einer neueren Version von Net-Framework prima seinen Dienst. Ich habe es mit dem "künstlichen" Verstellen der Systemzeit ausprobiert. @Samuel Auch Dein Programm startet, allerdings bediene ich es wohl falsch: Ich weiß nicht, wie ich die beiden Intervalle (von Minute 57 bis Minute 0 und von Minute 27 bis 30) darin einstellen kann. Aber: Du hast das Programm entgegen meiner Vermutung doch geschrieben. ;-) Es war also keine hohle Phrase von Dir. MfG Paul
Du stellst die Zeit einfach über Nummern Feld ein. Einmal 3 min und einmal 57min. Reihenfolge ist egal. Aber ich glaub das Lautstärke auslesen / setzen klappt nicht richtig. Ich muss mal nach einer Methode für Vista64bit suchen, dann debug ich mal mein prog.
Mein Programm setzt unter Vista seine eigene Lautstärke. Wie es unter XP aussieht weiß ich nicht. Aber funktionieren tut es. Mal schauen wie es global geht. Bei dir sind es 2 Intervalle. Da hab ich wohl was überlesen. Aber wenn mein Programm funktionieren sollte musst du es nur 2mal starten. Aber ehrlich gesagt außer von Codeprojekt find ich nichts über global Lautstärke verändern mit vista.
Hallo Na Paul,bist du zufrieden? Wieviel Zeit haben den die Proghersteller wirklich gebraucht? Wird oft untertrieben bei Home. Gruß
Also ich finde ein vernünftiges Programm schreibt man nicht mal eben so in 5 oder 10 Minuten ich für meins zwar ca 10 gebraucht aber dafür ist es auch übertrieben sch.... MFG
@Juppi Ja, ich bin vollkommen zufrieden. @Christopher Das Programm tut genau das, was es soll. Wenn Du schon so gut bist, es zu schreiben, werde ich den Teufel tun, auch noch Ansprüche zu stellen. Ich habe zwar kein Problem, den Algorithmus dafür in Pseudocode hin- zuschreiben, aber ich kann ihn nicht in die Syntax der "modernen" Sprachen umsetzen. Diese objektorientierte Denkweise kriege ich nicht mehr in meinen alten Kopf. ;-) Nur eine Frage: Womit hast Du es geschrieben (C, C++, C#) MfG Paul
Hallo Paul, geschrieben habe ich es mit Visual Baisic .Net mit Visual Studio 2010 Nebenbei ne neue Version;) MFG
@Christopher Aha. In Visual Basic würde ich wahrscheinlich sogar den Quelltext im Formular verstehen. Das Programm habe ich gleich getestet; -es fühlt sich als "R" in der Taskleiste ziemlich wohl. Danke noch einmal für Deine Taten! :-) MfG Paul
Hier nochmal der Code:
1 | Public Class Form1 |
2 | |
3 | Private Const APPCOMMAND_VOLUME_MUTE As Integer = &H80000 |
4 | Private Const WM_APPCOMMAND As Integer = &H319 |
5 | Declare Function SendMessageW Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr |
6 | |
7 | Dim flag As Boolean |
8 | |
9 | Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick |
10 | If Now.Minute = 27 Or Now.Minute = 57 Then |
11 | If Not flag Then |
12 | SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, CType(APPCOMMAND_VOLUME_MUTE, IntPtr)) |
13 | flag = True |
14 | End If |
15 | ElseIf Now.Minute = 30 Or Now.Minute = 0 Then |
16 | If flag = True Then |
17 | flag = False |
18 | SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, CType(APPCOMMAND_VOLUME_MUTE, IntPtr)) |
19 | End If |
20 | End If |
21 | End Sub |
22 | |
23 | |
24 | Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load |
25 | Timer1.Start() |
26 | Me.Visible = False |
27 | End Sub |
28 | |
29 | Private Sub ToolStripMenuItem1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem1.Click |
30 | Close() |
31 | End Sub |
32 | End Class |
Sorry für den Rechtschreibfehler es heißt natürlich Basic;)
Prima! Ich hatte in VB6 angefangen, das Programm zu schreiben und habe es da auch geschafft, mir die Minuten aus der Systemzeit zu holen. Dafür habe ich ein Buch hier. Aber um den Audiomixer anzusteuern muß man, wie ich herausfand die Bibliothek "winmm.lib" irgendwie mit hineinknoten. Das gelang mir nicht. :-( Das VB-Net scheint sich leider sehr von VB zu unterscheiden, aber ich werde natürlich versuchen, mich da hineinzufuchsen. Das ist nicht so ein wildes Zeug wie C++ (==!, {} und solche Sachen) ;-) MfG Paul
ja Paul, mit .Net kann man nette Sachen machen, du wolltest ja nicht. MfG
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.