Hallo,
erstmal wird es dir nicht möglich sein, direkt auf einen physischen Speicherbereich zuzugreifen, denn durch die Speichervirtualisierung hat jeder Prozess sozusagen seinen eigenen Arbeitsspeicher (Wikipedia Speichervirtualisierung)
Wenn du Stack oder DLLs im Arbeitsspeicher auslesen willst, kommt auch noch ASLR (Wikipedia ASLR) ins Spiel.
Schau dir mal Cheat Engine an. Ich glaube irgendwo gelesen zu haben, dass bei der Installation eine Art Tutorial mitinstalliert wird: cheat engine
Viele Grüße,
Big Al
//Edit: Habe gar nicht gesehen, dass dein Beitrag im Buchforum steht, hier noch ein Buch darüber, ist aber Python, nicht C#: Hacking mit Python
Hallo,
ich habe das ganze schon mit Ellipsen probiert, deren Radius ich animiert habe. Aber auch hier das Problem, dass das "Bild" dann immer an das umgebende Control angepasst wird und somit eigentlich nur die mittlere, nicht animierte Ellipse kleiner wird, weil ja das Image-Control nicht wachsen kann.
Big Al
Hallo,
ich versuche mich gerade an einer Animation eines WIFI Signals, die unanimiert ungefähr so wie auf dem Bild im Anhang aussieht. Ich habe das ganze in ein Image und eingebettetem GeometryDrawing eingebaut, doch wenn ich dann die einzelnen "Wellen" animiere verändert sich nur das Verhältnis der Wellen zueinander, anstatt zusammen größer zu werden, so wie ich das vorhabe. Wie kann ich so etwas am besten umsetzen? Ist GeometryDrawing überhaupt der richtige Ansatz?
Viele Grüße,
Big Al
Hallo Levitas,
vielleicht hilft dir die NAudio Bibliothek? Allerdings kann nicht jeder Treiber den Output ausgeben. Mein Treiber kann das z.B. nicht.
Big Al
Hallo gfoidl,
ich denke nicht, dass ein Storyboard die Lösung für dieses Problem ist, denn es hat keinen Zugriff auf den alten Wert.
Hier noch einmal das Szenario:
Ich habe eine Button, dessen Width-Property an ein DependencyProperty des ViewModels gebunden ist.
Nun ändert sich das Property im ViewModel und das wird auch gleich vom Button übernommen. Jetzt kann ich zwar über einen DataTrigger bei einer Änderung eine Animation abspielen, aber diese kennt ja nur die aktuelle, also neue, Breite des Buttons. Wie soll ich denn nun eine Animation so abspielen, dass der Button die Breite animiert?
Soll ich hier ganz auf das Binding verzichten und nur den DataTrigger benutzen, sodass die Werte von der Animation an die des ViewModels angepasst werden?
Big Al
Hallo,
was ich mich schon oft gefragt und oft gegoogelt habe, wofür ich aber noch keine Lösung gefunden habe, ist folgendes Problem:
Wenn ich eine Eigenschaft eines Controls, z.B. die Breite eines Buttons, an ein DependencyProperty in meinem ViewModel o.ä. binde und sich der Wert im ViewModel ändert, dann wird die Änderung selbstverständlich direkt zu dem Button durchgereicht und dieser bekommt die neue Breite. Wie kann ich aber diese Änderung animieren, sodass der Button von der alten Größe auf die neue wächst bzw. schrumpft? Man findet im Internet nur Beispiele, bei denen zwar eine Animation abläuft, diese aber nicht den alten Wert kennt.
Ein Beispiel hier von Josh Smith: Orchestrating Animated Transitions between View and ViewModel
Er benutzt aber nur eine Fade-In und Fade-Out Animation für die Transitions. Wie sieht es mit konkreten Start- und Endwerten aus? Kennt da jemand eine gute Lösung? Vielleicht ein zwischengeschaltetes Objekt, welches beide Werte enthält, an die man dann die To und From Properties der Animation binden kann?
Vielen Dank,
Big Al
//Edit: Oder wäre es vielleicht der richtige Weg, den Wert im ViewModel zu animieren? Gehören Animationen da rein?
//Edit 2: Hier ist noch eine Lösung von Josh Twist, die mir aber nicht so gut gefällt, da man jedes gebundene Control noch einmal in ein UserControl verpacken muss: Animating when data changes Part 2
Hallo,
vielen Dank Herbivore, so wie du es beschrieben hast funktioniert es bis jetzt ohne Probleme. Ich denke nicht, dass der Fehler noch auftreten wird.
Vielen Dank dafür!
Big Al
Hallo,
ich habe alle Events, die der Recognizer hat, abonniert und keines wird mehr gefeuert, wenn der Fehler auftritt. Aber wo muss ich das KeepAlive denn einsetzen? Es sollte ja an das Ende des Codeblocks, in dem es benötigt wird. Da die Erkennung aber dauerhaft laufen soll gibt es diesen Punkt doch gar nicht so. Ich erstelle den Recognizer, starte per RecognizeAsync den "Erkennungsthread" und warte auf die Events.
Wäre die korrekte Lösung vielleicht, die synchrone Recognize() Methode in einem Thread zu benutzen und beim feuern des RecognitionCompleted-Events wieder Recognize() aufzurufen?
Big Al
Hallo Herbivore,
ich meinte den Thread, der durch RecognizeAsync gestartet wurde. BabbleTimeout, InitialSilenceTimeout und EndSilenceTimeout hatte ich testweise auch auf 9 Tage gesetzt, aber das hatte nichts geholfen. Ich werden mal die Sache mit dem Garbage Collector verfolgen.
Danke sehr!
Big Al
Hallo Mycsharpler,
Viele werden noch nicht mit der Spracherkennung aus dem System.Speech.Recognition Namespace herumgespielt haben, aber vielleicht habe ich ja Glück und jemand kann mir helfen.
Ich benutze in meiner WPF Anwendung die Klasse SpeechRecognitionEngine um Sprache zu erkennen. Das funktioniert auch meistens einige Sekunden lang super. Nach zufälliger Zeit, manchmal auch sofort, beendet sich aber der Thread der Engine selbst, ohne das über irgendein Event mitzuteilen.
Wenn ich die Klasse SpeechRecognizer benutze, wird oben das Windows 7 Spracheingabefenster angezeigt, das auch immer den zuletzt gesprochenen Text zeigt. Wenn der Thread beendet ist wird dieser Text auch noch richtig angezeigt, aber keines der Events der Klasse feuert mehr.
Folgendermaßen benutze ich die Klasse:
SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();
recognizer.SetInputToDefaultAudioDevice();
//Grammatik laden ...
recognizer.RecognizeAsync(RecognizeMode.Multiple);
In dem SpeechRecognized-Event wird einfach nur eine Action, die in einem Dictionary dem zu erkennenden Text zugeordnet ist, ausgeführt:
void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
Action<string> a;
if (dict.TryGetValue(e.Result.Text, out a) && a != null)
a(e.Result.Text);
}
Das Ausgabefenster zeigt auch immer folgende Meldung an:
Fehler
Information: 0 : SAPI does not implement phonetic alphabet selection.
Die kommt allerdings immer, auch wenn die Eingabe noch funktioniert.
Ich habe schon stundenlang nach einer Lösung gegoogelt und würde mich wirklich freuen, wenn mir hier jemand weiterhelfen könnte.
Viele Grüße,
Big Al
Ihr werdet es nicht glauben, aber das Problem ist ein WindowsFormsHost mit eingebautem WinForms Control, welches wiederum ein FlashPlayer Control enthält. Warum das passier kann ich noch immer nicht sagen, aber wenn ich das Control rauslasse funktioniert es. Sehr seltsames Verhalten...
Vielleicht weiß ja einer eine Antwort auf dieses Mysterium, das würde mich sehr interessieren. Erst einmal nehme ich jetzt den FlashPlayer raus.
Hallo,
Snoop stürzt bei mir leider immer ab einer bestimmten Stelle im TreeView ab, deshalb konnte ich das Control nicht näher analysieren. Ich werde wohl mal eine extra Anwendung schreiben, die das Problem ohne große Controls drumherum veranschaulicht. Vielleicht funktioniert Snoop ja dann. Ich habe auch versucht, den TextBlock in VisualBrush an den äußeren zu binden und bin auf exakt dasselbe Ergebnis wie vorher gekommen. Wenn sich durch Änderungen in der gebundenen Klasse der Wert der ProgressBar ändert, ändert sich auch der Wert des ersten TextBlocks, nicht aber der des zweiten.
Zur weiteren Info: Der Style liegt in einer XAML-Ressourcen-Datei, aber das dürfte eigentlich keine Rolle spielen, denn das Binding des ersten TextBlocks funktioniert ja.
Big Al
//Edit: Es wird noch komischer: Ich habe den Style 1 zu 1 in ein neues Testprojekt übertragen und dort eine ProgressBar mit dem Style versehen und ihren Wert an einen Slider gebunden. Hier funktioniert es, in dem anderen Projekt nicht. Beide haben als Framework-Target 4.0.
Hi,
das muss ich gleich ausprobieren, wenn ich zu Hause bin. Von Snoop habe ich noch nie was gehört. Werde ich auch mal ausprobieren. Melde mich, wenn ich mehr weiß.
Danke erstmal,
Big Al
Hallo,
ich versuche mich gerade an einer ProgressBar, die fünf Sterne statt des normalen Balkens anzeigt. Ich weiß, dass es da schon einige Lösungen gibt, aber ich dachte mir, dass meine eigentlich auch funktionieren müsste. Nur leider tritt hier ein komisches Phänomen auf. Hier erst einmal das XAML für den ProgressBar-Style. Da ich aber nur mein Problem demonstrieren möchte habe ich in PathData ein einfaches Rechteck statt der Sterne und im VisualBrush statt einer ProgressBar einen TextBlock drin. Außerdem ist im Grid noch ein weiterer TextBlock zur Veranschaulichung des Problems.
Mein Problem ist nun, dass trotz exakt gleichem Code die beiden TextBlocks unterschiedliche Werte haben. Der TextBlock im VisualBrush wird nämlich bei Änderungen des Properties, an das er gebunden ist nicht geupdated und zeigt immer den ersten Wert. Der TextBlock im Grid zeigt allerdings immer den richtigen Wert an. Dieses seltsame Verhalten bereitet mir gerade einiges Kopfzerbrechen. Kennt jemand den Grund dafür?
Hi,
also wenn es nur ähnlich sein soll, würde ich das so machen:
Ein Grid mit 2 Spalten und für jeden Sender eine Zeile. In die erste Spalte kommt immer der Sendername und in die zweite ein ScrollViewer, in dem dann ein StackPanel mit Orientation=Horizontal steckt. Dann hast du aber natürlich ScrollBars und keinen Button, mit dem du das Programm scrollst. Du könntest also noch eine 3. Spalte einfügen und dort den Scroll-Button unterbringen.
Wenn die Anzahl der Programme variabel ist, kannst du statt des Grids auch ein StackPanel nehmen und in dieses viele kleine Grids mit einer Zeile und 2 Spalten stecken.
Viele Grüße,
Big Al
//Edit: Bild angehängt (Die Pfeile hinten sind optional)
Hi,
dass Windows nur die RecentFiles selbst einträgt, ist mir klar. Allerdings sind ja Links, die ich in die JumpList eintrage, auch nach dem Beenden des Programms noch in der Liste. Erst wenn ich das Programm neu starte wird die Liste geleert, weil sie durch die im XAML definierte Standard-JumpList ersetzt wird. Ich würde nun gerne die Links, die schon in der Liste sind, in die neue JumpList übernehmen.
Big Al
Hi,
danke für die Antwort! Das Entfernen funktioniert jetzt, ich hatte 2 Anwendungen vertauscht.
Allerdings werden zwar Elemente, die ich in die JumpList lege auch nach dem Programm-Ende angezeigt, aber diese werden gelöscht, wenn ich das Programm neu starte und die Standard-JumpList die alte überschreibt. Muss man also bei jedem Programmstart die Jumplist neu befüllen oder kann man die Werte irgendwie übernehmen?
Viele Grüße,
Big Al
Hallo,
wie schon im Titel gesagt, gibt ein Aufruf von JumpList.GetJumpList(App.Current) in meiner Anwendung null zurück, wenn ich das Programm aufrufe. Ich setze dann zwar einfach eine neue Jumplist über JumpList.SetJumpList und diese wird auch von GetJumpList zurückgegeben. Starte ich die Anwendung allerdings neu, kommt wieder null zurück. Außerdem scheint die Apply Methode nicht zu funktionieren, denn das Löschen eines Items funktioniert auch nicht. Hier mein Code zum hinzufügen eines Items:
JumpList jl = JumpList.GetJumpList(App.Current);
if (jl == null)
jl = new System.Windows.Shell.JumpList();
System.Windows.Shell.JumpTask t = new System.Windows.Shell.JumpTask();
t.ApplicationPath = path;
t.IconResourcePath = path;
t.Title = name;
t.CustomCategory = "Links";
t.Description = description;
jl.JumpItems.Add(t);
JumpList.SetJumpList(App.Current, jl);
jl.Apply();
Und hier, wie ich versuche, ein Item zu entfernen:
JumpList jl = JumpList.GetJumpList(App.Current);
if (jl == null)
return;
JumpItem toRemove = null;
foreach (JumpItem i in jl.JumpItems)
{
JumpTask t = i as JumpTask;
if (t != null && t.ApplicationPath == path)
{
toRemove = i;
break;
}
}
if (toRemove != null)
{
jl.JumpItems.Remove(toRemove);
jl.Apply();
}
In allen Beispielen, die ich bisher gesehen habe, wird gar nicht geprüft, ob JumpList.GetJumpList(App.Current) null zurückgibt, es scheint also eigentlich immer was kommen zu müssen. Kann mir jemand sagen, was ich falsch mache?
Vielen Dank,
Big Al
Hi André,
ich habe mir das Tool mal angeschaut. Ich finde die Idee super, aber so ganz funktioniert das bei mir noch nicht.
Ich denke mal, dass der rechte Schieberegler für den Zoom ist, oder? Bei mir hat sich allerdings nichts getan, als ich ihn benutzt habe. Das Beispiel mit der Uhr habe ich heruntergeladen und versucht zu laden, aber es ist nichts passiert.
Bei der Navigation fände ich es schöner, wenn du die Regler anpasst. Wenn ich einen Regler nach rechts ziehe, bewegt sich die "Kamera" nach links, das ist irgendwie irritierend. Außerdem fände ich es schöner, wenn ein Element schon beim OnMouseDown den grünen Auswahlrahmen bekommt, aber das ist nur Kosmetik. Schon störender ist, dass das SelectionTool mehrere Elemente auswählt, wenn man sie hintereinander anklickt. Das sollte so nur sein, wenn man beim Klicken Strg gedrückt hält. Wie wäre es außerdem, wenn du die Tool-Buttons zu RadioBoxen mit Button-Stil machst? So könnte man schneller sehen, welches Tool gerade ausgewählt ist.
Ich habe es auch nicht hinbekommen, auf dem BCD irgendetwas anzeigen zu lassen, wie füge ich denn eine "Stromquelle" hinzu? Aus deinem Bild schließe ich, dass das die Buttons sind, aber wie ändere ich deren Farbe auf Orange, was wohl "An" bedeuten soll?
Wenn ich die RedstoneSimulator.exe starte, passiert gar nichts. Wofür ist die da?
Vielleicht postest du hier mal eine kurze Anleitung, damit man das auch versteht. Wenns funktioniert, dann ist das ein super Programm für die Rechnertechnik-Hausaufgaben ;-)
Viele Grüße,
Big Al
Hi,
Sorry das ich mich erst so spät melde, ich hatte den Thread aus den Augen verloren. Ich denke dieser Authentifizierungsfehler muss an dem Server liegen, denn bei mir funktioniert es so:
static void Main(string[] args)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost/digest_auth_test.php");
request.Credentials = new NetworkCredential("Alexander", "123456");
request.PreAuthenticate = true;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader s = new StreamReader(response.GetResponseStream()))
{
Console.Write(s.ReadToEnd());
}
Console.ReadKey();
}
Bist du dir sicher, dass dein Passwort und Username richtig sind?
Big Al
Hi,
ich habe es jetzt so gelöst, dass ich auf das MouseUp Event horche. Dann starte ich einen Timer und wenn innerhalb kurzer Zeit wieder gedrückt wird, ist es ein Doppelklick und ich öffne den Expander. Da es MouseUp ist, wird dann kein anderes Item ausgewählt.
Big Al
Hallo,
Ich habe ein kleines Problem mit dem WPF ListView. Das wählt ja auch Items aus, wenn man auf einem Item die Maus gedrückt hält und sie dann über ein anderes Item bewegt.
Im Grund würde es schon reichen zu wissen, wie man dieses Verhalten deaktiviert, aber ich erkläre mal weiter, falls das nicht geht.
Ich habe also ein ListView und wenn ich auf ein Item doppelklicke, öffnet sich auf der rechten Seite ein Expander. Das ListView wird also kleiner und die Position der Items verschiebt sich. Nun ist in dem kurzen Moment nach dem Doppelklick die Maustaste noch gedrückt und somit wird dann das Item ausgewählt, das nun an der Stelle ist, an der das eigentlich auszuwählende Item war.
Gibt es hier eine elegante Lösung, das zu vermeiden?
Vielen Dank,
Big Al
Hallo,
ich versuche gerade zum ersten Mal, neben Debug und Release weitere Konfigurationen für ein VS 2010 Projekt zu benutzen. Allerdings kann ich in den Projekteigenschaften unter "Anwendung" die Konfiguration, für die ich Einstellungen ändern möchte, nicht auswählen. Dort steht "Nicht zutr." und die DropDown-Box ist ausgegraut. Wie das aussieht seht ihr im Anhang.
Unter "Erstellen" kann ich die Konfiguration übrigens ändern.
Mein Ziel ist es, jeweils eine Konfiguration für eine Kompilierung fürs Framework 4.0 und 3.5 SP1 zu haben. Ist das überhaupt der richtige Weg?
Vielen Dank schonmal,
Big Al
Hallo,
ich habe das Problem gelöst. Es lag daran, dass der Dispatcher auch in einem anderen Thread als dem GUI Thread erzeugt wurde. Da liefert Dispatcher.CurrentDispatcher natürliche einen falschen.
Vielen Dank für die Hilfe,
Big Al
Hi,
das funktioniert auch nicht, da muss es wohl am Code drumherum liegen. Ich lade im Hintergrund Informationen, die in eine Collection kommen. Ein ViewModel greift dann, wenn der Ladevorgang abgeschlossen ist, auf die Collection zu und erstellt ViewModels der geladenen Items und schreibt sie in eine eigene ObservableCollection.
Hier mal ein bisschen Code der Methode, die nach dem Laden aufgerufen wird:
protected override void OnInformationLoadingCompleted(IAsyncResult res)
{
(res.AsyncState as Action).EndInvoke(res);
//Hier kommt der Teil, der abschmiert:
foreach (Appeal.Model.Base.Comment c in ((OnlineApp)Model).GetComments())
{
CommentViewModel vm = new CommentViewModel(c);
Comments.Add(vm);
}
infoLoaded = true;
}