Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Little Tester
Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Ja, hmmm. Irgendwie ist die Schrift nach dem Bearbeiten "silber" geworden. Hatte es danach bearbeitet und weggemacht, aber jetzt ist es wieder.

Edit: Grad nochmal rumprobiert: Lässt sich nicht reproduzieren...

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Tja, schreibt man allgemein heißt es, man sollte nicht für die Gemeinschaft sprechen, schreibt man für sich persönlich heißt es man sei "Ich"-bezogen. In jeder Community wollens die Admins und Mods anders haben und haben auch andere Vorstellungen davon, wie man sich auszudrücken hat. Man macht es immer falsch

Ich schreibe inzwischen so, wie es mir gerade liegt, weil ich der Meinung bin man sollte nicht auf die Sprache reduziert werden. Mittlerweile sollte man meinen Charakter ja auch ein bisschen kennen. Komme ich echt so "Ich"-Bezogen rüber? Eigentlich pflege ich schon den Communitygedanken, auch wenn ich oft "Ich" schreibe. Ich pflege einfache Sprache (Sieht man ja auch am Code und meinen gesuchten Lösungen) und verweigere auch im Berufsleben inzwischen das "gendern". Niemand kennt mich hier persönlich. Niemand von euch, weis ob ich ein Handicap habe, eine Behinderung, vielleicht deutsch nicht meine Muttersprache ist oder oder oder.. Also bitte hängt euch nicht daran auf, weil ein Beitrag, ein Satz oder gar ein Wort vielleicht nicht richtig gewählt sind oder ich mich nicht ganz so elegant, verschnörkelt oder gar unterwürfig ausdrücke.

Es ist schön, wenn von euch keine Gegenleistung erwartet wird. Ihr wollt ja auch keine Spenden (ja, ich hatte den Link angeklickt). Ich selbst habe diesen Anspruch an mich selbst, zumindest wenn so viel wie bei meinem Projekt nur dank Mithilfe der Community zustande kam. Deswegen möchte ich mein Projekt dann auch zumindest unter der Prämisse "Anschauungsprojekt" veröffentlichen. Aber logischerweise erst dann, wenn ich es selbst zu Version 1.0 erkläre und nicht irgendwas halbfertiges oder offensichtlich verbuggtes. (Dafür fehlen noch zwei Dinge)

Ich möchte mich auch nicht streiten, weil dafür kam hier einfach zu viel Hilfe und Entgegenkommen und hoffe auch weiter auf euch zählen zu dürfen. Ich möchte mich aber auch nicht anranzen lassen, weil ich es mir erlaubt habe ein Feature zu wünschen oder eine Mutmaßung zu äußern, die noch dazu auf der Mutmaßung eines anderen beruht. Das "Bitte bitte" war zwar bewusst doppelt (hätte ja auch ein Fehler sein können), sollte aber kein

Zitat
Ich will aber! Ich will aber!
sein, sondern Ausdruck dessen, dass mir das Feature wichtig gewesen wäre. Ich räume hinter mir nunmal gerne auf. Ist das verwerflich?

Edit: Und jepp, dass mein Datenbankdesign nicht ideal ist weis ich und sehe ich auch vollkommen ein. Mit Version 2.0 wird alles besser. Ich lerne ja.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

@Abt: Ich habe dein Nachtrag erst jetzt gelesen als ein neuer Beitrag kam, daher auch jetzt meine Antwort:

Ich weis jetzt ehrlich gesagt nicht, warum du mich derart angehst. Ich muss mir in solchen Fällen auch immer wieder anhören, dass meine Fehler schon im Design liegen, daher habe ich das mit Lächeln hier auch mal wieder gegeben. (Jaja, ist ein anderes Forum, aber du weist worauf ich hinaus will)

Natürlich weiß ich nicht, wie eure Datenbank im Hintergrund aufgebaut ist, aber wenn man PNs nicht löschen kann, weil "$begruendung" dann mag das vielleicht von euch so gewollt sein, schön ist es aber nicht. Das werde ich ja wohl noch sagen dürfen, oder darf ich als Noob und Hilfsbedürftiger vom Dienst keine eigene Meinung haben, bzw. die nicht äußern?

Auch, dass du mir zumindest indirekt vorwirfst ich wäre Ich-Bezogen und würde das Forum und die Community als für mich erstellt betrachten kann ich nicht nachvollziehen. Ja, ich frage momentan sehr viel, ja ich bin sehr hilfsbedürftig, ja ich habe mit der Programmierung meine Probleme und ja, vielleicht bin ich dafür auch nicht gemacht. Aber es interessiert mich, ich will es lernen und ich nehme dafür die kostenlose Hilfe dieser Community dankend an und ihr habt mich und mein Projekt enorm vorangetrieben und meine Motivation aufrecht erhalten, die zwischendrin etwas gesunken war. Um es klar zu sagen: Mein Projekt wäre ohne eure und auch deine persönliche Hilfe nicht da wo es jetzt steht und quasi fast einsatzbereit. Das verdanke ich euch und ich möchte den Quellcode am Ende, soweit das sinnvoll ist auch veröffentlichen. Ist ja schon fast ein Gemeinschaftswerk.

Ich habe gerade den Eindruck (möchte nichts unterstellen, es ist nur ein Eindruck, kann mich irren), dass du ne ganze Menge Frust gegen mich schiebst und mein Beitrag jetzt Anlass war dem freien Lauf zu lassen. Finde ich sehr schade, denn bislang war ich wirklich gerne Teil dieser Community und habe mich gut aufgehoben gefühlt und nicht von oben herab behandelt nach der Art "Lern erstmal die Basics und komm mit echten Problemen wieder". Dannoe der die Vermutung mit den PNs und nicht löschen ja zuerst aufstellte bist du jedenfalls nicht (auch) angegangen.

Soweit es in meiner Macht stand wollte ich auch was zurückgeben. So ganz ist das zwar nicht geglückt, aber könnte ja noch kommen und ich hoffe der Wille ist erkennbar.

Bitte denkt immer daran: Am Ende sitzt auch ein Mensch mit seinen Stärken, Schwächen und Gefühlen. Vielleicht wurde auch nur alles falsch aufgefasst. In dem Fall. Sorry.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Das finde ich aber doof. Ich würde meinen Postein- UND Ausgang gerne sauber halten. Wenn das nur möglich ist in dem die Nachricht bei beiden Parteien gelöscht wird dann ist das ein "Fehler im Design" wie man so schön sagt. Jede Partei sollte seine eigene Kopie der Nachricht haben, so wie das bei jeder Forensoftware die ich kenne der Fall ist.

Bitte bitte umsetzen.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

[Bug] Nachrichten im Posteingang löschen funktioniert. Nachrichten aus dem Postausgang löschen funktioniert nicht. Ist das wegen meines Benutzernamens?

Zitat
Fehler
Keine Nachricht mit der Id #46013 gefunden.
Hab mehrere Nachrichten die ich löschen wollte. Immer das Gleiche.

Thema: Drucker-Modell ermitteln per IP
Am im Forum: Netzwerktechnologien

Ich habe ja hier nachgefragt, WEIL ich über Google nichts gefunden habe Hätte ja aber sein können, dass sowas nicht oft gemacht werden will und entsprechend Informationen spärlich sind oder ich schlichtweg falsch gesucht habe.

Aber so wie ich eure Antworten deute ist es wohl so, dass man ohne die Hersteller API / Hersteller SDK nicht wirklich weiter kommt, zumindest auf meinem Level der Programmierung.

Thema: Tagsüber andere Aktionen als abends / Unterschiedliche Aktionen zu unterschiedlichen Zeiten
Am im Forum: Grundlagen von C#

Der Dienst soll ständig im Hintergrund laufen. In meinem Fall wollte ich, dass der Onlinestatus tagsüber alle X Stunden ausgegeben wird, nach Feierabend, wenn Rechner / Server i.d.R. entweder eh an oder aus sind und sich daran nichts mehr ändert wollte ich die Zeitspanne höher setzen. (Server sind natürlich eh immer an) Immerhin wird die Datenbank bei einem Webhoster gehostet und da muss man ja nicht ständig sinnlos Verbindung aufnehmen. K.A. ob das ins Gewicht fallen würde oder nicht. Der Dienst soll am Ende auf ~80-90 Rechnern laufen und ausschließlich mitteilen ob Rechner / Server online oder offline.

Momentan schwanke ich aber, ob das Vorhaben noch sinnvoll ist. Im Grunde würde es reichen den Onlinestatus bei den Workstations / Laptops beim Hochfahren zu ermitteln (mit meinem Tool, das ich entwickle) und bei den Servern das extra zu regeln. Es gibt aber einige Rechner die im Grunde immer an sind, wie beispielsweise meiner im Büro und es dann schon wichtig wäre zu wissen, dass dieser verwendet wird und nicht nur rum steht. Wenn ich den Rechner zwei Wochen nicht neu starte hat man in der Datenbank entsprechend stehen, dass der Rechner zuletzt vor zwei Wochen gestartet wurde, also kaum benutzt wird. Das dem nicht so ist würde man daran erkennen, dass er sich immer wieder Online meldet.

Nichts desdo trotz wollte ich den Code halt mit euch teilen, weil es der ein oder andere sicher gebrauchen könnte. Das er nicht ganz perfekt war und als Snippets nicht taugte ist ein anderes Thema

Thema: Mehrere Bildschirme ermitteln und getrennt! anzeigen und die echte Auflösung ermitteln
Am im Forum: Rund um die Programmierung

Jetzt bin ich vollends irritiert.

Ich wollte euch eben zeigen, dass der Code funktionierte (in dem Sinn, dass er beide Bildschirme ausgab) als ich die Konvertierung noch falsch gemacht habe und habe es entsprechend rückgängig gemacht.
Das Ergebnis ist dann als Textbox:

Zitat
// Wieso das doppelt ist verstehe ich nicht.
MSI MAG241 | ORIONMSI MAG241 | ORION
Als Label:
Zitat
// Das Ausgabeformat war erstmal ganz OK, wenngleich noch nicht brauchbar.
MSI MAG241 | ORION

Naja, ist ja eh falsch gewesen, also den richtigen Code genommen, also das mit


monitorModel += Encoding.ASCII.GetString(ufnASCIIBytes);

Je nachdem wie ich mir das ausgeben lasse erhalte ich unterschiedliche Ergebnisse:
Als textBox2.Text ist es:
Zitat
// Ergebnis wie erwartet und nachvollziehbar
MSI MAG241CRORION

Als label26.Text ist es:
Zitat
// Ergebnis wie erwartet und nachvollziehbar. Durch das += hänge ich ja einen String an.
label26MSI MAG241CRORION
Als monitorModel, das weiter unten dann dem Label zugewiesen wird, also "lblMonitorModel.Text = monitorModel;" ist es dann
Zitat
// Ergebnis nicht verständlich. Wieso wird der zweite Monitor jetzt unterschlagen?
MSI MAG241CR
Nimmt man das += raus und macht ein einfach = gibt es nichts aus.

Wisst ihr nun weiter? Von der Sache her werden doch eigentlich beide Bildschirme ermittelt und ausgegeben. ORION ist übrigens mein Fernseher der für diesen Test halt herhalten muss.


Edit: Achja, wenn ich mir das Trennzeichen am Ende hinmache, also


textBox2.Text += Encoding.ASCII.GetString(ufnASCIIBytes) + "|";
gibt es ein Ergebnis wie dieses: (Beispiel anhand von textBox2.Text)
Zitat
M|S|I| |M|A|G|2|4|1|C|R|O|R|I|O|N|
Mir ist aber klar warum, wollte es nur der Vollständigkeit halber noch dazu schreiben, weil ich es ja im Gegensatz zu oben dann rausgenommen hatte.

Thema: Drucker-Modell ermitteln per IP
Am im Forum: Netzwerktechnologien

Ist es irgendwie möglich mittels C# Hersteller und Modell von Druckern / Kopierern mittels IP abzufragen? Also ich will das Netzwerk scannen und mir ausgeben lassen, wie oft Hersteller und Modell vorhanden sind. Geht das überhaupt? Wie müsste man vorgehen? Einige Setup-Programme der Hersteller können das ja und listen diverse Modelle bei einer Netzwerkinstallation auf. Geht das nur mittels API der Hersteller? Da kommt man leider nicht so ohne weiteres dran, zumindest bei HP und Kyocera. Freue mich auf eure wie immer hilfreichen Antworten.

Thema: Wie einen sicheren Updater programmieren?
Am im Forum: Rund um die Programmierung

Kennt sich wer mit dem Autoupdater aus? Das Teil funktioniert, aber die Prüfung der Dateiintegrität schlägt bei mir immer fehl.

Thema: Mehrere Bildschirme ermitteln und getrennt! anzeigen und die echte Auflösung ermitteln
Am im Forum: Rund um die Programmierung

Ich frage dann nochmal zaghaft nach, ob sich wer der Thematik annehmen will. Konnte es bislang nicht lösen.

Thema: Tagsüber andere Aktionen als abends / Unterschiedliche Aktionen zu unterschiedlichen Zeiten
Am im Forum: Grundlagen von C#

Ich habe die Tage danach gesucht, wie ich bei einem Programm / Dienst eine Aktion tagsüber anders ausführen kann, als abends. Ein direktes Beispiel konnte ich nicht finden, sondern musste es mir zusammenreihmen. Heraus kam das hier und ich möchte es mit euch teilen .


var startTime = "08:00:00";
var endTime = "18:00:00";

if (DateTime.Now > DateTime.Parse(startTime) && DateTime.Now < DateTime.Parse(endTime))
{
    // Mach was zwischen 08:00 Uhr und 18:00 Uhr
} 
else 
{
    // Mach was außerhalb der oben genannten Zeit
}

Thema: Probleme mit Registry-Abfrage von zwei Registry-Pfaden
Am im Forum: Rund um die Programmierung

Kann natürlich sein. Bei dem einen Arbeitgeber, wo ich der Admin installiere ich die Software immer als Admin von Hand. Habe da leider auch keinen Server der das machen könnte. Der zweite Arbeitgeber, wo ich nur ein kleines Licht in der Abteilung bin hat hingegen eine gigantische IT-Infrastruktur mit SCCM und co. zur Verfügung. Denke mal, dass es da deswegen anders installiert wurde. Aber so prüfe ich jetzt einfach beide Pfade. Schadet ja auch nicht und gelernt habe ich auch gleich was.

Thema: c# Datum umwandeln?
Am im Forum: Grundlagen von C#

OK, jetzt gehts. Meine Güte. Was ein Umstand nur um nen blöden String auf Linie zu bringen. Danke für eure Geduld.


                    systemLastWindowsUpdate = result.ToString("yyyy-MM-dd");

Thema: c# Datum umwandeln?
Am im Forum: Grundlagen von C#

Also das "Problem" war, dass ich einfach mit dem String weiter arbeiten wollte. Für mich ist 6/22/2021 nunmal 6/22/2021. Für den Debugger offenbar nicht, obwohl er das sagt. Ist halt so. Verstehen tu ich das nicht (Siehe Bild)

Nun habe ich mich an das Beispiel aus der Doku gemacht. Das erste Beispiel habe ich nicht zum Laufen bekommen, trotz des richtigen Formats (M/dd/yyyy bzw. M/d/yyyy).

Das zweite Beispiel mit "with leading white space" hat dann immerhin ein Ergebnis gegeben, aber nicht, das, was ich mir erhofft habe. Umwandeln klappte natürlich damit erst recht nicht.


22.06.2021 00:00:00 +00:00


                    string stringDate = managementObject["InstalledOn"].ToString();
                    string format = "M/dd/yyyy"; // M/d/yyyy geht auch
                    CultureInfo provider = CultureInfo.InvariantCulture;
                    DateTimeOffset result = new DateTimeOffset();
                    result = DateTimeOffset.ParseExact(stringDate, format, provider, DateTimeStyles.AssumeUniversal);
                    systemLastWindowsUpdate = result.ToString();

Thema: c# Datum umwandeln?
Am im Forum: Grundlagen von C#

Wenn ich mit einem Beispiel nicht klar komme suche ich nach Alternativen. In der Programmierung gibt es ja in 99% der Fälle mehrere Wege zum Ziel. Mir ist es wichtig nach zu vollziehen was ich mache. Wenn dem nicht der Fall ist frage ich, wie bei der Sache mit dem ??-Parametern.

Die Microsoft-Doku hat mir übrigens bislang eher selten weiter geholfen. Auf stackoverflow wurde ich hingegen schon öfters fündig, zumindest dann nachdem ich wusste, wonach ich eigentlich suche. Dazu kamt dann in der Regel noch ihr, wo es dann partout klemmte.

Was ich in dem Fall jetzt nicht verstehe: Ich habe einen dummen String von beispielsweise 6/22/2021 oder 6.22.2021. Warum kann ich diese Zahl direkt in den Quelltext schreiben und umformatieren, aber nicht, wenn exakt die gleiche Zahl aus einer Variablen kommt? Das kapiere ich nicht.

Thema: c# Datum umwandeln?
Am im Forum: Grundlagen von C#

Ich finde es unfair immer zu behaupten ich würde die Doku nicht lesen. Das ich es vielleicht einfach nicht verstehe, darauf kommt Abt nicht :*(. Ich suche ja auch deswegen auch in anderen Quelle, wo das ganze nochmal anders erklärt oder dargestellt wird.

Thema: c# Datum umwandeln?
Am im Forum: Grundlagen von C#

Krieg es nicht geknackt

Das "beste" was jetzt bei rausgekommen ist das. Alle Versuche aus "x" ein gescheites Datum zu formatieren scheiterten.

Zitat
6.22.2021
Ich brauche es aber als 2021-06-22, damit es ordentlich in MySQL-Eingetragen werden kann. Die Spalte dort ist vom Tyo "date".


                var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_QuickFixEngineering");
                using (ManagementObjectCollection managementObjectCollection = searcher.Get())
                {
                    ManagementObject managementObject = managementObjectCollection.OfType<ManagementObject>().First();
                    string stringDate = managementObject["InstalledOn"].ToString();

                    DateTimeOffset PassDate = DateTimeOffset.UtcNow;
                    var dateFormat = stringDate;
                    var x = PassDate.ToString(dateFormat);

                    systemLastWindowsUpdate = x.ToString();

                }

Thema: c# Datum umwandeln?
Am im Forum: Grundlagen von C#

Ich poste das mal in den Grundlagen, weil ich denke ein Datum in ein anderes Format umwandeln ist eine Grundlage der Programmierung. Hoffe das passt so.
Also folgender Code funktioniert bestens:


            // Letzter Boot-Zeitpunkt auslesen
            try
            {
                var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
                using (ManagementObjectCollection managementObjectCollection = searcher.Get())
                {
                    ManagementObject managementObject = managementObjectCollection.OfType<ManagementObject>().FirstOrDefault();

                    string stringDate = managementObject["LastBootUpTime"].ToString();
                    DateTime dt = ManagementDateTimeConverter.ToDateTime(stringDate);
                    systemLastStart = dt.ToLongDateString();
                    computerLocation = managementObject["Description"].ToString();
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Problem im Abschnitt Letzter Boot-Zeitpunkt");
            }
Bekomme dann ein gutes Ergebnis wie
Zitat
Mittwoch, 7. Juli 2021

Ich benutze den gleichen Code nun für die Abfrage von Win32_QuickFixEngineering und dem managementObject["InstalledOn"].
Das gibt folgenden Fehler:
Zitat
System.ArgumentOutOfRangeException: Das angegebene Argument liegt außerhalb des gültigen Wertebereichs.
Parametername: dmtfDate bei System.Management.ManagementDateTimeConverter.ToDateTime(String dmtfDate)

Schreibt man den Code wie folgt, dann gibt es ein Datum wie dieses zurück:


[...]
systemLastWindowsUpdate = managementObject["InstalledOn"].ToString();
[...]
Zitat
6/22/2021

Also recherchiert, gemacht und getan, wie man das Format mm/dd/yyyy umwandeln kann.
Scheinbar guter Treffer hier.
Code umgesetzt, aber es gibt folgenden Fehler:



[...]
using System.Globalization;

string d = Convert.ToDateTime("09/25/2011").ToString("dd/MM/yyyy"); //returns 25/09/2011
DateTime date = DateTime.Parse("09/25/2011", new CultureInfo("en-GB")); // returns 09/25/2011
string d2 = date.ToString("dd/MM/yyyy"); //should return 25/09/2011
systemLastWindowsUpdate = d.ToString();
[...]
Zitat
System.FormatException: Die Zeichenfolge wurde nicht als gültiges DateTime erkannt.
bei System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
bei System.Convert.ToDateTime(String value)

Auch folgender Versuch scheitert mit
Zitat
System.ArgumentOutOfRangeException: Das angegebene Argument liegt außerhalb des gültigen Wertebereichs.
Parametername: dmtfDate bei System.Management.ManagementDateTimeConverter.ToDateTime(String dmtfDate)


            try
            {
                var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_QuickFixEngineering");
                using (ManagementObjectCollection managementObjectCollection = searcher.Get())
                {
                    ManagementObject managementObject = managementObjectCollection.OfType<ManagementObject>().FirstOrDefault();
                    string stringDate = managementObject["InstalledOn"].ToString();
                    DateTime dt = ManagementDateTimeConverter.ToDateTime(stringDate);

                    int day = dt.Day;
                    int month = dt.Month;
                    int year = dt.Year;

                    string date = (year + "-" + month + "-" + day).ToString();

                    systemLastWindowsUpdate = date;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                //MessageBox.Show("Problem im Abschnitt Windows Update.");
            }


Ich habe natürlich mehr recherchiert und probiert, aber ich komme nicht zum Erfolg. Kann mir bitte jemand sagen, wo es nun schon wieder klemmt?
Als kleiner Bonus suche ich noch die Möglichkeit Win32_QuickFixEngineering nach dem letzten Datum zu sortieren und nur dieses dann auszugeben.

Thema: Probleme mit Registry-Abfrage von zwei Registry-Pfaden
Am im Forum: Rund um die Programmierung

Danke euch. Ich habe das using bei den Abfragen überall vorne angestellt, wo ein IDisposable in der Definition ist. Das ist ja bei ManagementObjectCollection auch der Fall.

Das Projekt steht definitiv auf AnyCDU, sowohl bei Debug, als auch Release. Den Fehler mache ich nicht noch einmal

Bei der in diesem Thread genannten Abfrage klappt das mit dem using aber nicht. Kann machen was ich will, endet immer in einem Fehler . Das diese Doppelte Abfrage so kompliziert sein muss *grummel*

Warum sich der Citrix Workspace-Client manchmal in HKLM und manchmal in HKCU einträgt weiß ich nicht. Bei mir hier zu Hause und bei meinem Arbeitsplatz bei meinem einen Arbeitgeber findet sich der Eintrag in HKLM, bei meinem Arbeitsplatz beim anderen Arbeitgeber in HKCU.

Thema: Probleme mit Registry-Abfrage von zwei Registry-Pfaden
Am im Forum: Rund um die Programmierung

Danke für eure Antworten. Jetzt sieht der Code so aus, ist viel schöner und übersichtlicher und funktioniert . War das so gemeint? Warum muss man bei der Abfrage ?? verwenden und nicht ||. Ist ?? sowas wie eine "X ODER Y"-Abfrage? Dann müsste doch || genauso funktionieren? Für was steht das ? vor dem GetValue? Ich kannte das noch gar nicht.
Die MessageBoxen habe ich nur während der Entwicklung. Wenn es funktioniert landen die Werte natürlich in Variablen.


            // Citrix Workspace Version ermitteln
            try
            {
                var test = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\CitrixOnlinePluginPackWeb").GetValue("DisplayVersion") ?? 
                    RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\CitrixOnlinePluginPackWeb").GetValue("DisplayVersion");
                if(test == null)    
                {
                    MessageBox.Show("Nicht installiert");
                    }
                else
                {
                    MessageBox.Show(test.ToString());
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Problem im Abschnitt Citrix Workspace.");
            }

Thema: Probleme mit Registry-Abfrage von zwei Registry-Pfaden
Am im Forum: Rund um die Programmierung

Zunächst: Ich habe eine Lösung für das Problem, aber der daraus entstandene Code ist sehr umständlich und lang geworden. Ich hatte überlegt den Code erst in die Rubrik Code-Reviews zu posten und um Vorschläge zu bitten. Da ich aber selbst schon eine Vorstellung davon habe, wie das am Ende aussehen könnte (sollte?), aber daran scheitere habe ich es hier gepostet.

Ich habe hier eine Abfrage in der Registry. Tests auf verschiedenen Rechnern ergab, dass sich der gesuchte Schlüssel in zwei Pfaden verstecken kann.
Ich hatte es mir so vorgestellt, dass ich den Code wie folgt schreibe, aber nun weiß ich nicht, wie ich an den Wert von GetValue komme. Selbst, wenn ich GetValue extra nochmal abfrage, fehlt mir die Variable um auf den Registry-Pfad zuzugreifen. Alle Versuche da was vorne an zu stellen münden in einem Fehler. Könnt ihr mir bitte helfen?


            // Citrix Workspace Version ermitteln
            try
            {
                if (RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\CitrixOnlinePluginPackWeb").GetValue("DisplayVersion") == null)
                {
                    if (RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\CitrixOnlinePluginPackWeb").GetValue("DisplayVersion") == null)
                    {
                        MessageBox.Show("Nicht installiert");
                    }
                    else
                    {
                        MessageBox.Show("???");
                    }
                } else
                {
                    MessageBox.Show("???");
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Problem im Abschnitt Citrix Workspace.");
            }

Edit: Achja: Sind beide Pfade ungültig ist der Debugger sehr unglücklich und gibt den gefürchteten "System.NullReferenceException: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."-Fehler zurück. Ich habe den Beitrag dazu gelesen, komme damit aber nicht weiter.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

OK, ich frage dann einfach $später nochmal nach. Dachte es ist einfach nur ne Einstellung, wo man eine Zahl einträgt und fertig.

Thema: Sammelthema Wünsche und Bugreports myCSharp
Am im Forum: Wünsche und Kritik

Ich kann die Gründe nachvollziehen, gerade das Argument des Vandalismus, wenn jemand (im Zorn) die Community verlässt oder wie hier, als jemandem geholfen wurde und zum "Dank" dann seinen Code wieder löschen wollte.

Ob es da nicht ausreichen würde das zu verhindern, sobald eine Antwort gekommen ist oder das Zeitlimit so "eng" gefasst sein muss ist eine andere Sache. Ich will da auch nicht weiter drauf rumreiten, weil es eine Entscheidung eurerseits ist. Ich hatte es angeregt, wurde begründet abgelehnt und es ist für mich auch OK.

Kann man es aber vielleicht trotzdem so machen, dass die ersten paar Minuten nach Absenden eine Änderung noch nicht als solche Markiert wird, wenn man eine vor nimmt? Ich mache das relativ häufig, trotz Vorschaufunktion. Ist irgendwie ne Krankheit, dass ich hinterher nochmal was ändere, vor allem klarer machen möchte oder dann doch noch ein (Rechtschreib-) Fehler auffällt. Ärgere mich dann selbst und würde es gerne vertuschen.

Thema: Softwareversion (aus Registry) wird im Release-Modus erkannt, im Debug-Modus nicht
Am im Forum: Rund um die Programmierung

Danke für deine Hinweise Abt. Ich habe das Projekt wieder umgestellt. Das "Problem" ist wohl, dass beim Aufruf von regedit unter Windows die x64-Version genommen wird, während unter Visual Studio (zumindest C#) standardmäßig die x86-Version genommen wird. Da können die Pfade dann manchmal nicht identisch sein. (Quelle)

Ich habe mir jetzt so beholfen, dass ich folgenden Code verwende, wenn ich die explizit die x64-Version der Registry haben will. Ich hoffe das findet eure Zustimmung.


                RegistryKey findeEintrag = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"Pfad");

Thema: Aktuelle Github Version verwenden / Nuget-Package erstellen?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ich habe mein kleines Projekt, dass momentan als .net 4.8 läuft, kurzerhand mal in eine .net 5 App kopiert. Läuft soweit auch ganz gut. Ob das bei meinem Mini-Projekt jetzt Sinn macht das auf .net 5 App umzustellen sei erstmal dahingestellt (was meint ihr? LTS wird es eh erst mit .net 6 geben.) Allerdings sind zwei Pakete nicht ganz mit .net 5 kompatibel und ich bekomme eine entsprechende Warnung. (Scheint trotzdem alles zu funktionieren, aber ist natürlich trotzdem keine Basis auf der man (weiter) arbeiten will) Auf Github wurde die Kompatibilität bereits hergestellt, aber noch nicht als Nuget veröffentlicht.

Bei dem einen Projekt handelt es sich um AutoUpdater.NET
Das Andere ist WindowsAPICodePack Bei diesem liegt die Bitte für ein Nuget-Release seit 8. Januar vor, aber ist halt bislang nicht passiert.

Die Frage ist also, ob man sich aus dem Github-Repository selbst ein Nuget Paket machen kann oder es anderweitig möglich ist die neusten Änderungen zu nutzen?

Thema: Mehrere Bildschirme ermitteln und getrennt! anzeigen und die echte Auflösung ermitteln
Am im Forum: Rund um die Programmierung

So, ich habe jetzt immer wieder und heute quasi den ganzen Tag (auch auch die Tage davor immer wieder mal) damit zugebracht eine neue Lösung zu finden. Nachdem Th69 geschrieben hat, dass die ganze Umwandlung vom ersten Post eh für den Eimer ist (womit er natürlich vollkommen Recht hat) habe ich jetzt hoffentlich die richtige Lösung gefunden. Leider schaffe ich es jetzt nicht mehr, dass beide Bildschirme gefunden werden. Kann hier bitte jemand nachhelfen? Ich will aber ohnehin, dass beide Bildschirme separat gelistet werden, also beispielsweise so:


Monitor 1: Modell, Seriennummer, Größe, Auflösung
Monitor 2: Modell, Seriennummer, Größe, Auflösung


                var searcher = new ManagementObjectSearcher (@"root\wmi", "SELECT * FROM WmiMonitorID");

                foreach (ManagementObject ufn in searcher.Get())
                {
                    if (ufn["UserFriendlyName"] == null)
                    {
                        monitorModel = "Keine Bezeichnung";
                    }
                    else
                    {
                        ushort[] ufnArray = (ushort[])ufn["UserFriendlyName"];
                        foreach (ushort ufnValue in ufnArray)
                        {
                            var ufnASCIIBytes = new byte[] { (byte)ufnValue };
                            monitorModel += Encoding.ASCII.GetString(ufnASCIIBytes);
                        }
                    }
                }

                foreach (ManagementObject sn in searcher.Get()) {
                    if (sn["SerialNumberID"] == null) {
                        monitorModel = "Keine Seriennummer";
                    } else {
                        ushort[] snArray = (ushort[])sn["SerialNumberID"];
                        foreach (ushort snValue in snArray) {
                            var snASCIIBytes = new byte[] { (byte)snValue };
                            monitorSerial += Encoding.ASCII.GetString(snASCIIBytes);
                        }
                    }
                }

Komischerweise werden mit dieser Lösung beide Auflösungen richtig erkannt


                // Bildschirm-Auflösung ermitteln.
                try {
                    foreach (var screen in Screen.AllScreens) {
                        var screenWidth = screen.Bounds.Width.ToString();
                        var screenHeight = screen.Bounds.Height.ToString();

                        monitorResolution += screenWidth + " x " + screenHeight + " | ";
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("Systeminventory hat ein Problem im Abschnitt Bildschirm-Auflösung.");
                }

Und auch dieser Code gibt mit beide Bildschirmgrößen zurück, wenngleich mein Fernseher, der für diesen Test herhalten muss schon etwas größer als 7" ist. (19 Zoll Breitbild oder so, kleiner als mein 24" auf jeden Fall. Unterm Strich ist es auch egal.)


                // Monitorgröße ermitteln
                // https://www.c-sharpcorner.com/forums/get-the-monitor-size
                try 
                {
                    ManagementObjectCollection mozReturn1;
                    ManagementObjectSearcher mozSearch1;

                    mozSearch1 = new ManagementObjectSearcher(@"root\wmi", "SELECT * FROM WmiMonitorBasicDisplayParams");
                    mozReturn1 = mozSearch1.Get();

                    foreach (ManagementObject moz1 in mozReturn1) {
                        double width = (byte)moz1["MaxHorizontalImageSize"] / 2.54;
                        double height = (byte)moz1["MaxVerticalImageSize"] / 2.54;
                        double diagonal = Math.Sqrt(width * width + height * height);
                        monitorSize += Math.Round(diagonal, 0).ToString() + "\" | ";
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("Systeminventory hat ein Problem im Abschnitt Bildschirmgröße.");
                }

Thema: Codeformatierung in Visual Studion 2019 ändern
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ich möchte es nicht "Resistenz" nennen. Das klingt so nach "uneinsichtig" und "besserwisserisch". Ich komme mit dem Stil besser klar. Das ist alles. Ich habe sonnst keine "Dafür" oder "Dagegen" Gründe.

Ich will aber gucken dran zu denken den Code anzupassen, wenn ich im Forum stelle, damit ihr es einfacher habt. Seid mir aber bitte nicht böse, wenn ich es mal vergesse oder mal ne Klammer übersehe.

Thema: Codeformatierung in Visual Studion 2019 ändern
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hmmm, es ist Java-Codestil? DAS wäre wirklich ein Argument von dem Stil Abstand zu nehmen. Wieso programmiert man in Java so und in anderen Programmiersprachen anders? Gibts da Gründe für?

Was das Programmieren in "etablierten" Teams angeht. So gut werde ich wohl nicht, als das ich da mitmischen könnte . Bin ja froh, wenn ich mit meinem eigenen Code klar komme. - und ihr.

Thema: Codeformatierung in Visual Studion 2019 ändern
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Also ich finde die Standardformatierung aus oben genannten Gründen nicht so toll. Als Argument kommt noch hinzu, dass der sich der Code unnötig in die Länge zieht. Mit "meiner" Methode ist er viel kompakter.

Ich denke da bin ich nicht der Einzige der "meinen" Codestil favorisiert, sonnst wäre das ja nicht in Visual Studio einstellbar, oder?