Guten Abend,
ich habe schon ein Weilchen gegoogelt, aber nichts wirklich aufschlussreiches gefunden.
Deshalb hoffe ich, dass vielleicht der ein oder andere schon ein paar Erfahrungen gesammelt hat.
Ich möchte mir einen ganz simplen "Mp3 Player" basteln. Wirklich nur Start/Pause/Stop, Lautstärke und die Möglichkeit mehrere Song in eine Queue zu hauen (obwohl das ja sogar noch "von Hand" per Schleife gehen würde...)
Das einzige was zählt, es sollen möglichst wenig Ressourcen verbraucht werden.
Von daher ist meine Frage an euch nun - was ist eurer Meinung am besten dafür geeignet? bass.net? wmp-control? ...?
liebe Grüße,
ein blutiger_anfänger
Hey sth_Weird,
hab mir Planetrock eben mal angeschaut... Die StreamUrl müsste folgende sein:
rtmp://91.193.247.26/PLANETROCK
Ob die Bass.net das kann weiß ich nicht...
Bei der Seite stand's in den FlashVars des Player im Quelltext. War eigentlich relativ zu schnell zu finden.
Du brauchst nur die StreamUrl? Wenn ja, dann lass dir doch mit Rechtsklick mal den Quelltext des PopUps anzeigen udn such dann nach einer Url die auf eine .pls/.asx datei verweist...
Wenn das nicht klappt kannst du auch immer noch die HttpHeader durchforsten. (Firefox -> LiveHttpHeaders (Plugin))
Die erste Mathode ist jedoch meiner Meinung nach wesentlich schneller und meist völlig ausreichend!
Viel Erfolg,
ein blutiger Anf#änger
p.s.:
Solltest du absolut nicht weiterkommen, dann gib uns ein Beispiel und dann gehen wir das Anhand dessen mal Schritt-für-Schritt durch.
Erst einmal vielen Dank für dein Feedback. Der 30 Tage Rückblick lässt sich nun auch als DataTable ausgeben.
Jedoch würde ich mich freuen, wenn du mir deine Idee mit dem UserControl nochmal erklärst, da konnt ich dir leider noch nicht ganz folgen.
Ein vom DataGridView abgeleitetes und angepasstes Control hatte ich jetzt zw8ar auch nochmal gebastelt, aber ich sehe da einfach keinen Vorteil drin?
Es ist doch am Ende viel einfach sich ein DatagridView zu nehmen und meine Klasse konfiguriert es dann richtig, als wenn der User erst extra das neue Control hinzufügen muss, oder nicht?
Klär' mich bitte mal einer auf... 😉
liebe Grüße,
ein blutiger_anfänger
Beschreibung:
Der ein oder andere von euch kennt vielleicht den Counterservice www.ipcounter.de
Da ich auf 2-3 Homepages diesen Service in Anspruch nehme und keine Lust habe immer alle Statistikseiten einzeln aufzurufen habe ich 2 Klassen gebastelt, mit denen es möglich ist diverse Infos auszulesen.
Verwendung:
IpCounter ipc = new IpCounter(3);
ipc.Last30DaysGridView(dataGridView1, IPcounter_ID);
// Befüllt & konfiguriert das übergebene dataGridView mit den Statistikdaten der letzten 30 Tage
//Alternativ kann das ganze nun auch als DataTable zurückgegeben werden.
dataGridView1.DataSource = ipc.Last30DaysDataTable(IPcounter_ID);
string[] LastDays = ipc.Last30Days(IPcounter_ID);
//Gibt die Statistikdaten der letzten Tage, als StringArray zurück
string OnlineUsers = ipc.OnlineUsers(IPcounter_ID);
//Gibt die Anzahl der Online User als string zurück
string HitsGesamt = ipc.AllHits(IPcounter_ID);
// Gibt die Anzahl aller Seitenaufrufe als String zurück
string UniqueVisits = ipc.AllUniqueVisitors(IPcounter_ID);
// Gibt die Anzahl aller eindeutigen Besucher als string zurück
IPcounter.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using System.Net;
using System.Windows.Forms;
using System.Data;
namespace MyStats
{
class IpCounter
{
string html = string.Empty;
int ErrorTry;
int Trys = 0;
public IpCounter(int AnzahlVersuche)
{
this.ErrorTry = AnzahlVersuche;
}
public string OnlineUsers(int id)
{
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.ipcounter.de/stats.php?u=" + id.ToString());
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
html = sr.ReadToEnd();
sr.Close();
sr.Dispose();
res.Close();
RegExSolve Solver = new RegExSolve(html);
string[] ActualItems = Solver.StatsOnline();
return ActualItems[0].Remove(0, 102);
}
catch
{
Trys++;
if (Trys < ErrorTry)
{
OnlineUsers(id);
return "error";
}
else
{
Trys = 0;
return "error";
}
}
}
public string AllHits(int id)
{
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.ipcounter.de/stats.php?u=" + id.ToString());
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
html = sr.ReadToEnd();
sr.Close();
sr.Dispose();
res.Close();
RegExSolve Solver = new RegExSolve(html);
string[] SeitenAufrufe = Solver.StatsAll();
SeitenAufrufe[0] = SeitenAufrufe[0].Remove(0, 89);
if (SeitenAufrufe[0].Contains("</strong></span></td>") == true)
{
SeitenAufrufe[0] = SeitenAufrufe[0].Replace("</strong></span></td>", "");
}
return SeitenAufrufe[0];
}
catch
{
Trys++;
if (Trys < ErrorTry)
{
AllHits(id);
return "error";
}
else
{
Trys = 0;
return "error";
}
}
}
public string AllUniqueVisitors(int id)
{
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.ipcounter.de/stats.php?u=" + id.ToString());
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
html = sr.ReadToEnd();
sr.Close();
sr.Dispose();
res.Close();
RegExSolve Solver = new RegExSolve(html);
string[] SeitenAufrufe = Solver.StatsUniqueAll();
SeitenAufrufe[0] = SeitenAufrufe[0].Remove(0, 106);
if (SeitenAufrufe[0].Contains("</strong></span></td>") == true)
{
SeitenAufrufe[0] = SeitenAufrufe[0].Replace("</strong></span></td>", "");
}
return SeitenAufrufe[0];
}
catch
{
Trys++;
if (Trys < ErrorTry)
{
AllUniqueVisitors(id);
return "error";
}
else
{
Trys = 0;
return "error";
}
}
}
public string[] Last30Days(long id)
{
string[] error = new string[1];
error[0] = "error";
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.ipcounter.de/stats.php?u=" + id.ToString() + "&a=balken");
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
html = sr.ReadToEnd();
sr.Close();
sr.Dispose();
res.Close();
}
catch
{
Trys++;
if (Trys < ErrorTry)
{
Last30Days(id);
return error;
}
else
{
Trys = 0;
return error;
}
}
RegExSolve Solver = new RegExSolve(html);
string[] Days = Solver.Stats30Days();
if (Days.Length != 128)
{
Trys++;
if (Trys < ErrorTry)
{
Last30Days(id);
return error;
}
else
{
Trys = 0;
return error;
}
}
else
{
int count = 0;
foreach (string item in Days)
{
Days[count] = item.Replace("<strong>", "").Replace("</strong>", "").Replace("<td class=\"col1\" style=\"text-align: right;\">", "").Replace("</td>", "").Replace("<td class=\"col0\">", "").Replace("<td class=\"col1\" style=\"text-align: center\">", "").Replace("<td class=\"col0\" style=\"text-align: center\">", ""); ;
count++;
}
Trys = 0;
return Days;
}
}
public DataTable Last30DaysDataTable(long id)
{
DataTable Stats = new DataTable("30TageRueckblick");
DataColumn[] ipcColumns = new DataColumn[4];
ipcColumns[0] = new DataColumn("Tag");
ipcColumns[1] = new DataColumn("Datum");
ipcColumns[2] = new DataColumn("UniqueVisits");
ipcColumns[3] = new DataColumn("Hits");
Stats.Columns.AddRange(ipcColumns);
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.ipcounter.de/stats.php?u=" + id.ToString() + "&a=balken");
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
html = sr.ReadToEnd();
sr.Close();
sr.Dispose();
res.Close();
}
catch
{
Trys++;
if (Trys < ErrorTry)
{
Last30Days(id);
Stats.Reset();
ipcColumns = new DataColumn[4];
ipcColumns[0] = new DataColumn("Wochentag");
ipcColumns[1] = new DataColumn("Datum");
ipcColumns[2] = new DataColumn("UniqueVisits");
ipcColumns[3] = new DataColumn("Hits");
Stats.Columns.AddRange(ipcColumns);
DataRow dr = Stats.NewRow();
dr[0] = "Error";
dr[1] = "Error";
dr[2] = "Error";
dr[3] = "Error";
return Stats;
}
else
{
Trys = 0;
Stats.Reset();
ipcColumns = new DataColumn[4];
ipcColumns[0] = new DataColumn("Wochentag");
ipcColumns[1] = new DataColumn("Datum");
ipcColumns[2] = new DataColumn("UniqueVisits");
ipcColumns[3] = new DataColumn("Hits");
Stats.Columns.AddRange(ipcColumns);
DataRow dr = Stats.NewRow();
dr[0] = "Error";
dr[1] = "Error";
dr[2] = "Error";
dr[3] = "Error";
return Stats;
}
}
RegExSolve Solver = new RegExSolve(html);
string[] Days = Solver.Stats30Days();
if (Days.Length != 128)
{
Trys++;
if (Trys < ErrorTry)
{
Last30Days(id);
Stats.Reset();
ipcColumns = new DataColumn[4];
ipcColumns[0] = new DataColumn("Wochentag");
ipcColumns[1] = new DataColumn("Datum");
ipcColumns[2] = new DataColumn("UniqueVisits");
ipcColumns[3] = new DataColumn("Hits");
Stats.Columns.AddRange(ipcColumns);
DataRow dr = Stats.NewRow();
dr[0] = "Error";
dr[1] = "Error";
dr[2] = "Error";
dr[3] = "Error";
return Stats;
}
else
{
Trys = 0;
Stats.Reset();
ipcColumns = new DataColumn[4];
ipcColumns[0] = new DataColumn("Wochentag");
ipcColumns[1] = new DataColumn("Datum");
ipcColumns[2] = new DataColumn("UniqueVisits");
ipcColumns[3] = new DataColumn("Hits");
Stats.Columns.AddRange(ipcColumns);
DataRow dr = Stats.NewRow();
dr[0] = "Error";
dr[1] = "Error";
dr[2] = "Error";
dr[3] = "Error";
return Stats;
}
}
else
{
int count = 0;
while (count < 128)
{
string item1 = Days[count].Replace("<strong>", "").Replace("</strong>", "").Replace("<td class=\"col1\" style=\"text-align: right;\">", "").Replace("</td>", "").Replace("<td class=\"col0\">", "").Replace("<td class=\"col1\" style=\"text-align: center\">", "").Replace("<td class=\"col0\" style=\"text-align: center\">", ""); ;
string item2 = Days[count + 1].Replace("<strong>", "").Replace("</strong>", "").Replace("<td class=\"col1\" style=\"text-align: right;\">", "").Replace("</td>", "").Replace("<td class=\"col0\">", "").Replace("<td class=\"col1\" style=\"text-align: center\">", "").Replace("<td class=\"col0\" style=\"text-align: center\">", ""); ;
string item3 = Days[count + 2].Replace("<strong>", "").Replace("</strong>", "").Replace("<td class=\"col1\" style=\"text-align: right;\">", "").Replace("</td>", "").Replace("<td class=\"col0\">", "").Replace("<td class=\"col1\" style=\"text-align: center\">", "").Replace("<td class=\"col0\" style=\"text-align: center\">", ""); ;
string item4 = Days[count + 3].Replace("<strong>", "").Replace("</strong>", "").Replace("<td class=\"col1\" style=\"text-align: right;\">", "").Replace("</td>", "").Replace("<td class=\"col0\">", "").Replace("<td class=\"col1\" style=\"text-align: center\">", "").Replace("<td class=\"col0\" style=\"text-align: center\">", ""); ;
DataRow datrow = Stats.NewRow();
datrow[0] = item1;
datrow[1] = item2;
datrow[2] = item3;
datrow[3] = item4;
Stats.Rows.Add(datrow);
count = count + 4;
}
Trys = 0;
return Stats;
}
}
public void Last30DaysGridView(DataGridView datagridview_name, long IPcounterID)
{
datagridview_name.Rows.Clear();
string[] StatsTage = Last30Days(IPcounterID);
if (datagridview_name.ColumnCount != 4 || datagridview_name.Columns[0].HeaderText != "Tag" || datagridview_name.Columns[1].HeaderText != "Datum" || datagridview_name.Columns[2].HeaderText != "Unique" || datagridview_name.Columns[3].HeaderText != "Hits")
{
datagridview_name.Columns.Clear();
datagridview_name.Columns.Add("Tage", "Tag");
datagridview_name.Columns.Add("Datum", "Datum");
datagridview_name.Columns.Add("Unique", "Unique");
datagridview_name.Columns.Add("Hits", "Hits");
}
datagridview_name.AllowUserToAddRows = false;
datagridview_name.AllowUserToDeleteRows = false;
datagridview_name.AllowUserToResizeColumns = false;
datagridview_name.AllowUserToResizeRows = false;
datagridview_name.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader;
datagridview_name.BorderStyle = BorderStyle.Fixed3D;
datagridview_name.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
datagridview_name.MultiSelect = false;
datagridview_name.ReadOnly = true;
datagridview_name.ScrollBars = ScrollBars.Vertical;
datagridview_name.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
datagridview_name.ShowCellToolTips = false;
datagridview_name.ShowEditingIcon = false;
if (StatsTage[0] != "error")
{
int typec = 1;
int rowc = 0;
datagridview_name.Rows.Add();
foreach (string item in StatsTage)
{
if (typec == 5)
{
datagridview_name.Rows.Add();
typec = 1;
rowc++;
}
if (typec == 1)
{
datagridview_name.Rows[rowc].Cells[0].Value = item;
}
if (typec == 2)
{
datagridview_name.Rows[rowc].Cells[1].Value = item;
}
if (typec == 3)
{
datagridview_name.Rows[rowc].Cells[2].Value = item;
}
if (typec == 4)
{
datagridview_name.Rows[rowc].Cells[3].Value = item;
}
typec++;
}
}
else
{
datagridview_name.Columns.Clear();
datagridview_name.Columns.Add("Tage", "Error");
datagridview_name.Columns.Add("Datum", "Error");
datagridview_name.Columns.Add("Unique", "Error");
datagridview_name.Columns.Add("Hits", "Error");
}
}
}
}
RegExSolve.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace MyStats
{
class RegExSolve
{
string HTML;
public RegExSolve(string html)
{
this.HTML = html;
}
public string[] StatsOnline()
{
Regex RegExPattern = new Regex(@"((<td width=""80"">Online:</td>\n <td align=""right"" width=""70""><span style=""font-size: 12px;""><strong>)+[0-9]+)");
MatchCollection ResultCollection = RegExPattern.Matches(this.HTML);
string[] Results = new string[ResultCollection.Count];
for (int x = 0; x < ResultCollection.Count; x++)
Results[x] = ResultCollection[x].ToString();
return Results;
}
public string[] StatsAll()
{
Regex RegExPattern = new Regex(@"((<td>Seitenaufrufe:</td>\n <td align=""right""><span style=""font-size: 12px;""><strong>)+(.)*[0-9]+(.)*)");
MatchCollection ResultCollection = RegExPattern.Matches(this.HTML);
string[] Results = new string[ResultCollection.Count];
for (int x = 0; x < ResultCollection.Count; x++)
Results[x] = ResultCollection[x].ToString();
return Results;
}
public string[] StatsUniqueAll()
{
Regex RegExPattern = new Regex(@"((<td width=""80"">Besucher:</td>\n <td align=""right"" width=""70""><span style=""font-size: 12px;""><strong>)+(.)*[0-9]+(.)*)");
MatchCollection ResultCollection = RegExPattern.Matches(this.HTML);
string[] Results = new string[ResultCollection.Count];
for (int x = 0; x < ResultCollection.Count; x++)
Results[x] = ResultCollection[x].ToString();
return Results;
}
public string[] Stats30Days()
{
Regex RegExPattern = new Regex(@"(((<td class=""col0"">)+((Mo,)|(Di,)|(Mi,)|(Do,)|(Fr,)|(<strong>Sa</strong>,)|(<strong>So</strong>,))+(</td>)+)|((<td class=""col1"" style=""text-align: right;"">)+[0-9.]+(</td>)+)|((<td class=""col1"" style=""text-align: center"">)+[0-9.]+(</td>)+)|((<td class=""col0"" style=""text-align: center"">)+[0-9.]+(</td>)+))");
MatchCollection ResultCollection = RegExPattern.Matches(this.HTML);
string[] Results = new string[ResultCollection.Count];
for (int x = 0; x < ResultCollection.Count; x++)
Results[x] = ResultCollection[x].ToString();
return Results;
}
}
}
Noch eine kleine Anmerkung zum Schluss - das ist das erste Snippet, was ich in der Form irgendwo poste. Sollten mir Fehler unterlaufen sein, oder ihr habt generell Verbesserungsvorschläge, dann bin ich natürlich jederzeit für (konstruktive) Kritik offen!
Liebe Grüße,
ein blutiger_anfänger
Schlagwörter: ipcounter.de regex statistik
Ich hab's jetzt nicht ausprobiert, aber müsste es nicht reichen, wenn du entweder ein @ vor deinen Statement-String setzt bzw. vier \ nimmst?
also so:
string statement = @"SELECT DISTINCT M_Mieter.MI_Name1,M_Mieter.MI_Vorname1,M_Mieter.MI_Straße,M_Mieter.MI_PLZ, M_Mieter.MI_Ort, M_Mieter.MI_Mail FROM M_Mieter WHERE M_Mieter.MI_Nummer IN (SELECT tblMieter.MI_Nummer FROM tblMieter IN '\\Master\D\Villa\Daten\Daten.mdb' WHERE tblMieter.MI_MA_zlr = 47 AND tblMieter.MI_OB_zlr = 53)";
//bzw
string statement = "SELECT DISTINCT M_Mieter.MI_Name1,M_Mieter.MI_Vorname1,M_Mieter.MI_Straße,M_Mieter.MI_PLZ, M_Mieter.MI_Ort, M_Mieter.MI_Mail FROM M_Mieter WHERE M_Mieter.MI_Nummer IN (SELECT tblMieter.MI_Nummer FROM tblMieter IN '\\\\Master\\D\Villa\\Daten\\Daten.mdb' WHERE tblMieter.MI_MA_zlr = 47 AND tblMieter.MI_OB_zlr = 53)";
Es liegt wohl am Vollbildmodus, welcher nicht auf allen Rechnern funktioniert, wo IMHO das Seitenverhältnis dran Schuld ist. Ich schalte ihn in der neuen Version aus.
Das kann sein... Ich fahr' momentan 'ne Auflösung von 1680*1050px.
Wahrscheinlich würd's jetzt sogar klappe, aber meine Grafikkarte an der Workstation hier hat mich soeben disqualifiziert... Naja, dann werd ich's nachher mal an nem anderen Rechner testen...
Hab mir die aktuelle Version gerade auch mal aus eurem Forum gezogen, aber musste leider feststellen, dass ich nichtmal bis zum Menü komme...
XNA 3.0 und .NEt Framework 3.5 SP1 sind drauf...
Beim ersten Versuch schien er noch das Menü laden zu wollen und jeder weitere Versuch führte zum sofortigen Absturz...
Screen ist im Anhang. Wenn ihr den komplette Fehlerbericht wollt, dann sagt nochmal bescheid, dann kann ich den auch gerne posten.
liebe Grüße,
ein blutiger_anfänger
Entschuldige, dass es doch etwas länger gedauert hat, aber ich habe die letzten Tage keine Zeit gefunden...
Deine Uhr läuft jetzt soweit. Ich habe dir das Projekt mal mit angehängt, damit du dir alles nochmal anschauen kannst.
Im wesentlichen habe ich nicht mehr viel dran geändert. Ich habe lediglich die
Thread.Sleep(10);
entfernt, da sie durch das einsetzen, des Timers unnötig sind und ganz wichtig, der entscheidene Punkt - ich habe beim eintreten des Timer-Tick-Events, den Timer angehalten, und ihn erst ganz am Ende wieder gestartet.
Das hat folgenden Grund, da das Tick-Event sonst greift, bevor alle Zeichen gezeichnet sind und es so sein kann, dass nicht immer alle Zeichen richtig angezeigt werden...
Ansonsten wüsste ich grad nicht, was ich noch groß geändert habe...
Projekt liegt im Anhang - viel Spaß damit!
liebe Grüße,
ein blutiger_anfänger 😉
Macht nichts 😉 Es wird dich auch nicht nerven... Ist eh nur für mich und 2-3 andere Leute, doch ohne die Interaktion, auf die das Form hinweißt ist die Effektivität gleich 0, also macht's schon Sinn, dass das Form nicht irgendwo hingezogen/verteckt wird und man vergisst zu "interagieren". 😉
Irgendwie scheint mich heute das Glück mal wieder verlassen zu haben, oder ich hau' einfach die falschen Tags in Google...
Ich habe eine kleines Form (245px*151px), dass unten recht als Statusfenster angezeigt werden soll, bis der User ein weiteres, von mir festgelegtes Event auslöst.
Gut, gut - die positionierung bekomm ich hin, jedoch soll der User das Form nicht verschieben können. Ich finde nun aber leider keine Property in der ich festlegen kann, dass das Form nicht verschoben werden kann.
Meine momentane Notlösung sieht wie folgt aus:
private void FormCaptcha_LocationChanged(object sender, EventArgs e)
{
Rectangle r = Screen.PrimaryScreen.WorkingArea;
this.Location = new Point(r.Width - 245, r.Height - 151);
}
Sprich, wenn der User das Form verschiebt, wird es wieder an seinen Platz gerückt. Das sieht dank ständigem aufrufen der PaintMethode des Forms aber nicht gerade schick aus...
Ich hatte auch schon überlegt einfach das MouseDown-Event abzufangen, sodass der User das Form erst garnicht "packen" kann, doch in den MouseEvents scheint es sowas wie
e.Handled = true;
ja leider auch nicht zu geben...
Ich hoffe ihr könnt mir helfen eine elegantere Lösung zu finden.
Liebe Grüße,
ein blutiger_anfänger 😉
Hast du das Problem mit den Nullen hinbekommen?
Wenn nicht schau ich da nochmal drüber, weil ich das heute morgen nicht mehr geschafft hab. Bloß wär' ja blöde, wenn ich mir da jetzt die Arbeit mache und du hast die Lösung längst...
Das mit dem Hänger lässt sich leicht lösen. Füge mal einen Timer hinzu mit einem Intervall von (logischerweise) 1 Sekunde.
Dann baust du in das onclick Event von button2
timer1.start();
ein.
In das Tick-Event vom Timer haust du alles, was du vorher im click-event des button2 hattest.
Durch die for-Schleife die du vorher verwendet hast ist es logisch das das GUI nicht mehr ansprechbar ist, weil der Thread für das GUI voll ausgelastet ist, da die Schleife dein Form voll auslastet. Durch den Timer trennst du das GUI einigermaßen vernünftig von deiner Zeichenerei... 😉
Ok, auch wenn ich das Problem mit dem Webrequest jetzt gelöst habe, würd's mich immernoch interessieren, wie/ob man solche Dialoge automatisieren kann 😉
So nun klappts endlich! An dieser Stelle vielen Dank an Gordon Breuer der mir mit folgendem Artikel (http://gordon-breuer.de/post/2009/01/05/Twitter-Fehler-417-(Expectation-Failed).aspx) sehr weitergeholfen hat!
Es fehlte nur ein "simples" (darauf muss man erstmal kommen!)
System.Net.ServicePointManager.Expect100Continue = false;
vor den HTTPrequest...
Liebe Grüße,
ein blutiger Anfänger
Guten Morgen!
Da mir der Login über reine HTTPrequests nicht glücken will (HttpWebRequest POST - Login Problem) bin ich weiterhin auf das WebbrowserControl angewiesen. Ich möchte gern eine Bild speichern, was nur im eingeloggten Zustand richtig angezeigt wird. Die Url aus dem Document.InnerHtml herauszusuchen bringt mir nichts, da ich ja dann wieder das Problem mit den Cookies habe.
Wenn ich jedoch die Seite über ShowSaveAsDialog() speichere, dann klappts wunderbar.
Jedoch wollte ich eigentlich keine User Interaktion mit drin haben und Frage euch nun, ob es möglich ist irgendwo einzusehen, was bei einem DialogResult.Ok ausgeführt wird um so den Dialog zu umgehen und das Speichern zu automatisieren...
Bzw. ob es möglich ist die entsprechenden Parameter (Speicherort, Dateityp) beim Aufruf schon mitzugeben und dann ein Dialogresult zu "provozieren".
liebe Grüße,
ein blutiger Anfänger
Ich danke schonmal für die Antwort! Die Grundfunktionalität ist nun soweit gegeben.
Jedoch stehe ich nun vor einem weiteren Problem. Gibt es fertige Methoden/Funktionen um das zuverschiebene Control beim ziehen anzuzeigen? So wie die Icons auf dem Windows Desktop?
liebe Grüße,
ein blutiger Anfänger
Hallo liebe myCSharpler,
ich bräuchte mal wieder eure Unterstützung. Und zwar geht es um folgendes. Ich habe einen SplitContainer, der in einem Panel 5 Buttons enthält und im andere Panel ein Listview.
Nun möchte ich die Buttons per Drag and Drop über das Listview ziehen können und dann testweise einfach erstmal ein Item mit dem Namen des Buttons erstellen.
Leider habe ich gerade einfach 0-Ansatz und weiß nicht wirklich, wo ich anfangen soll.
Ich habe mcih schon ein wenig umgeschaut, aber die meisten Sachen die ich gefunden habe, waren entweder viel zu komplex, oder nur für listviewItem per Drag and Drop in ein anderes Listview.
Ich würde mich über jeden Denkanstoß/jede Hilfe freuen!
liebe Grüße,
ein, was d'n'd angeht besonders, blutiger anfänger 😉
Einen wunderschönen Sonntag,
ich zerbrech mir hier gerade den Kopf. Ich möchte per HttpWebRequest Daten in einem geschützten Bereich anfordern, doch ich komme nicht an dem Login vorbei.
Ich bekomme immer folgende Meldung, wenn ich die POST-Variablen versende:
Der Remoteserver hat einen Fehler zurückgegeben: (417) Expectation Failed.
Vielleicht findet ja jemand von euch den Fehler...
Meine Code bis jetzt:
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.jappy.de");
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
string html = string.Empty;
string ts = string.Empty;
string key = string.Empty;
//Hole Quelltext der Seite im die Parameter der HiddenInputs zu holen für die
//Post-Variable
req = (HttpWebRequest)HttpWebRequest.Create("https://www.jappy.de/password");
req.CookieContainer = cookieContainer;
req.Method = "GET";
req.UserAgent = "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 (.NET CLR 3.5.30729)";
res = (HttpWebResponse)req.GetResponse();
sr = new StreamReader(res.GetResponseStream());
html = sr.ReadToEnd();
ts = html.Substring(html.IndexOf("login[ts]\" value=\"") + 18, 10);
key = html.Substring(html.IndexOf("login[key]\" value=\"") + 19, 32);
//Setze die Post-Variable zusammen
string loginData = "login%5Bts%5D=" + ts + "&login%5Bkey%5D=" + key + "&login%5Bu%5D=" + user + "&login%5Bp%5D=" + pass + "&Submit=login";
// Logge ein
req = (HttpWebRequest)HttpWebRequest.Create("https://www.jappy.de/password");
req.CookieContainer = cookieContainer;
req.Method = "POST";
req.KeepAlive = true;
req.Referer = "https://www.jappy.de/password";
req.UserAgent = "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 (.NET CLR 3.5.30729)";
req.ContentType = "application/x-www-form-urlencoded";
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] loginDataBytes = encoding.GetBytes(loginData);
req.ContentLength = loginDataBytes.Length;
MessageBox.Show(req.ContentLength.ToString());
Stream stream = req.GetRequestStream();
stream.Write(loginDataBytes, 0, loginDataBytes.Length);
stream.Close();
res = (HttpWebResponse)req.GetResponse();
// Überprüfe ob eingeloggt
req = (HttpWebRequest)HttpWebRequest.Create("http://www.jappy.de");
req.CookieContainer = cookieContainer;
req.Method = "GET";
req.UserAgent = "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 (.NET CLR 3.5.30729)";
res = (HttpWebResponse)req.GetResponse();
sr = new StreamReader(res.GetResponseStream());
html = sr.ReadToEnd();
sr.Close();
if (html.Contains("Mein Profil"))
{
MessageBox.Show("login ok");
}
else
{
MessageBox.Show("login error");
}
Das originale Form sieht so aus:
[php]
<form method="post" action="/password" id="login" onsubmit="javascript:ssl();" accept-charset="UTF-8">
<input name="login[ts]" value="1234700129" type="hidden">
<input name="login[key]" value="a2cbb8a9d8c0a9dab89ec8e24014e8a5" type="hidden">
<div class="libo">
<div style="height: 10px;"></div>
<div style="text-indent: 8pt;">Login:</div>
</div>
<div class="lib">
Mitgliedsname:<br><input name="login++" class="libf" type="text"><br>
Passwort:<br><input name="login[p]" class="libf" type="password"><input name="Submit" value="login" type="submit"><br>
<a href="/password" class="ql" style="font-size: 9px;">Passwort vergessen?</a><br>
<input id="ssl_login" checked="checked" type="checkbox"><a href="/infos/ssl/" class="ql" style="font-size: 10px; font-family: arial;">mit SSL-Verschlüsselung</a><br>
</div>
</form>
[/php]
und der httprequest laut livehttpheaders so:
https://www.jappy.de/password
POST /password HTTP/1.1
Host: www.jappy.de
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: https://www.jappy.de/password
Cookie: __gads=ID=dd83110ec66f23f3:T=1234630405:S=ALNI_MZAJXQTJ0smQXM4Aaycw_jUzC4aGg; __utma=70291851.1543608365.1234630404.1234630404.1234697006.2; __utmz=70291851.1234630404.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); gd=62549424; __utmb=70291851; __utmc=70291851; ad=a%253A1%253A%257Bs%253A9%253A%2522adtigerfs%2522%253Ba%253A2%253A%257Bs%253A1%253A%2522a%2522%253Bi%253A5%253Bs%253A1%253A%2522z%2522%253Bi%253A1234699269%253B%257D%257D
Content-Type: application/x-www-form-urlencoded
Content-Length: 145
login%5Bts%5D=1234699268&login%5Bkey%5D=0f5b56424c57a3c88d7d177d1749901d&login%5Bu%5D=raffiausgoslar&login%5Bp%5D=Porsche01603543657&Submit=login
HTTP/1.x 200 OK
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
Set-Cookie: SID=4a236761177c26a19e9c9bf567975885; path=/; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Encoding: gzip
Vary: Accept-Encoding
Date: Sun, 15 Feb 2009 12:01:34 GMT
Server: lighttpd
ich hoffe ihr könnt mir helfen!
liebe Grüße,
Raffi
Dann würd' ich doch mal glatt behaupten, dass der Server vielleicht einfach mal wirklich nciht erreichbar war... 😁
Hallo jauny,
hast du schon mal probiert einen UserAgent mitzuschicken?
webRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5";
liebe Grüße,
der blutige_anfänger
Um welche Seite handelt es sich denn, von der du den Quelltext haben willst? Dann schau ich da mal rüber!
Da müsste es zwei Möglichkeiten geben. Entweder du nimmst die zum Beispiel das Plugin Firebug (für'n Firefox) und analysierst die HTTP Header und Aufrufe und versuchst die auch von Hand zu senden, in der Hoffnung, dass du als Response den Quellcode bekommst... Oder du rufst die Seite in einem WebbrowserControl auf, wartest auf "DocumentCompleted" und holst die den Quelltext dann über "Webbrowser.DocumentText", da dies alles umfasst, sprich auch deinen "neuen Frame" der sich nur im DOM befindet...
...Access wäre da noch. setzt aber Office vorraus...
Also wenn ich mich nicht irre, dann brauchen die Clients am Ende doch gar kein Office. Reicht es nicht, wenn du dir mit Office einmal eine .mdb anlegst und die dann mitgibst? Auslesen und beschreiben läuft doch auch so, ohne das man Office haben muss.
Funktioniert 1A! Ich bedanke mich wie immer ganz herzlich!
ProcessStartInfo pinfo = new ProcessStartInfo();
pinfo.WindowStyle = ProcessWindowStyle.Hidden;
pinfo.FileName = "notepad";
Process.Start(pinfo);
Liebe Grüße,
ein blutiger Anfänger
Doofe Frage, aber hast du's schonmal ohne continue; probiert?
Also so:
foreach (DataRow row in archivDatas.Rows)
{
try
{
archiv.ImportRow(row);
archivAdapter.Update(archiv);
}
catch (SqlException ex)
{
}
}
Hallo liebe myCSharpler,
ich bin auf der Suche nach einer Lösung, wie ich aus meinem Programm heraus andere Anwendungen im Hide starten kann.
Bis jetzt starte ich die Anwendung:
Process.Start("iexplore", "http://192.168.2.1/cgi-bin/connect.exe");
und verstecke sie dann wie folgt:
private const int SW_HIDE = 0;
[DllImport("User32")]
private static extern int ShowWindow(int hwnd, int nCmdShow);
int hWnd;
private void timer3_Tick(object sender, EventArgs e)
{
Process[] pp = Process.GetProcessesByName("iexplore");
foreach (Process p in pp)
{
hWnd = p.MainWindowHandle.ToInt32();
ShowWindow(hWnd, SW_HIDE);
}
}
Gibt es eine Möglichkeit das Fenster direkt beim Starten in den Hide-Modus zu versetzen?
liebe Grüße,
ein blutiger Anfänger
ich danke dir! ist mir nicht schlimm drum - ich nutze eh nur firefox, außer vielleicht mal zum testen von homepages und da das projekt ausschließlich für mich ist, passt das schon!
Wenn ich die Lösung so betrachte, dann hatt' ich sie sogar fast schon... Hat nur das "GetFolderPath" gefehlt. 😁
Hallo liebe my CSharpler,
ich würde gerne wissen, wie man alle Cookies löschen kann, auf die das Webbrowsercontrol Zugriff hat. Ich hoffe ihr könnt mir helfen!
Liebe Grüße,
ein blutiger Anfänger
Ich danke dir für die schnelle Antwort. Haut alles wunderbar hin mit SelectionStart - hätt' ich auch früher draufkommen können, dachte bloß wenn ich nicht's markiert hab gibt's auch kein SelectionStart. 😉
Was die Sache mit dem "Anfängerfehler" angeht lass ich mich natürlich auch gern belehren.
Liebe Grüße,
ein blutiger Anfänger
Hallo erstmal,
ich bin auf der Suche nach einer Möglichkeit die Postion des Cursors in einer Richtextbox auszulesen und wieder zu setzen.
Folgendes Problem. Ich möchte, dass bestimmt Wörter, sollten sie eingetippt werden in der Box, Rot angezeigt werden. Das klappt auch schon ganz gut.
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
if (richTextBox1.Text.Contains("#Uploadtitel#") == true)
{
richTextBox1.Select(richTextBox1.Text.IndexOf("#Uploadtitel#"), 13);
richTextBox1.SelectionColor = Color.Red;
}
richTextBox1.DeselectAll();
}
Wenn ich jetzt jedoch weiterschreiben will, springt er jedes mal mit dem Cursor hinter das Wort. Logisch, da nach dem DeselectAll(); der Cursor hinter dem letzten markierten Wort ist. Das macht ein Arbeiten leider unmöglich. Nun dachte ich mir ich frage vor dem Markieren der entsprechenden Wörter die Cursor Postion ab und setze den Cursor nach dem DeselectAll(); wieder an seine ursprängliche Position.
Jedoch hab ich keinen schimmer, wie ich die Position auslesen/setzen kann.
Ich hatte zwar auch schon das hier gefunden: http://msdn.microsoft.com/en-us/library/system.windows.controls.richtextbox.caretposition.aspx aber das ist nur für Vista und da ich mit XP arbeite bringt mich das leider auch nicht weiter.
Ich hoffe die Problematik ist ersichtlich und ihr könnt mir helfen.
Liebe Grüße,
ein blutiger Anfänger
Danke für die Antwort! Ich werd mich dann mal mit der Alternative beschäftigen 😉
Hallo liebe Community,
ich bin jetzt schon einige Zeit am Suchen, aber finde irgendwie nicht das, was ich suche. Und zwar möchte ich die einzelnen Items einer Combobox unterschiedlich formatieren. Sprich - Item[0] in Bold, Item[1] in Italic, etc...
Die Combobox selber lässt sich ja mit Font formatieren, aber wie stelle ich es an nur einzelne Items der Combobox zu formatieren?
Ich hoffe ihr könnt mir helfen.
Liebe Grüße,
ein blutiger Anfänger
Danke dir! Problem gelöst - ich hab bei den Verweisen vergessen, die Infragistics Komponenten Local mitzugeben^^
Da hast du wohl recht - an die Namensgeschichte hab ich auch schon gedacht. Ich denke, ich werde das ganze Projekt wohl auch zeitnah umbenennen. (MultiVauZett Tools, etc.)
Habe grad nochmal probiert den Fehler rauszubekommen. Ich würde mich freuen, wenn nochmal jemand einen Blick drauf werfen könnte. (Sinnvollerweise nur Leute bei denen die "alte" Version nicht funktioniert.)
Liebe Grüße,
ein blutiger Anfänger
neue Version --> http://87.118.114.153/multivz-myCSharp-version.zip
Vielen Dank, dass bringt mich schonmal ein großes Stück weiter!
Die Komponente (Infragistics2.Win.UltraWinExplorerBar.v8.1) wird in meinem Programm für das Menü verwendet. Und ist teil einer "Erweiterung" der VS.
Mich wundert es bloß, dass es bei manchen läuft und bei manchen nicht. Normalerweise dürfte es doch entweder nur bei mir funktionieren, weil den Anderen die Komponente fehlt, oder bei Allen!?
Hallo liebe Community,
gleich vorneweg - Frohe Weihnachten! Ich habe ein kleines Programm geschrieben, dass den Umgang mit Schueler-, Studi- & MeinVZ erleichtern soll. Bei mir funktioniert auch alles prima, jedoch bekomme ich immer wieder Mails von Usern aus meinem Blog, dass sie das Programm nicht starten können.
Ich kann den Fehler leider nicht reproduzieren und wäre daher ein wenig auf eure Hilfe angewiesen.
Ich würde mich freuen, wenn ihr einfach mal probieren würdet das Programm zu starten und wenn es abschmiert, mir vielleicht ein paar Details geben könntet, da die Messagebox von Windows mit dem Fehlerbericht leider "readonly" ist und die Bloguser mir somit die Fehlermeldung nicht zukommenlassen können.
liebe Grüße,
ein blutiger Anfänger
Downloadlink --> http://87.118.114.153/blog/downloads/MultiVZ-Tools-V4.zip
Blogpost mit Information zum Programm --> http://www.net-blog.net/blog/index.php/2008/12/16/multivz-tools-version-4-ist-da/
Danke 😃 habe das mal übernommen, bringt zwar im Schnitt nur 0,3-0,5 Sekunden bei einer 26mb großen Datei, die in ca. 10-11 Blöcke gelegt wird, aber ist trotzdem ein Geschwindikeitszuwachs...
Ich danke euch schonmal ganz herzlich für die vielen Tipps! Ich habe probiert Alles umzusetzen.
Endergebnis für eine 55kb große .txt Datei braucht das Tool nun ~3,3 Sekunden statt ~27,5 Sekunden.
Der Code sieht nun so aus:
StreamReader sr = File.OpenText(textBox2.Text);
int Lines = 1;
int Part = 1;
string Save = textBox1.Text + "Scanhandler-" + Part.ToString() + ".txt";
StreamWriter sw = File.CreateText(Save);
string Line = sr.ReadLine();
while (Line != null)
{
if (Lines < numericUpDown1.Value + 1)
{
sw.WriteLine(Line);
}
else
{
sw.Close();
Part++;
Lines = 1;
Save = textBox1.Text + "Scanhandler-" + Part.ToString() + ".txt";
sw = File.CreateText(Save);
sw.WriteLine(Line);
}
Line = sr.ReadLine();
Lines++;
}
sw.Close();
sr.Close();
Wenn euch noch was einfällt/auffällt, dann lasst es mich wissen.
liebe Grüße,
ein blutiger Anfänger
Guten Abend liebe Gemeinde,
ich stehe momentan wieder vor einem kleinem Problem. Ich möchte .txt-Dateien zerteilen. Als Maß, wann geteilt werden soll, soll eine beliebige Anzahl an Zeilen genutzt werden.
Das ganze funktioniert auch alles Fehlerfrei, aber es ist extrem langsam! Bei einem 26mb großem Logfile, sitzt man schon eine gefühlte halbe Ewigkeit.
Im folgenden nochmal meine Lösung:
StreamReader sr = File.OpenText(textBox2.Text); //Logfile öffnen
int Lines = 1;
int Part = 1;
string Line = sr.ReadLine();
while (Line != null)
{
if (Lines < numericUpDown1.Value + 1) //numericUpDown1.Value == Zeilenanzahl bei der gesplittet werden soll
{
File.AppendAllText(textBox1.Text + "Scanhandler-" + Part.ToString() + ".txt", Line + "\r\n");
}
else
{
Part++;
Lines = 1;
File.AppendAllText(textBox1.Text + "Scanhandler-" + Part.ToString() + ".txt", Line + "\r\n");
}
Line = sr.ReadLine();
Lines++;
}
sr.Close();
ready = true;
Könnt ihr mir nen Tipp geben, wie ich das ganze effizienter handhaben könnte? Funktionieren tut es zwar, aber schön ist was anderes...
Liebe Grüße,
ein blutiger Anfänger
Mal ne ganz andere Idee. Wenn du dir ein zweites Projekt im VS anlegst und dort ein "unsichtbares" Formular erstellst, dass per Timer alle paar Sekunden im Taskmanager nach deiner Hauptapplikation sucht und sie, wenn sie nicht mehr vorhanden ist, löscht, sollte das ein wenig eleganter aussehen (der User bekommt keine CMD vorgesetzt) und das ist nicht so ne arg brutale "Hau-drauf"-Schleife wie deine Batch.
Die .exe des zweiten Projekt führst du dann einfach im Formclosing deiner ersten App aus.
So würde ich's lösen...
liebe Grüße,
ein blutiger Anfänger 😉
da gibts doch hier im board ein wunderschönes tutorial 😉[Artikel] Regex-Tutorial
vielleicht hilft dir das ja weiter 😉
Ich danke dir für die super ausführliche Antwort 🙂 Ich würd gern mal von dir als c# Guru, deine Meinung zu der Idee die Id im Metatag zu vergleichen, hören... Da sich meien Gallerie fast ausschließlich aus .jpegs zusammensetzt.
Danke für die Hinweise - da muss ich mir noch was schlaues einfallen lassen, weil dass das mit den jpegs so nicht ganz hinhaut musst ich grade auch feststellen... Die Shareware kommt eigentlich auch nicht in Frage...
Ich möchte eine große öffentliche Gallery in Form eines Homepage Projektes ansetzen. Den Usern sit es auch erlaubt weitere Bilder hinzuzufügen, welche jedoch erst von mir kontrolliert werden, ob sie gegen die Regeln verstoßen und ob das Bild vorhanden ist.
Ob ein Bild gegen die Regeln verstößt muss ich leider von Hand kontrollieren. Das wird mir kein Programm sagen können, ob das Bild pornographische Inhalte enthält, aber die Dupletten, welche bei einer großen Bilderanzahl schnell vorkommen, werde ich von Anhieb und auch kein User mal ebenso aus dem Gedächnis erkennen können.
Von daher bin ich halt grade auf der Suche nach einer Möglichkeit zu überprüfen, ob die neuen Bilder, schon in der Gallery vorhanden sind...
Die Algorithmen fallen denke ich mal bei der großen Bilderanzahl weg, vorallem, da die Software direkt per Remotedesktop auf dem Server laufen soll und ich diesem keine zusätzliche große Last zumuten möchte...
Somit bleibt mir nur die Spur mit den Metadaten, wenn ich das richtig verstanden hab...
Hat da eventuell jemand eine nützliches Tutorial bezüglich c# am Start?
liebe Grüße,
Raffi
edit://
ja ich bin des Googlen's mächtig 🙂 Nicht das mir hier gleich wer was alá google-ist-dein-freund postet 😉
Trotzdem hab ich immernoch Interesse an guten Tutorials oder vielleicht sogar nem Snippet...
das klingt doch mal super! ich danke euch für den schneller support!
Ich stehe momentan vor einem kleinem Problem. Ich habe nen Haufen Grafiken und Bilder... Viele doppelt, jedoch mit verschiedenen Dateinamen.
Wie stelle ich es am besten an, das alle doppelten gefunden werden? Also Bilder mit gleicher Größe und gleichem Titel unabhängig vom Dateinamen...
Gibt es da fertige Klassen für?
Mir fehlt grad einfach der Ansatz...
Liebe Grüße,
Raffi
hm ok...
hast du die chance nen eigenen smtp server aufzusetzen?
bzw. es gäbe da noch 'ne holzhammer methode, aber das wäre echt nicht schön. Einfach mit deiner Anwendung nen PHP Script anschreiben, das die PHPmail Funktion benutzt. Gut ist sicherlich auch ne Einstellungssache, aber normalerweise, sollte das hinhauen 🙂
nimm das kostenlose Paket von arcor.de 😉 Der SMTP hat zumiondest als ich ihn das letzzte mal genommen hat, wesentlich mehr verkraftet 🙂
hatte mich vor einiger zeit auch mal an solch einem Projekt versucht... Wer mag kanns sich ja mal anschauen... Leider nicht mehr ganz aktuell... Bastel grad an nem dicken Update - ansonsten wen's interessiert --> www.codecollectors.net
Ok, da lag wohl ein Missverständnis vor. Das Parsen sprich das Scritp hatte ich ausgeführt und dann bei Webbrowser.DocumentCompleted den Quelltext geparsed. Und genau das war Mist. Denn das DocumentCompleted Event tritt früher ein, als bis die Reaktion des Scripts, welches zuvor aufgerufen wurde. Ich prüfe nun in einem kurzen Intervall, ob das Ajaxelement schon geladen wurde und wenn ja parse ich mir dann den Quelltext...
Haut also doch alles hin. War einfach nur ein Logikfehler.
Liebe Grüße
und danke nochmals,
Raffi