mal so ins Blaue geschossen, würd ich sagen, dass du im pfad ne leerstelle hast, und der pfad nicht in anführungszeichen ist. Eventuell klappts in etwa so:
Process.Start("cmd.exe", "/c subst x: 'c:\\Program Files (x86)\\Microsoft Games'");
Das liegt daran, dass du mit strings hantierst (string [] Lines = new string [4];)
Wenn du Berechnungen durchführen willst (also bspw. 1 addieren) musst du erst den string in einen anderen Datentyp umwandeln, bspw. int. Das kannst du mit Convert.ToInt32() machen. Danach muss der veränderte Wert wieder in einen string umgewandelt werden, damit du ihn der Text-Eigenschaft eines Labels zuweisen kannst.
Dein Code sähe also so richtig aus:
string Datei;
string [] Lines = new string [4];
Datei = "demo.txt";
Lines = File.ReadAllLines(Datei);
Label7.Text = (Convert.ToInt32(Lines[0]) + 1).ToString();
Label8.Text = (Convert.ToInt32(Lines[1]) + 1).ToString();
Label9.Text = (Convert.ToInt32(Lines[2]) + 1).ToString();
Label10.Text = (Convert.ToInt32(Lines[3]) + 1).ToString();
Das ist aber alles eigentlich Grundlage
Super, vielen Dank! Der Tipp war goldrichtig, klappt nun perfekt.
Hallo,
ich habe folgenden Python-Schnippsel:
def encrypt_dfsId(self,dfsId):
byte1 = bytearray('3go8&$8*3*3h0k(2)2')
byte2 = bytearray(str(dfsId))
byte1_len = len(byte1)
for i in xrange(len(byte2)):
byte2[i] = byte2[i]^byte1[i%byte1_len]
m = md5.new()
m.update(byte2)
result = m.digest().encode('base64')[:-1]
result = result.replace('/', '_')
result = result.replace('+', '-')
return result
Dabei wird aus einem normalen string (dfsId) ein "encoded" string generiert. Das würde ich gerne in C# übersetzen.
Ich bin schon soweit, weiß jedoch auch nicht ob das bis dort alles so richtig ist:
string id = "1312816883569641";
byte[] byte1 = GetBytes("3go8&$8*3*3h0k(2)2");
byte[] byte2 = GetBytes(id);
int byte1_length = byte1.Length;
for(int i =0; i< byte2.Length;i++)
byte2[i] = Convert.ToByte(byte2[i]^byte1[i%byte1_length]);
System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
string result= Convert.ToBase64String(md5.ComputeHash(byte2));
result= result.Replace('/', '_');
result = result.Replace('+', '-');
MessageBox.Show(result);
static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
Problem ist nun folgendes: Für id = 1312816883569641 bekomme ich result = lhMT967uxSWQvq_eZwkc3Q== heraus. Herauskommen soll aber: result = gF7_aEyB9rj6_N2NQ7ShYA==
Was mache ich falsch? Ich weiß, dass das hier kein Python-Forum ist, aber vlt. fällt ja doch jemandem was auf. Oder gibt es andere Möglichkeiten das in C# zu übersetzen?
Vielen Dank im Voraus!
Ok, ich hab selbst ein workaround gefunden. Scheinbar wurde das iframe des Players nicht richtig geladen, also direkt das iframe angesteuert und es läuft.
Hallo Leute,
habe ein Problem und zwar versuche ich in einem normalen WebBrowser-Control (sowohl WPF als auch Windows Forms) ein Video von muzu.tv abzuspielen (Beispiel hier).
Zunächst war der Player im WebBrowser-Control komplett schwarz und hat gar nichts gemacht. Ich habe dann über diese Anleitung die verwendete IE-Version geändert, da es mit IE11 ohne Probleme abspielt.
Nun wird zwar der Player angezeigt, jedoch bekomme ich im Player die Fehlermeldung "Dieses Video ist leider nicht mehr verfügbar." Das Prog ist x64 kompiliert, sonst tut sich wieder gar nichts.
Was mache ich falsch? Das Video wird im IE 11 ganz normal abgespielt.
LG Uzi
Zweiter Screenshot
Hallo liebe Community,
seit etwa zwei Jahren werkel ich nun schon an meinem Projekt YouViewer.
Anfangs hatte ich es nur für mich programmiert, da ich nervige Probleme mit Youtube hatte (Buffering, Layout, usw.), die über eine Software leicht zu lösen waren.
Mittlerweile ist YouViewer recht umfangreich und unterstützt beispielsweise auch Twitch.tv-Livestreams.
Features:*Anschauen von Youtube-Videos
*Verwalten von Abos
*Anschauen von Hochgeladenen Videos, Playlists, Beliebten Videos, usw.
*Suchen nach Videos mit vielen Filtereinstellungen
*Anschauen von Kommentaren
*Keine Werbung (weder im Video noch im Programm)
*Viele Informationen auf einen Blick (Beschreibung, Bewertungen, usw.)
*Anschauen von Twitch.tv-Livestreams
*Auto-Update
Ich nutze die Youtube-Api, VideoLan DOTNET, WPFToolkit, sowie Newtonsoft.JSON.
Herunterladen kann man YouViewer entweder als Setup auf hier oder besser die aktuellste Version hier als ZIP.
Auf der Webseite kann man auch weitere Informationen zur Bedienung finden.
Systemanforderungen sind: Vista+, VLC >1.2 (32-bit!!!!), Internet, Youtube-Account oder Testaccount (diesen in %appdata%\YouViewer kopieren).
Mir ist bewusst, dass das Programm nicht perfekt ist und dass es noch einige Dinge gibt, die man hinzufügen/verbessern kann, und tatsächlich sitze ich noch fleißig an der Weiterentwicklung, sodass man mit regelmäßigen Updates rechnen kann.
Dennoch bin ich auf Feedback, Kritik und Anregungen gespannt und würde mich freuen, wenn möglichst viele ihren Senf dazu geben könnten.
Danke schonmal im Vorraus und viel Spaß
UZI
Servus,
den Pfad des Explorers so bestimmen:
string.Format("{0}\\{1}", Environment.GetEnvironmentVariable("WINDIR"), "explorer.exe")
genommen von hier: Explorer nach Beenden wieder starten
Hotkey-Klasse aus dem Forum:
Hotkey-Klasse
Wenn du mit SendKey arbeitest sollte Keys Enumeration weiterhelfen. Name des Keys ist "MediaPlayPause"
Ich denke dieser Link sollte dir weiterhelfen: C# List - Removing items while looping / iterating
//Halt stopp, scheint ja gar nicht dein Problem zu sein, also ignorier die Antwort (kann gelöscht werden)
Hast du die dll als Verweis hinzugefügt und hast du etwas wie
xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
als Namespace in xaml,
bzw. bei c# liegt die autocompletebox nur unter
System.Windows.Controls.AutoCompleteBox
Der Einsatz bei xaml wäre dann sowas:
<toolkit:AutoCompleteBox>
</toolkit:AutoCompleteBox>
Wenn du auf ein anderes Control umsteigen kannst:
Das WPF Toolkit beinhaltet eine AutocompleteBox. Using the AutoCompleteBox in the WPF Toolkit eine Anleitung dazu.
.NET-Code hab ich nach dieser Anleitung debuggt: http://msdn.microsoft.com/de-de/library/vstudio/cc667410(v=vs.110).aspx Zeigt aber keine relevanten Fehler an (meiner meinung nach):> Fehlermeldung:
msg Der Wert von "local" oder von Argument "msg" ist in diesem Anweisungszeiger nicht verfügbar und kann daher nicht ermittelt werden. Möglicherweise wurde er bei der Optimierung entfernt. System.Windows.Interop.MSG
hwnd Der Wert von "local" oder von Argument "hwnd" ist in diesem Anweisungszeiger nicht verfügbar und kann daher nicht ermittelt werden. Möglicherweise wurde er bei der Optimierung entfernt. System.IntPtr
minMessage Der Wert von "local" oder von Argument "minMessage" ist in diesem Anweisungszeiger nicht verfügbar und kann daher nicht ermittelt werden. Möglicherweise wurde er bei der Optimierung entfernt. int
maxMessage Der Wert von "local" oder von Argument "maxMessage" ist in diesem Anweisungszeiger nicht verfügbar und kann daher nicht ermittelt werden. Möglicherweise wurde er bei der Optimierung entfernt. int
MILMedia selbst, wovon die Prozentzahl lebt, verweist auf MilCore.dll und dessen Entrypoint MILMediaGetDownloadProgress und die holt sichs oder gibts (kanns nich genau nachvollziehen) von/an wpfgfx_v0300.dll bzw. die entsprechende Version (hier 400.dll).
Das sieht bei mir anders aus:
//MediaPlayer.cs:
public double DownloadProgress
{
get
{
this.ReadPreamble();
return this._mediaPlayerState.DownloadProgress;
}
}
//MediaPlayerState.cs:
internal double DownloadProgress
{
[SecurityCritical, SecurityTreatAsSafe] get
{
this.VerifyAPI();
double pProgress = 0.0;
HRESULT.Check(MILMedia.GetDownloadProgress(this._nativeMedia, ref pProgress));
return pProgress;
}
}
//MILMedia.cs:
[DllImport("wpfgfx_v0400.dll", EntryPoint = "MILMediaGetDownloadProgress")]
internal static int GetDownloadProgress(SafeMediaHandle THIS_PTR, ref double pProgress);
//Diese Funktion gibt zwar einen int zurück, aber der eigentliche DownloadProgress wird ja über ref weitergegeben, also auch double.
Meinst du ich soll den DllImport mal nachmachen? Wäre aber das Problem, dass ich nicht weiß wie ich an das SafeMediaHandle rankommen soll.
//EDIT
Wo hast du das gelesen mit den unterstützten Formaten, hier steht nichts davon: http://msdn.microsoft.com/de-de/library/system.windows.media.mediaplayer.downloadprogress.aspx
Macht aber sowieso keinen Unterschied, da es auch mit .wmv Dateien nicht funktioniert
Danke TheGear, hat mir auf jeden Fall weitergeholfen. Offensichtlich liegt es also nicht an der .NET-Framework-Version. Als ich das ganze nochmals getestet habe bin ich auf ein einziges Video gestoßen, bei dem das Verhalten anders war (Test-Video 3).
Test-Video 1 - 0.0 oder 1.0
Test-Video 2 - 0.0 oder 1.0
Test-Video 3 - Entweder 0.0 oder 0.01 (???)
Nach diesem Ergebnis, hab ich mir überlegt, worin sich die Videos unterscheiden und mir ist aufgefallen, dass wenn man den Link des dritten Videos im Browser öffnet, wird es nicht wie die beiden anderen Videos direkt im Browser angezeigt, sondern im Downloadmanager gedownloadet. Also nochmal nach einem Video, wie Test-Video 3 gesucht:
Test-Video 4 - 0.0 oder 1.0
Einen Programmierfehler kann ich nun im Grunde ausschließen, einen Kompatibilitätsfehler auch, ein Bug im .NET-Framework scheint es ja auch nicht zu sein (Es funktioniert ja bei TheGear). Auch nach dem Durchlesen dieses Threads: [FAQ] Programm läuft in anderer Umgebung nicht (richtig) bleibt die Frage, was kann es noch sein? Mglw. ein Problem bei den Videos?
_
PS:
Es wird folgende Exception geworfen bei player.Open(url):> Fehlermeldung:
Ausnahme:Aufgefangen: "Die Anwendungsidentität ist nicht festgelegt." (System.Deployment.Application.InvalidDeploymentException)
System.Deployment.Application.InvalidDeploymentException wurde aufgefangen: "Die Anwendungsidentität ist nicht festgelegt."
Hat aber wohl nichts mit diesem Problem zu tun, da es bei allen Videos, sogar bei lokal gespeichterten auftritt._
Seltsam, ich habe es gerade mit einem 3-Gigabyte-Video probiert, und kein Ergebniss erzielt. Welche .NET-Framework Version hast du? Meine:
<32Bit>
2.0.50727.5472
->C:\Windows\Microsoft.NET\Framework\v2.0.50727
4.0.30319.18052
->C:\Windows\Microsoft.NET\Framework\v4.0.30319
<64Bit>
2.0.50727.5472
->C:\Windows\Microsoft.NET\Framework64\v2.0.50727
4.0.30319.18052
->C:\Windows\Microsoft.NET\Framework64\v4.0.30319
< Installed .NET Frameworks >
.NET FW 2.0 SP 2
.NET FW 3.0 SP 2
.NET FW 3.5 SP 1
.NET FW 4.5 Client
.NET FW 4.5 Full
von NetDetector
Wäre sehr nett, wenn du deine Version schreiben könntest.
Da ich immer noch an dem Problem hänge, push ich es mal hiermit.
Scheint auch unter Win Vista+ noch zu funktionieren (Custom Columns) bzw. die Google-Suche danach
Wenn du das Kontexmenü erweitern willst, ist es glaub ich sinnvoller, das nicht über das eigene Programm zu machen, sondern den Eintrag zu erstellen, und dann sein eigenes Programm vom Windows explorer aufrufen zu lassen (siehe Erstellen von Kontextmenü-Einträgen).
Wenn du mit unbedingt mit einer foreach arbeiten willst, in etwa so:
void LoadQuellcodes()
{
foreach (string Album in AllAlben)
{
if (Album != "")
{
wb.Navigate(Album.Split('|')[1]);
while(wb.ReadyState != WebBrowserReadyState.Complete)
{}
DoStuffmitgeladenerSeite();
}
}
}
Ich würde aber mit dem Event DocumentCompleted arbeiten, und ohne foreach, viele Vorteile:
private void Main()
{
LadeersteSeite();
}
private void BrowserDocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
DoStuffmitgeladenerSeite();
LadenächsteSeite();
}
Wird dabei das NewWindow-Event ausgelöst? Wenn ja, einfach:
e.Cancel = true;
Wird denn das EULA-Fenster angezeigt oder irgendeine Fehlermeldung geworfen?
Es gibt ein Plugin für den VLC Player, das die Position speichert, an dem das Video beendet wurde und dann später beim erneuten Öffnen des Videos wieder hinspult. Man kann diese Positionen in folgender Datei auslesen:
C:\Users\%username%\AppData\Roaming\vlc\srpos.ini
Vielleicht kannst du damit etwas anfangen.
Das mit dem Dekompilieren ist gut zu wissen. Den Code der MediaPlayer-Klasse gibts tatsächlich schon im Netz (hier).
Beim Aufruf MediaPlayer.DownloadProgress wird der Wert von _mediaPlayerState.DownloadProgress genommen. Dort widerrum wird die Methode GetDownloadProgress aus der Klasse MILMedia aufgerufen. Wenn man da reinschaut steht dort ein Dll-Import auf die unmanaged Assembly wpfgfx_v0400.dll am Entrypoint "MILMediaGetDownloadProgress". Aber da kann ich wohl nicht reingucken. Aber über die ganzen Eigenschaften und Methoden wird eigentlich immer der Double-Wert beibehalten, also scheint irgendwas in dieser wpfgfx_v0400.dll nicht zu stimmen.
Gibt es eine Möglichkeit dort reinzuschauen?
Danke, bin erleichtert, dass es nicht an meinem Code zu liegen scheint. Scheinbar wird die MediaPlayer-Klasse nicht sehr oft verwendet. Ich hatte es auch schon mit 2 Stunden in 1080p ausprobiert, selbes Ergebnis, also scheint nicht so recht Sinn zu machen.
Darf ich rechtlich überhaupt DLLs aus dem .NET Framework decompilen/disassemblieren, um zu schauen ob ein Fehler enthalten ist?
Auch kein Problem, hier bitteschön.
Okay, hier hab ich mal ein Minimalprojekt erstellt:
MediaPlayer player;
DispatcherTimer timer;
public MainWindow()
{
InitializeComponent();
player = new MediaPlayer();
timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, 0, 0, 250);
timer.Tick += delegate { label1.Content = player.DownloadProgress.ToString(); label1.UpdateLayout(); };
}
private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
Start startform = new Start();
startform.ShowDialog();
if (startform.DialogResult.HasValue && startform.DialogResult.Value)
{
player.MediaOpened += delegate { player.Play(); timer.Start(); };
player.Open(new Uri(startform.txtbox1.Text));
VideoDrawing drawing = new VideoDrawing();
drawing.Rect = new Rect(new Size(1280, 720));
drawing.Player = player;
DrawingBrush brush = new DrawingBrush(drawing);
grid1.Background = brush;
}
else
Close();
}
Startet eine eingegeben URL, und zeigt den DownloadProgress-Wert alle 4tel-Sekunde in einem Label an. Auch hier tritt der Fehler auf. Ich lade das Programm mal mit hoch, dann kann mal jemand anderes es ausprobieren (Bspw. mit diesem Video )
Danke für Rückmeldungen!
Ich weiß die Antwort auf die Frage, ob das ein Fehler des .NET Frameworks oder mein Fehler ist eben nicht. Deswegen schreibe ich ja nicht zu stimmen scheint. Vielleicht mache ich ja auch irgendwas mit dem Wert falsch.
Es geht nicht um die Progressbar oder sonstiges GUI-relevantes. Es geht darum, dass DownloadProgress nur entweder 0.0 oder 1.0 entgegen der Beschreibung im msdn ist. Ich poste hier auch keinen Code, da ich nicht denke, dass das ganze Codeabhängig ist, da ja der Wert aus dem .NET Framework nicht zu stimmen scheint.
Stimmt, auf der msdn-Seite ist aber auch von 0 oder 1 die Rede. Aber ja ich arbeite mit Double, das ist es nicht.
Hallo,
ich übergebe einem MediaPlayer einen Link zu einem Video aus dem Netz.
Dieses spielt er auch ohne Probleme ab. Damit der Downloadfortschritt des Videos angezeigt wird, habe ich eine eigene Progressbar gebastelt und will diese anhand von MediaPlayer.DownloadProgress "füllen". Ich habe es schon mit mehrere Videos ausprobiert, aber DownloadProgress ist immer entweder 0 oder 1. Bei msdn steht:
The percentage of download progress for content located at a remote server represented by a value between 0 and 1.
Der Wert liegt bei mir aber nicht zwischen 0 oder 1, sondern nur auf 0 oder 1, so als ob das Video innerhalb von einer halben Sekunde vollständig geladen wäre (geht natürlich nicht: 1920p x 50min)
Ist das ein Bug von .NET Framework 4.5 oder mach ich was falsch?
Hoffe das hilft dir weiter:
Drawing Trig Functions via WPF
Über die Background-Image-Eigenschaft wird das nicht so einfach machbar sein. Dann lieber eine PictureBox hinter alle Controls und dann wie schon gesagt die Transparenz über einen Timer erhöhen.
Der Link ist leider nicht mehr verfügbar.
Hat vlt. noch jemand den Source auf Platte und wäre so freundlich diesen nochmals hochzuladen
Danke!
Es gibt ne seht gute Klasse aus dem Forum:
Hotkey-Klasse
Schätzungsweise geht es einfach zu schnell. Hau mal ein picturebox.Update und ne pause von ner halben sekunde nach jedem picturebox.Load rein.
Ich bin mir zwar nicht sicher, aber beim Abmelden werden nur die Programme geschlossen, die der angemeldete Benutzer gestartet hat. Wenn also ein Prog gestartet wurde, das unter Systemrechten läuft, sollte es auch nach dem Abmelden noch aktiv sein. Vielleicht hilft dir das weiter. Frage wäre dann nur, wie man das Programm mit Systemrechten aus einem Dienst heraus startet.
Vielleicht weiß ja dazu jemand etwas.
Also:
Das Handle des Explorers bekommen.
Eventuell musst du dann noch explizit das Handle des Desktops holen.
Dann mit SendMessage SetItemPosition senden.
So sollte das funktionieren. DLL-Importe bekommst du unter anderem von Pinvoke.
Ich geh mal eigentlich davon aus, dass du folgende Links schon gefunden hast:
Manipulate Icons
SetItemPosition
Snippet in VB
Du könntest mal versuchen, den Explorer nach dem Setzen der Größe zu beenden und wieder zu starten.
Vielleicht funktioniert es dann ja.
Bevor du das ganze in dein Programm einbaust auch nochmal versuchen den Explorer "sanft" zu beenden (Start| Strg+Umschalt|Rechtsklick auf leere Fläche|Explorer beenden) und schauen, ob damit irgendein Effekt erzielt wird.
Schau mal hier:
FindWindow
dort steht auch:
Alternative
If you need to find windows for a given process ID, try using EnumWindows in combination with GetWindowThreadProcessId.
Dazu die links:
EnumWindows
GetWindowThreadProcessId
Schau mal hier:
How to trigger event when a variable's value is changed?
Durch die totale Angabe geteilt durch die Bytes des gesamten kannst Du Dir die quasi die Länge pro Sekunde errechnen (wenn man das so nennt?).
Anschließend die "Länge pro Sekunde" mulipliziert mit der Sekunden-Angabe des gewünschten Starts.
Geht leider nicht so einfach, denn das wäre ja die durchschnittliche Bitrate pro Sekunde, die weicht aber ab:
30 Frames, die nur schwarz sind haben deutlich weniger "Datendurchsatz" als 30 Frames, die komplett bunt sind (ich hoffe, ihr versteht was ich meine).
Man könnte damit natürlich sich an die Zeit annähern, aber pi mal Daumen ist ja nie gut.
@Coder007:
Wenn man mal ein Range Request in die Mitte der Datei setzt, kann sie VLC immer noch abspielen (glaub ich)), aber natürlich sind die ganzen Header der MP4 verloren.
Ich hatte es schon ausprobiert:
Problem, woher weiß ich, welcher Zeitpunkt welchem "Bytepunkt" entspricht.
Da ich das nicht weiß, habe ich gefragt ob es überhaupt mit Range Request umsetzbar ist, oder ob es da andere Möglichkeiten gibt.
Hallo,
ich lade ein MP4-Video über HTTPWebRequest/Response herunter.
Dabei kenne ich jeweils die Größe(bytes+Auflösung) und die Länge des Videos.
Bitraten, o.ä. sind nicht bekannt.
Jetzt will ich dem Benutzer ermöglichen, das Video ab einem bestimmten Zeitpunkt (bspw. ab der 3ten Minute) bis zu einem bestimmten Zeitpunkt (bspw. bis zur 5ten Minute) zu downloaden.
Lässt sich das über Range-Request machen? Oder muss ich das gesamte Video downloaden und es dann manuell zuschneiden? Gibt es noch eventuell andere Möglichkeiten, das zu bewerkstelligen?
Danke schonmal für Antworten.
Setze mal die RemovePreviousEntries-Eigenschaft der Setup auf true.
Die alten Dateien müssten dann eigentlich automatisch gelöscht werden.
Oder die DetectNewerInstalledVersion-Eigenschaft auf false.
Form2 form = new Form2();
form.Show();
Vielleicht hilft dir das hier weiter:
PsLoggedOn.
Dort wird auch der Weg erklärt.