Laden...
B
Borg myCSharp.de - Member
Berlin, Germany Dabei seit 23.08.2006 1.529 Beiträge
Benutzerbeschreibung

Forenbeiträge von Borg Ingesamt 1.529 Beiträge

18.01.2007 - 14:30 Uhr

Offensichtlich nicht, sonst würde es ja funktionieren...

18.01.2007 - 14:28 Uhr

Leite davon ein Control ab...

18.01.2007 - 14:15 Uhr

Das Problem ist, dass ein Service im Normalfall nicht unter einem Benutzeraccount läuft (genauer: kein anmeldbarer) und daher auch nicht auf dessen Mailbox zugreifen kann.
Daher musst du
a) das Programm als normales Programm starten,
b) den Dienst unter dem Nutzeraccount starten oder
c) im Dienst einen neuen Prozess oder Thread unter diesem Benutzer starten, der dann mit Outlook interagiert.

18.01.2007 - 14:10 Uhr

Bei mir sieht das Buch (PDF) so aus, wie im Anhang dargestellt.
Daher meine Frage: Ist das Absicht, oder stimmt bei mir etwas mit den Schriften nicht?
Der Adobe Reader zeigt mir als verwendete Schriften auch nur Arial, Courier New und Times New Roman an.

18.01.2007 - 14:00 Uhr

Würde ich ja, allerdings hat mir FormClosingEventArgs.CloseReason.WindowsShutDown immer gereicht. Daher werde ich wohl darauf verzichten. Zumal das hier nicht meine Frage ist...

18.01.2007 - 13:53 Uhr

Das ganze klingt in meinen Ohren ziemlich "unrund".
Ich würde es so formulieren:

Introduction

FormPrint enables you to hardcopy any control either to a printer or to an image file by the simple use of two static methods.
This might be helpfull for documentation and debugging reasons.
Any other solution I found in some disussion boards were often too large and too complicated to be of use.

Using the code

The code is written for NET 2.0. An adaption to NET 1.1 is described later on in this article.
The class resides in the namespace JThomas.Tools.
To hardcopy a control simply call one of the class' methods with the control specified.

Print( Control control )
Prints the specified control on the default printer with default settings

Print( Control control, bool PortraitOrientation )
Prints the specified control on the default printer using the specified orientation

Print( Control control, Margins myMargins )
Prints the specified control on the default printer using the specified margins

/// snap

Save( Control control )
Saves the specified control as an image in PNG format using a default filename

Save( Control control, string Filename )
Saves the specified control as an image in PNG format using the specified filename

/// snap

How it works

FormPrint creates a bitmap and makes the specified control using it as its canvas while painting.
The bitmap is then printed using a PrintDocument or saved using Image.Save

/// snap

Ich habe das jetzt mal abgebrochen, da ich das Gefühl habe, dass deine Komponente noch einiger Überarbeitung bedarf. So sind die ganzen Überladungen für Print sehr verwirrend. Eventuell wäre da eine eigene Parameter-Klasse sinnvoller.
Bei Save halte ich die Versionen ohne Angabe eines Dateinamens für relativ sinnlos.
Es erscheint mir auch etwas unlogisch, dass die statischen Methoden eine Instanz der eigenen Klasse erstellen und der Konstruktor die ganze Arbeit macht, nur um die erhaltende Bitmap zu drucken und das Objekt wieder zu vernichten. Das kann man doch einfach in eine Methode packen.
Desweiteren sollte deine Klasse nicht einfach eine ProgressBar einblenden, sondern Events zur Verfügung stellen.
Die Anpassung an .NET1.1 kannst du dir sparen, wenn du in deinem Code #if..#endif benutzt.

18.01.2007 - 13:10 Uhr

Wenn du für das PDF Kommentieren zulassen würdest, würde ich dir meine Kommentare direkt hineinschreiben. Dies alles abzutippen bzw. die Stellen hier zu beschreiben, ist mir aber zu aufwändig.

EDIT: Habe mich jetzt doch entschieden, das hier rein zu schreiben. Also keine Hektik, der nächste Post dauert jetzt etwas...

18.01.2007 - 12:59 Uhr

In Anbetracht des

WindowsShutDown - The operating system is closing all applications before shutting down. vermute ich mal, dass es WM_ENDSESSION bedeutet.
Das kann man allerdings mit einem winzigen Testprogramm herausfinden...

Egal wie es implementiert ist, die .NET-Variante hat in jedem Fall nicht die Freiheit wie die Win32-Version.

Na ja, das gilt dann wohl für das gesamte Framework...

18.01.2007 - 12:43 Uhr

Wenn es sich wirklich um Updates handelt, sollten diese mMn vom Client initiiert werden.
Du könntest jedem Update-Paket (gezippte neue Dateien) eine laufende Nummer (bzw. GUID und Datum) geben. Dann kann sich der Client melden, sagen welches (bzw. wann) Update er zuletzt bezogen hat und nachfragen ob neue da sind. Der Server schickt eine Liste mit neuen Updates und der Client lädt diese herunter (und kann auch unterbrochene Downloads fortsetzen). Dafür kann man eventuell sogar BITS nutzen.

Die Aktion von Server ausgehen zu lassen scheitert in den meisten Fällen wahrscheinlich an Routern und Firewalls.

18.01.2007 - 12:22 Uhr

Ich vermute mal, das Gerät versucht sich erst eine IP-Adresse per DHCP zu besorgen, anschließend per APIPA.
Pack also einen DHCP-Server in das Netz (ein kleiner SOHO-Router genügt). Dann kannst du über dessen DHCP-Einstellungen dem Gerät immer die gleiche IP-Adresse zuweisen lassen.
Alternativ haben die meisten netzwerkfähigen Geräte auch einen kleinen Webserver. über den du sie konfigurieren kannst. Du musst also mal ins Handbuch schauen, welche IP-Adressen sich das Gerät selbst gibt (APIPA) und versuchen diese im Browser anzusteuern.
Eventuell gibt es auch ein mitgeliefertes Tool, dass dir die Konfiguration über einen Rechner im gleichen Subnetz erlaubt.

18.01.2007 - 12:12 Uhr

Man könnte natürlich auch die Doku lesen und dabei auf das Event FormClosing stoßen, welches in seinen EventArgs CloseReason zur Verfügung stellt. Dies wiederum ist eine Auflistung:

FormClosingEventArgs.CloseReason
ApplicationExitCall - The Exit method of the Application class was invoked.
FormOwnerClosing - The owner form is closing.
MdiFormClosing - The parent form of this multiple document interface (MDI) form is closing.
None - The cause of the closure was not defined or could not be determined.
TaskManagerClosing - The Microsoft Windows Task Manager is closing the application.
UserClosing - The user is closing the form through the user interface (UI), for example by clicking the Close button on the form window, selecting Close from the window's control menu, or pressing ALT+F4.
WindowsShutDown - The operating system is closing all applications before shutting down.

17.01.2007 - 20:51 Uhr

Deswegen steht in der MSDN auch immer: "vorhanden in ...".
Das bedeutet nur, dass die Klasse die Definition dieser Methode/Property enthält, nicht, dass sie auch implementiert ist.

17.01.2007 - 12:22 Uhr

Die Laufzeit bleibt aber ungefähr die gleiche, da auch AddRange die Werte kopieren muss.

16.01.2007 - 21:06 Uhr

Was ist ein Framework? http://de.wikipedia.org/wiki/Framework
Wie entwickelt man ein Framework?

In dem man sich sehr sehr gründlich Gedanken macht, was man mit dem Framework erreichen soll, daraus dann eine Interface- und Klassenhierarchie entwickelt und diese anschließend in Code "gießt" und gründlich testet.

Inwelche Sprache entwickelt man ein Framework?

In jeder, die du magst. Vorzugsweise in einer, die der größte Teil der Anwender des Frameworks kann bzw. die dazu kompatibel sind. In .NET also mit jeder .NET-Sprache.

Gibt es dafür Tools?

Nur die üblichen mit einer verstärkten Beanspruchung des Denkorgans.

Wozu Frameworks?

Um Programmierern die Möglichkeit zu geben, in einer speziell auf die Anforderungen zugeschnittenen Umgebung kreativ zu werden.

EDIT: Toll, ich war als erster hier und mein Post erscheint als letzter. Ich muss wohl schneller tippen.

16.01.2007 - 20:52 Uhr

Nein.

herbivore meint das so:

Jedes Plugin stellt ein Event EnumeratePlugInsRequest sowie eine Methode EnumeratePlugIns zur Verfügung.
Der Plug-In-Manager abonniert EnumeratePlugInsRequest.

Will das Plug-In jetzt die Liste haben, feuert sie das Event. Im EventHandler ruft der Manager dann EnumeratePlugIns mit der Liste der Plug-Ins auf.

Meine Anpassung der Idee wäre, die Liste gleich in den EventArgs des Events zurückzugeben.

16.01.2007 - 20:45 Uhr

Dann könnte man die Plug-Ins doch auch über ein EventArg übergeben...

EDIT: Wobei ich mir gerade nicht sicher bin, ob es aus Gründen der Kapselung nicht besser ist, wenn ein Plug-In nicht die Möglichkeit hat, andere Plug-Ins zu enumerieren.

16.01.2007 - 20:32 Uhr

Sollte die Konfiguration der Plug-Ins nicht ins Hauptprogramm? Wenn die Konfiguration sonst irgendwie kompromittiert wird und du keine Plug-Ins mehr ausführen kannst, kannst du diese Situation auch nicht mehr beheben.
Du brauchst doch im Hauptprogramm nur einen Dialog mit allen gefundenen Plug-Ins. Diese musst du aktivieren und deaktivieren können (eventuell auch updaten). Für die Einstellungen kannst du ja ein Form aus dem Plug-In aufrufen.

16.01.2007 - 14:58 Uhr

Man kann zwar nicht erkennen, wo der Fehler auftritt, aber ich vermute mal, dass alle deine Threads wieder das gleiche Objekt (Instanz) benutzen...

16.01.2007 - 14:32 Uhr

Wie oben steht, kannst du mit ANSI-Encoding oder ASCII-Encoding in beide Richtungen konvertieren.

16.01.2007 - 14:17 Uhr

Ist in meinen Augen aber kein Bug, sondern falsch programmiert, da sich alle Threads eine (relativ) globale Variable line teilen. Dies kann natürlich nicht gut gehen.
Im anderen Beispiel hat ja jeder Thread eine lokale Variable (entspricht also dem o.g. ParametrizedThreadStart) und alles ist schick.

EDIT: Schon, wenn du die Schleife so umschriebst, sollte es funktionieren:

foreach (string line in lines)
  {
    ParametrizedThreadStart ts = delegate( object _line )
    {
      Thread.Sleep(r.Next(200));// zufällige dummy-latenz
      Console.WriteLine(_line as string);
    };

    Thread thread = new Thread(ts);
    thread.Start( line );

    threads.Add(thread);
  }
16.01.2007 - 14:10 Uhr

Voller Schrecken hab ich grad festgestellt dass ein char in c# 16bit hat.

Siehste, und alle, die kein reines lateinisches Alphabet benutzen (also eigentlich alle nicht englischsprachigen), freuen sich...

16.01.2007 - 14:06 Uhr

Klassische Race-Condition.
Wahrscheinlich hast du eine Variable, die dem Thread angibt, welche Zeile er sich nehmen soll.
Jetzt startest du zwei Threads, der erste inkrementiert die Variable, wird vom zweiten unterbrochen, der inkrementiert auch, dann (Reihenfolge egal) indizieren sie erst das Element. Dadurch hast du jetzt ein Element übersprungen und beide arbeiten auf dem gleichen.
Um dies zu vermeiden gibt es zwei Möglichkeiten:

  1. du synchronisierst den Zugriff auf die Variable und das Array per lock oder
  2. (besser) ausschließlich der Steuer-Thread bestimmt, welchen String der neu erstellte Thread abarbeitet, liest diesen aus und startet den Thread damit als Parameter (ParametrizedThreadStart).
16.01.2007 - 13:56 Uhr

Das Betriebssystem Windows setzt sich selbst aus vielen DLLs zusammen. So ist in "kernel32.dll" der Kernel (grundlegende, systemnahe Verwaltung), in "gdi32.dll" die graphischen Grundfunktionen, in "user32.dll" die Fensterverwaltung und Ein-/Ausgabesteuerung etc.
Die ersten DLLs werden von NTLoader beim Booten geladen.
Prinzipiell ist Windows ausschließlich mit diesen grundlegenden DLLs lauffähig.

Für verschiedene - aus betriebssystemtechnischer Sicht: erweiterte - Funktionen wie Oberfläche, Netzwerk o.ä. sind jetzt einige Anwendungsprogramme zuständig. Und "explorer.exe" ist ein solches Anwendungsprogramm. Es unterscheidet sich in nichts von anderen Programmen, außer dass es per default (falls der o.g. Schlüssel nicht gesetzt ist) als Shell gestartet wird. Dies führt zu einem Extra-Privileg, nämlich dass die Anwendung bei einer Terminierung durch eine Ausnahme automatisch neu gestartet wird.

Kurz gesagt: sämtliche Verwaltungsfunktionen sind in das eigentliche System integriert. "explorer.exe" stellt dir wirklich nur die Startleiste (inkl. Menü) und die ganzen Explorerfenster mit deren Funktionen (Suchen, Netzwerkumgebung, Systemsteuerung etc.) zur Verfügung.

16.01.2007 - 13:10 Uhr

Doch ist es. In den Nutzungsbedingungen jedes MMOGs (Massive Multiplayer Online Game = Zusammenfassung von Browserspielen wie ogame und Internetspielen wie World of Warcraft) steht eindeutig, dass eine Aktion immer von einem Menschen ausgelöst werden muss. Das Simulieren von Aktionen stellt einen Verstoß dar und kann mit Sperrung und Ausschluss geahndet werden.
Lies das noch mal nach.

Wenn du trotz meiner Warnung deinen Versuch weiter betreiben willst, habe ich dir oben shcon das Stichwort geliefert.

Desweiteren ist dein Argument, dass es nicht verboten sei, weil man es auch selbst machen könnte, wohl kaum ein zulässiges. Vor allem nicht, wenn explizit gefordert wird, dass man es selbst macht.
Wie wäre es, wenn du dir alternativ ein Programm schreibst, dass dich nur darüber informiert, wenn eine Aktion beendet ist und du die nächste starten kannst. Das ist zulässig.

16.01.2007 - 12:47 Uhr

Diese bedingte Zuweisung bietet aber manchmal Vorteile.
Da es sich nämlich um eine Zuweisung handelt, kann man damit viele sehr kurze Konstrukte programmieren.
Es wird zum Beispiel so etwas möglich:

string Ausgabe = String.Format( "{0} Übereinstimmung{1} gefunden.", num.ToString(), (num == 1) ? string.Empty : "en" );

Es gibt zwar nichts, was man ohne die bedingte Zuweisung nicht programmieren könnte, aber bedeutet sie gerade in solch kurzen alternativen Entscheidungen eine deutliche Code-Verkürzung, da man die Abfrage direkt in der Zuweisung machen kann und nicht alles in eine if-else-Abfrage umformulieren muss.

16.01.2007 - 12:35 Uhr

Na, möchte da wer in MMOGs cheaten?

Trotzdem: such mal im Forum nach SendMessage.

16.01.2007 - 12:33 Uhr

WaitForExit funktioniert mit jedem Prozess, WaitForInputIdle nur mit Prozessen mit message queue (Nachrichtenwarteschlange) - also im allgemeinen Forms.

16.01.2007 - 12:21 Uhr

Vielleicht wird der Treiber des GPS-Empfängers, der ja den virtuellen COM-Port erzeugt, erst durch TomTom gestartet?

16.01.2007 - 12:14 Uhr

Der Fehler ist doch eindeutig, da du nur ein einziges Objekt referenzierst:

rm.GetType().Assembly

.

rm ist bislang aber noch nicht erzeugt, daher kannst du auch nicht dessen Methode GetType() aufrufen. Verwende statt dessen typeof oder die statische Type.GetType().

15.01.2007 - 23:22 Uhr
private TcpListener server;

public void ListenerLoop()
{ 
   try
   {
      while( true ) 
      {
         TcpClient client = server.AcceptTcpClient();            
         Thread ConnectionThread = new Thread( new ParameterizedThreadStart( ConnectionHandler ));
         ConnectionThread.Start( client );
      }
   }
   catch(SocketException e)
   {
      // error handling
   }
   catch(InvalidOperationException e)
   {
      // Listener gestoppt
   }
}

private void ConnectionHandler( object obj )
{
   TcpClient client = obj as TcpClient;
   if (client == null)
   {
      return;
   }
   // handle request
   client.Close();
}

private void StartListener()
{
   server = // Listener erzeugen
   server.Start();
   Thread ListenerThread = new Thread( new ThreadStart( ListenerLoop ));
   ListenerThread.Start();
}

private void StopListener()
{
   server.Stop();
}

EDIT: Du verwendest zwar Sockets statt des TCPListener (wozu eigentlich?), aber das Prinzip ist das gleiche.

15.01.2007 - 23:08 Uhr

Ein Dienst wird immer dann benötigt, wenn

  1. eine Funktion auch ohne angemeldeten Benutzer zur Verfügung stehen soll oder
  2. ein angemeldeter Benutzer in dessen Funktionsweise nicht eingreifen darf oder
  3. die Funktion mehr Rechte benötigt, als ein angemeldeter Nutzer hat.

Ansonsten kann man ein reguläres Programm verwenden, welches man - wenn benötigt - per Autostart starten lassen kann.

15.01.2007 - 23:01 Uhr

Reparatur-Installation?

15.01.2007 - 12:47 Uhr

Pack in den Zurück-Button als onclick einfach "javascript:history.Back()".

EDIT: ohne das Leerzeichen. Dies wird hier im Forum aus Sicherheitsgründen eingefügt.

14.01.2007 - 17:58 Uhr

So etwas kannst du mit WebClient.DownloadFileAsync ganz einfach erreichen.

Aber: Werden die Downloads parallel auf einem Rechner gestartet, der nur über eine Verbindung ins Internet verfügt, werden die Anfragen schon beim Senden serialisiert. D.h., dein Server bekommt in kurzen Zeitabständen ganz viele Anfragen von einer einzigen IP.

Eine bessere Simulation wäre es, wenn der Server von verschiedenen Rechner (=verschiedene IPs) zeitnah abgefragt werden würde. Dazu müsstest du dein Programm aber auch auf jedem der Rechner laufen lassen.
So etwas kann man leichter über eine auf dem Server liegende HTML-Datei erreichen, in der ein JavaScript massiv mit dem Server interagiert.
Dann benötigst du keine Programme und ihr könnt einfach durch Aufrufen der richtigen URL im Browser (und damit ohne Installation) solange Clients hinzufügen, bis der Server in die Knie geht.

14.01.2007 - 17:49 Uhr

So ein ähnliches Problem gab es hier schon mal.
Die bessere Lösung ist es,das Timer-Objekt nach Ende seiner beabsichtigten Verwendung erneut zu referenzieren, damit der GC es nicht vorzeitig abräumt.
In einer WinForms-Klasse bietet sich dazu Closed an, in einer anderen Klasse deren Entprechung oder auch im Destruktor.
In jedem Fall reicht ein einfaches myTimer.Enabled = false; aus.

14.01.2007 - 17:26 Uhr

Leute ich weis nicht wie ihr mit euren PC's umgeht so das ihr die Fehler nicht bemerkt

Ich weiß ja nicht wie du mit deinem PC umgehst, dass du ständig Fehler hast. Ich habe seit vier Jahren keinen mehr...

aber ganz unabhängig davon die Sachen die ich gesagt habe könnte ich sogar beweisen.

Na da bin ich aber mal gespant. Gerade der Beweis dafür, dass die Fragmentierung Windows kaputt macht, würde mich sehr interessieren.

Ich finde als Entwickler sollte man wissen, dass nichts Perfekt ist

Full Ack.

und die Fehler die ich genannt habe sind eben nicht unmöglich.

Natürlich. Nichts ist unmöglich. Aber solange nicht einige quantenmechanisch extrem unwahrscheinliche Sachen eintreten, verhält sich eine Software streng deterministisch. Allerdings kann man die Fehlerfreiheit von Software nicht beweisen, so dass sie ganz deterministisch einen Fehler verursachen kann.

Viel unwahrscheinlicher ist deine Aussage dass die Windows Defragmentierung fehlerfrei läuft.

Wie bitte? Es ist unwahrscheinlicher, dass ein Programm fehlerfrei läuft, dass in sämtlichen - mittlerweile wahrscheinlich in die Milliarden gehenden - Durchläufen keinen mir bekannten Fehler verursacht hat?

Denn es liegt doch nahe das sogar die besten Programmen Fehler haben.

Hast du oben schon geschrieben. Nur kann man die integrierte Windows-Defragmentierung kaum als eines der besten Programme bezeichnen. Vielleicht als eines der buntesten und langsamsten.

Was wäre wenn ich jetzt so einen Fehler entdeckt hätte wäre das immer noch unsinn?

Wenn du einen entdeckt hättest. Hast du aber nicht. Und bei deiner Ignoranz wirst du auch nie die Ursache deiner Probleme finden, sondern immer nur an den Symptomen herumdoktern.
Ich steig auch nicht immer nur mit Fallschirm ins Flugzeug, weil ja die theoretische Möglichkeit besteht, dass ich einen Fehler entdecke, den alle Ingenieure übersehen haben. Bei genauerer Betrachtung sollte ich dann mein eigenes Flugzeug bauen.

Was meint ihr warum Microsoft immer wieder Patches rausbringt? Zum Spass?!

Nein, in den meisten Fällen um Sicherheitslücken zu schließen. Nur folgt aus dem fehlenden Beweis der Fehlerfreiheit nicht automatisch der Beweis eines Fehlers. Wenn mein Bremslicht am Auto kaputt ist, kann ich trotzdem noch bremsen. Die Fahrtauglichkeit besteht also noch, bloß die Sicherheit sinkt (Auffahrunfälle).

Abgesehen davon ist es seltsam das soviele hier im Forum gegen meine Behauptungen sind obwohl es doch so offensichtlich ist.

Komisch, dass Argument kenne ich doch irgendwoher...
Ach ja, jetzt fällst mir wieder ein. Die UFO-Jünger. Oder waren es die Evolutionsgegner?

Schaut mal in anderen Foren rein. Ständig werden Fehler berichtet die man verzwifelt zu lösen versucht.

Genau deswegen schaue ich in solche Foren nicht rein. Weil die Leute keine Ahnung haben und ihr System nur verschlimmbessern.

Die haben unter anderem mit der Registrierung zu tun oder Software die inkompatibel ist und und und...

Oder auch mit dem nicht funktionierenden Drucken, Scannen, Internet, Spiel, Porno und vieles andere mehr. Aber natürlich kann man das alles über einen Kamm scheren. Er muss bloß groß genug sein.

Damit will ich nicht sagen das Windows schlecht ist. Ich habe in diesem Thread nur eine Lösung gesucht um diese Probleme ein für alle mal zu beseitigen.

Und wir haben dir gesagt, dass einige Aussagen von dir nicht stimmen und andere Dinge einfach nicht realisierbar sind. In Vista sind einige dieser Problem ja beseitigt bzw. wurde der Versuch unternommen, das System vor dem Anwender zu schützen. Das sagt eigentlich schon alles.

Achja übrigens hat Mac OS X keine Registrierung und läuft laut vielen unabhängigen Quellen schnell und stabil. Selbst Programme mit verschiedenen Versionen können parallel benutzt werden und jetzt überlegt mal warum kann man das meistens unter Windows nicht? Genau Registry-Schlüssel oder Dateien die sich gleichen und an die selben Stellen im System gespeichert werden.

Ob ich jetzt in der Registry oder in irgendwelchen Konfig-Dateien etwas verstelle bleibt sich gleich.
Eventuell haben aber einfach nur deswegen weniger Leute Probleme mit MacOS, weill die Rumbastel-Fraktion (Marke: Geiz ist geil und blöd will man ja auch nicht sein) Windows benutzt...

Es ist natürlich immer das einfachste, die Schuld bei anderen zu suchen. Und ein Microsoft-Produkt ist automatisch schon mal böse.
Allein dadurch, dass du hier vehement versuchst, irgendwelche Aussagen zu verteidigen, die einfach falsch sind, zeigst du deutlich, wieviel Ahnung du von der betreffenden Thematik hast.

Die Windows NT Schiene ist seit jeher ein sehr stabiles Produkt. Das System stürzt eigentlich nur bei Treiber- oder Hardwarefehlern ab. Alles andere ist eine schlechte Konfiguration, die verhindert, dass das System wunschgemäß arbeitet.
Also: verwende kompatible, nicht übertaktete und gut gekühlte Hardware mit ordentlich getesteten Treibern (WHQL-zertifiziert) und dein System läuft einfach nur durch.
Windows die Schuld daran zu geben, dass sich jeder Crack und Keygen für irgendwelche runtergeladenen Spiele - dank einem Nutzer mit Admin-Rechten - im System verankert (und vielleicht noch schnell einem BotNet beitritt), ist einfach nur unfair.
Ich behaupte (auch unbewiesen), dass 99% aller nicht funktionierender Dinge in Windows nicht die Schuld des Systems sondern irgendwelcher Sch... sind, die der Benutzer angestellt hat (ganz oben auf der Liste: Tuning-Tipps).

Es wurde jetzt schon mehrfach gesagt, dass die Fragmentierung keine Fehler verursacht, sondern nur eine Verlangsamung des Systems.
In der Registry kann prinzipiell die COM-Registrierung durcheinander geraten. Allerdings trägt daran nicht Windows schuld, sondern irgendwelchen fehlerhaften Programme. Dazu gibt es aber die oben angeführten Registry-Cleaner.
Oder die Systemwiederherstellung. Oder die "Last Known Good"-Konfiguration. Oder das Backup in der Schreibtischschublade.

Aber da du wahrscheinlich eh der Meinung bist, dass du es besser weißt, wünsche ich dir viel Vergnügen bei deinen zukünftigen FlameWars und verabschiede mich hiermit aus dieser Diskussion.

Was mich angeht war das mein letzter Beitrag in diesem Thread.

dito.

14.01.2007 - 12:02 Uhr

Stichwort Barts PE.
Damit Windows XP Live-CD erstellen, davon booten, Rechte ändern, in Zukunft zum Rumspielen Testordner und -dateien erstellen oder sein lassen

14.01.2007 - 11:55 Uhr

Um das wirklich getrennt zu steuern, musst du wohl eine RTB ohne Scollbars und deine eigenen Scrollbars anzeigen.

14.01.2007 - 11:38 Uhr

...jedes Mal wenn ich etwas im Internet sehe bei dem ich mich frage, wie es programmiert ist wünsche ich mir, dass ich diese Programmierungen verstehen kann. Mein zweitgrößter Wunsch ist es ein Mensch zu werden, der im Fachgebiet Computer ein "Master" ist

Dieser Wunsch wird dir aber nicht von einer höheren Instanz einfach erfüllt. Dafür musst du arbeiten.

14.01.2007 - 11:27 Uhr

Ich würd mir zwar gern ein C# buch aneignen und durcharbeiten, leider jedoch bleibt mir wegen der Schule dafür keine Zeit.

Ich habe auch mal Abi gemacht. Ist zwar schon ein kleines Weilchen her, aber trotzdem kann ich da nur sagen: da muss ich ja mal lachen.
Ich nehme an, deine Eltern haben dich auch mit dem nervigen Spruch versorgt: "Du wirst dich noch nach der Schule zurücksehenen". Ich musste auch erst vier Jahre aus der Schule raus sein, bis ich ihnen geglaubt habe. Vielleicht habe ich im Alter wieder so viel Freizeit.

Ich muss bis in 4 Wochen ein C# Projekt fertig haben und kann mir das leider zeitlich nicht leisten.

Genau, weil ihr in der Schule auch eine neue Programmiersprache und ein Framework in sechs Wochen durchhastet. Deswegen hast du dich auch erst am 1.1. angemeldet.

Werde es aber nach Abschluss des Abi's auf jeden Fall machen müssen...

Darf ich daraus schließen, das du ein Studium bzw. eine Ausbildung eines IT-Faches mit hohen Programmieranteil anstrebst?
Dann solltest du dir bis dorthin ordentliche Herangehensweisen beim Erlernen neuer Sachen angewöhnt haben.

Als ein bisschen konstruktive Kritik sonst nur noch das, was FZelle schon sagte...

13.01.2007 - 20:43 Uhr

Nur wenn du XP Pro hast: im Explorer, Extras \ Ordneroptionen \ Ansicht \ Einfache Dateifreigabe verwenden ausschalten
Dann Eigenschaften von Datei/Ordner \ Sicherheit \ Erweitert \ Besitzer. Der Rest erklärt sich von selbst.

Hast du XP Home, brauchst du einen Dateimanager, der das Setzen der Rechte unterstützt.

In Zukunft unterlasse es in deinem eigenen Interesse besser, an Dingen herumzuspielen, von denen du keine Ahnung (bzw. nicht genug) hast.

13.01.2007 - 08:08 Uhr

Wobei du die Höhe jetzt natürlich auch im Konstruktor ermitteln kannst und diesem daher nicht mehr übergeben musst.

13.01.2007 - 08:05 Uhr

Hast du dir mal die Parameter von cacls angeschaut?

Was hältst du von cacls /T /C /G Jeder:F? Danach kannst du dann die ACLs genauer anpassen (mit /E zum Bearbeiten).
Falls du den Zugriff sogar verweigert hast, musst du dies mittels cacls /T /C /R <<benutzer>> aufheben.

13.01.2007 - 00:31 Uhr

Die Oberfläche von Windows wird durch das Programm "explorer.exe" realisiert. Durch Setzen eines Wertes in der Registry kann man jedoch auch jedes andere Programm als Shell benutzen, Explorer wird dann nicht gestartet.

12.01.2007 - 18:08 Uhr

Acht Sekunden für ein Fenster? Darf ich fragen, was du machst? Tausend pixelgroße Buttons?

Such mal nach SplashScreen, da sollten Hinweise zu finden sein.

Ansonsten würde ich dir empfehlen, auf die ganzen Controls zu verzichten und das Forms selbst zu zeichnen und die Events zu verwalten. Auch dazu findest du hier was.
Ansonsten wird dein Programm sehr träge reagieren.

12.01.2007 - 17:48 Uhr

Dann kann ich nur noch einige Links anbieten, die zwar ein paar Tipps enthalten, aber insgesamt nicht sehr positiv klingen.
http://www.mcse.ms/message2360465.html
http://www.thescripts.com/forum/thread440177.html
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=137520&SiteID=1 ≤ klingt vielversprechend
http://dev.ektron.com/forum.aspx?g=posts&t=6600
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=537803&SiteID=1
Ich hoffe, eine der Ideen löst dein Problem.

12.01.2007 - 17:28 Uhr

Soweit ganz in Ordnung. Allerdings würde ich jeder Klasse eine komlett eigene ToString()-Methode geben (ohne Aufruf der Basismethode), so dass Kreis dann "Kreis, Mittelpunkt x/y, Radius r" und Quadrat etwas entsprechendes ausgibt.

12.01.2007 - 17:05 Uhr

Das Problem scheint zu entstehen, wenn du versuchst mit einer auf dem ausführenden Rechner existierenden Identity (d.h. SID) auf einen anderen Rechner zuzugreifen, der diese nicht kennt und daher nicht auf einen seiner lokalen Benutzer abbilden kann.
Das ist ja auch logisch, da der Service unter lokales System läuft. Starte ihn stattdessen mal als Netzwerkdienst.

12.01.2007 - 16:39 Uhr

Zur Erläuterung folgender Auszug aus dem Platform SDK:

Thread Affinity

Thread affinity forces a thread to run on a specific subset of processors. Use the SetProcessAffinityMask function to specify thread affinity for all threads of the process. To set the thread affinity for a single thread, use the SetThreadAffinityMask function. The thread affinity must be a subset of the process affinity. You can obtain the current process affinity by calling the GetProcessAffinityMask function.

Setting thread affinity should generally be avoided, because it can interfere with the scheduler's ability to schedule threads effectively across processors. This can decrease the performance gains produced by parallel processing. An appropriate use of thread affinity is testing each processor.

Thread Ideal Processor

When you specify a thread ideal processor, the scheduler runs the thread on the specified processor when possible. Use the SetThreadIdealProcessor function to specify a preferred processor for a thread. This does not guarantee that the ideal processor will be chosen, but provides a useful hint to the scheduler.

EDIT: Wie oben schon angeführt, sind die drei erstgenannten Funktionen über das ProcessorAffinity-Property implementiert nur die vierte leider nicht.

12.01.2007 - 16:26 Uhr

Mathematisch gesprochen, musst du zu dem dir bekannten Seitenvektor des Quadrates orthogonale Vektoren mit gleichem Betrag (Länge) suchen.
Das Problem ist, dass du nicht weißt, in welche Richtung das Quadrat von der bekannten Seite aufgespannt werden soll (=>es gibt zwei derartige Vektoren).
Dies wird in folgendem Algorithmus vermerkt.


gegeben:
Punkt A = ( xa, ya )
Punkt B = ( xb, yb )

Lösung:
Vektor AB = ( xb-xa, yb-ya )

Vektor BC = ( -(yb-ya), xb-xa ) zur einen Seite oder ( yb-ya, -(xb-xa) ) zur anderen Seite
Vektor AD = BC

Punkt C = B + BC
Punkt D = A + AD = A + BC

Dann hast du alle vier Punkte.

EDIT: sorry, gerade erst gelesen:

an diesem Punkt gegen den Uhrzeigersinn abgetragen

daher:

Vektor BC =( -(yb-ya), xb-xa )