PC Info Tool für Windows (.NET 4.8) - Hardware-Details und Verkaufswert

    • Beta
    • Open Source

    Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

      PC Info Tool für Windows (.NET 4.8) - Hardware-Details und Verkaufswert



      Change Logs:


      ### aktuell v.1.0.1###

      Screenshoot 1 - Einstellungen [Form2]




      Was geändert wurde:
      Spoiler anzeigen
      #

      • Neue Funktionen Prozessorinformationen:
      • Erfasst Name, Anzahl der Kerne und Threads, Taktfrequenz und Architektur.
      • Arbeitsspeicherinformationen: Erfasst Gesamtkapazität, Typ, Taktfrequenz und Anzahl der installierten Module.
      • Festplatten und SSDs Informationen: Erfasst Modell, Hersteller, Gesamtkapazität, freier Speicherplatz und Typ (HDD/SSD).
      • Grafikkarteninformationen: Erfasst Name, Hersteller, VRAM-Größe und Treiberversion.
      • Motherboardinformationen: Erfasst Modell, Hersteller, BIOS-Version und -Datum sowie Chipsatz-Informationen.
      • Netzwerkadapterinformationen: Erfasst Name, Hersteller, MAC-Adresse, IP-Adressen und Verbindungstyp.
      • USB-Anschlussinformationen: Erfasst Anzahl der verfügbaren USB-Anschlüsse und deren Belegung und Status.
      • Videoausgangsinformationen: Erfasst verfügbare Anschlüsse (HDMI, DisplayPort, VGA, DVI) und Status der angeschlossenen Monitore.
      • Soundkarteninformationen: Erfasst Name, Hersteller und Anzahl der Kanäle.
      • Peripheriegeräteinformationen: Erfasst angeschlossene Geräte wie Tastatur, Maus, Drucker, etc.
      • CD/DVD/Blu-ray Laufwerksinformationen: Erfasst Modell, Hersteller, Typ, Lese- und Schreibgeschwindigkeit.
      • Netzteilinformationen: Erfasst Gesamtleistung, Effizienzklasse, Herstellermarke und Modell.
      • Kühlungsinformationen: Erfasst CPU-Kühler, Gehäuselüfter und GPU-Kühler.
      • Gehäuseinformationen: Erfasst Modell, Hersteller, Formfaktor und Anzahl der Erweiterungssteckplätze.
      • Monitorinformationen: Erfasst Modell, Hersteller, Auflösung, Bildwiederholrate und Anschlussart.
      • Batterieinformationen bei Laptops: Erfasst Kapazität, aktueller Ladezustand und Herstellungsdatum.
      • Sensorinformationen: Erfasst Temperatursensoren, Spannungssensoren und Lüftergeschwindigkeitssensoren.
      • Erweiterungskarteninformationen: Erfasst Modell und Hersteller von Netzwerkkarten, Soundkarten und verwendeten Steckplätzen.
      • BIOS/UEFI-Informationen: Erfasst Version, Datum und Hersteller.
      • System-Slots-Informationen: Erfasst verfügbare und belegte Erweiterungssteckplätze (PCI, PCIe, AGP, etc.).
      • Verbesserungen
      • Einstellungen speichern und laden:
      • Ausgewählte Hardwareinformationen in einer txt-Datei speichern und beim Laden des Programms wiederherstellen.
      • Informationen anzeigen: Nur die in der txt-Datei gespeicherten Hardwareinformationen werden in der RichTextBox angezeigt.
      • Informationen kopieren: Die angezeigten Hardwareinformationen können in die Zwischenablage kopiert werden.
      • Informationen speichern: Die angezeigten Hardwareinformationen können als txt-Datei gespeichert werden.
      • Fehlerbehebungen
      • Keine bekannten Fehler in dieser Version.

      #


      Quellcode hier:

      Form1 Main UI
      Spoiler anzeigen

      C#-Quellcode

      1. ​using System;
      2. using System.IO;
      3. using System.Management;
      4. using System.Text;
      5. using System.Windows.Forms;
      6. public partial class Form1 : Form
      7. {
      8. public Form1()
      9. {
      10. InitializeComponent();
      11. }
      12. private void Form1_Load(object sender, EventArgs e)
      13. {
      14. // Nichts zu tun
      15. }
      16. private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
      17. {
      18. DisplayHardwareInfo();
      19. }
      20. private void DisplayHardwareInfo()
      21. {
      22. StringBuilder info = new StringBuilder();
      23. string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "hardware_settings.txt");
      24. string[] selectedItems = File.Exists(path) ? File.ReadAllLines(path) : new string[0];
      25. foreach (var item in selectedItems)
      26. {
      27. switch (item)
      28. {
      29. case "Prozessor":
      30. info.AppendLine("Prozessor:");
      31. info.AppendLine(GetProcessorInfo());
      32. info.AppendLine();
      33. break;
      34. case "Arbeitsspeicher":
      35. info.AppendLine("Arbeitsspeicher:");
      36. info.AppendLine(GetMemoryInfo());
      37. info.AppendLine();
      38. break;
      39. case "Festplatten und SSDs":
      40. info.AppendLine("Festplatten und SSDs:");
      41. info.AppendLine(GetDriveInfo());
      42. info.AppendLine();
      43. break;
      44. case "Grafikkarten":
      45. info.AppendLine("Grafikkarten:");
      46. info.AppendLine(GetGPUInfo());
      47. info.AppendLine();
      48. break;
      49. case "Motherboard":
      50. info.AppendLine("Motherboard:");
      51. info.AppendLine(GetMotherboardInfo());
      52. info.AppendLine();
      53. break;
      54. case "Netzwerkadapter":
      55. info.AppendLine("Netzwerkadapter:");
      56. info.AppendLine(GetNetworkAdapterInfo());
      57. info.AppendLine();
      58. break;
      59. case "USB-Anschlüsse":
      60. info.AppendLine("USB-Anschlüsse:");
      61. info.AppendLine(GetUSBPortsInfo());
      62. info.AppendLine();
      63. break;
      64. case "Videoausgänge":
      65. info.AppendLine("Videoausgänge:");
      66. info.AppendLine(GetVideoOutputsInfo());
      67. info.AppendLine();
      68. break;
      69. case "Soundkarten":
      70. info.AppendLine("Soundkarten:");
      71. info.AppendLine(GetSoundCardInfo());
      72. info.AppendLine();
      73. break;
      74. case "Peripheriegeräte":
      75. info.AppendLine("Peripheriegeräte:");
      76. info.AppendLine(GetPeripheralDevicesInfo());
      77. info.AppendLine();
      78. break;
      79. case "CD/DVD/Blu-ray Laufwerke":
      80. info.AppendLine("CD/DVD/Blu-ray Laufwerke:");
      81. info.AppendLine(GetCDDVDInfo());
      82. info.AppendLine();
      83. break;
      84. case "Netzteil":
      85. info.AppendLine("Netzteil:");
      86. info.AppendLine(GetPowerSupplyInfo());
      87. info.AppendLine();
      88. break;
      89. case "Kühlung":
      90. info.AppendLine("Kühlung:");
      91. info.AppendLine(GetCoolingInfo());
      92. info.AppendLine();
      93. break;
      94. case "Gehäuse":
      95. info.AppendLine("Gehäuse:");
      96. info.AppendLine(GetCaseInfo());
      97. info.AppendLine();
      98. break;
      99. case "Monitore":
      100. info.AppendLine("Monitore:");
      101. info.AppendLine(GetMonitorInfo());
      102. info.AppendLine();
      103. break;
      104. case "Batterie bei Laptops":
      105. info.AppendLine("Batterie bei Laptops:");
      106. info.AppendLine(GetBatteryInfo());
      107. info.AppendLine();
      108. break;
      109. case "Sensoren":
      110. info.AppendLine("Sensoren:");
      111. info.AppendLine(GetSensorInfo());
      112. info.AppendLine();
      113. break;
      114. case "Erweiterungskarten":
      115. info.AppendLine("Erweiterungskarten:");
      116. info.AppendLine(GetExpansionCardsInfo());
      117. info.AppendLine();
      118. break;
      119. case "BIOS/UEFI":
      120. info.AppendLine("BIOS/UEFI:");
      121. info.AppendLine(GetBIOSInfo());
      122. info.AppendLine();
      123. break;
      124. case "System Slots":
      125. info.AppendLine("System Slots:");
      126. info.AppendLine(GetSystemSlotsInfo());
      127. info.AppendLine();
      128. break;
      129. }
      130. }
      131. textBoxAdditionalInfo1.Text = info.ToString();
      132. }
      133. private void saveasTxtBtn_Click(object sender, EventArgs e)
      134. {
      135. SaveFileDialog saveFileDialog = new SaveFileDialog();
      136. saveFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
      137. if (saveFileDialog.ShowDialog() == DialogResult.OK)
      138. {
      139. File.WriteAllText(saveFileDialog.FileName, textBoxAdditionalInfo1.Text);
      140. }
      141. }
      142. private void copyinfoBtn_Click(object sender, EventArgs e)
      143. {
      144. Clipboard.SetText(textBoxAdditionalInfo1.Text);
      145. MessageBox.Show("Informationen wurden in die Zwischenablage kopiert.");
      146. }
      147. // Beispielmethoden zum Abrufen von Hardwareinformationen
      148. private string GetProcessorInfo()
      149. {
      150. StringBuilder info = new StringBuilder();
      151. var searcher = new ManagementObjectSearcher("select * from Win32_Processor");
      152. foreach (var obj in searcher.Get())
      153. {
      154. info.AppendLine("Name: " + obj["Name"]);
      155. info.AppendLine("NumberOfCores: " + obj["NumberOfCores"]);
      156. info.AppendLine("MaxClockSpeed: " + obj["MaxClockSpeed"] + " MHz");
      157. }
      158. return info.ToString();
      159. }
      160. private string GetMemoryInfo()
      161. {
      162. StringBuilder info = new StringBuilder();
      163. var searcher = new ManagementObjectSearcher("select * from Win32_PhysicalMemory");
      164. foreach (var obj in searcher.Get())
      165. {
      166. info.AppendLine("Capacity: " + ConvertBytesToGB(Convert.ToInt64(obj["Capacity"])) + " GB");
      167. info.AppendLine("Speed: " + obj["Speed"] + " MHz");
      168. }
      169. return info.ToString();
      170. }
      171. private string GetDriveInfo()
      172. {
      173. StringBuilder info = new StringBuilder();
      174. var searcher = new ManagementObjectSearcher("select * from Win32_DiskDrive");
      175. foreach (var obj in searcher.Get())
      176. {
      177. info.AppendLine("Model: " + obj["Model"]);
      178. info.AppendLine("InterfaceType: " + obj["InterfaceType"]);
      179. info.AppendLine("Size: " + ConvertBytesToGB(Convert.ToInt64(obj["Size"])) + " GB");
      180. }
      181. return info.ToString();
      182. }
      183. private string GetGPUInfo()
      184. {
      185. StringBuilder info = new StringBuilder();
      186. var searcher = new ManagementObjectSearcher("select * from Win32_VideoController");
      187. foreach (var obj in searcher.Get())
      188. {
      189. info.AppendLine("Name: " + obj["Name"]);
      190. info.AppendLine("AdapterRAM: " + ConvertBytesToGB(Convert.ToInt64(obj["AdapterRAM"])) + " GB");
      191. info.AppendLine("DriverVersion: " + obj["DriverVersion"]);
      192. }
      193. return info.ToString();
      194. }
      195. private string GetMotherboardInfo()
      196. {
      197. StringBuilder info = new StringBuilder();
      198. var searcher = new ManagementObjectSearcher("select * from Win32_BaseBoard");
      199. foreach (var obj in searcher.Get())
      200. {
      201. info.AppendLine("Product: " + obj["Product"]);
      202. info.AppendLine("Manufacturer: " + obj["Manufacturer"]);
      203. }
      204. return info.ToString();
      205. }
      206. private string GetNetworkAdapterInfo()
      207. {
      208. StringBuilder info = new StringBuilder();
      209. var searcher = new ManagementObjectSearcher("select * from Win32_NetworkAdapter where NetEnabled=true");
      210. foreach (var obj in searcher.Get())
      211. {
      212. info.AppendLine("Name: " + obj["Name"]);
      213. info.AppendLine("MACAddress: " + obj["MACAddress"]);
      214. info.AppendLine("Speed: " + obj["Speed"] + " bps");
      215. }
      216. return info.ToString();
      217. }
      218. private string GetUSBPortsInfo()
      219. {
      220. StringBuilder info = new StringBuilder();
      221. var searcher = new ManagementObjectSearcher("select * from Win32_USBHub");
      222. foreach (var obj in searcher.Get())
      223. {
      224. info.AppendLine("DeviceID: " + obj["DeviceID"]);
      225. info.AppendLine("Name: " + obj["Name"]);
      226. }
      227. return info.ToString();
      228. }
      229. private string GetVideoOutputsInfo()
      230. {
      231. StringBuilder info = new StringBuilder();
      232. var searcher = new ManagementObjectSearcher("select * from Win32_DisplayConfiguration");
      233. foreach (var obj in searcher.Get())
      234. {
      235. info.AppendLine("DeviceName: " + obj["DeviceName"]);
      236. info.AppendLine("DisplayFlags: " + obj["DisplayFlags"]);
      237. info.AppendLine("DisplayFrequency: " + obj["DisplayFrequency"] + " Hz");
      238. }
      239. return info.ToString();
      240. }
      241. private string GetSoundCardInfo()
      242. {
      243. StringBuilder info = new StringBuilder();
      244. var searcher = new ManagementObjectSearcher("select * from Win32_SoundDevice");
      245. foreach (var obj in searcher.Get())
      246. {
      247. info.AppendLine("ProductName: " + obj["ProductName"]);
      248. info.AppendLine("Manufacturer: " + obj["Manufacturer"]);
      249. }
      250. return info.ToString();
      251. }
      252. private string GetPeripheralDevicesInfo()
      253. {
      254. StringBuilder info = new StringBuilder();
      255. var searcher = new ManagementObjectSearcher("select * from Win32_PnPEntity");
      256. foreach (var obj in searcher.Get())
      257. {
      258. info.AppendLine("Name: " + obj["Name"]);
      259. info.AppendLine("Description: " + obj["Description"]);
      260. }
      261. return info.ToString();
      262. }
      263. private string GetCDDVDInfo()
      264. {
      265. StringBuilder info = new StringBuilder();
      266. var searcher = new ManagementObjectSearcher("select * from Win32_CDROMDrive");
      267. foreach (var obj in searcher.Get())
      268. {
      269. info.AppendLine("Name: " + obj["Name"]);
      270. info.AppendLine("Drive: " + obj["Drive"]);
      271. info.AppendLine("MediaType: " + obj["MediaType"]);
      272. }
      273. return info.ToString();
      274. }
      275. private string GetPowerSupplyInfo()
      276. {
      277. // Da es keine direkte WMI-Klasse für Netzteile gibt, hier ein Beispiel für eine alternative Methode:
      278. StringBuilder info = new StringBuilder();
      279. info.AppendLine("Power Supply Information is not directly available via WMI.");
      280. return info.ToString();
      281. }
      282. private string GetCoolingInfo()
      283. {
      284. StringBuilder info = new StringBuilder();
      285. var searcher = new ManagementObjectSearcher("select * from Win32_Fan");
      286. foreach (var obj in searcher.Get())
      287. {
      288. info.AppendLine("Name: " + obj["Name"]);
      289. info.AppendLine("Status: " + obj["Status"]);
      290. }
      291. return info.ToString();
      292. }
      293. private string GetCaseInfo()
      294. {
      295. StringBuilder info = new StringBuilder();
      296. var searcher = new ManagementObjectSearcher("select * from Win32_SystemEnclosure");
      297. foreach (var obj in searcher.Get())
      298. {
      299. info.AppendLine("ChassisTypes: " + string.Join(", ", (ushort[])obj["ChassisTypes"]));
      300. info.AppendLine("Manufacturer: " + obj["Manufacturer"]);
      301. }
      302. return info.ToString();
      303. }
      304. private string GetMonitorInfo()
      305. {
      306. StringBuilder info = new StringBuilder();
      307. var searcher = new ManagementObjectSearcher("select * from Win32_DesktopMonitor");
      308. foreach (var obj in searcher.Get())
      309. {
      310. info.AppendLine("Name: " + obj["Name"]);
      311. info.AppendLine("ScreenHeight: " + obj["ScreenHeight"]);
      312. info.AppendLine("ScreenWidth: " + obj["ScreenWidth"]);
      313. }
      314. return info.ToString();
      315. }
      316. private string GetBatteryInfo()
      317. {
      318. StringBuilder info = new StringBuilder();
      319. var searcher = new ManagementObjectSearcher("select * from Win32_Battery");
      320. foreach (var obj in searcher.Get())
      321. {
      322. info.AppendLine("Name: " + obj["Name"]);
      323. info.AppendLine("BatteryStatus: " + obj["BatteryStatus"]);
      324. info.AppendLine("EstimatedChargeRemaining: " + obj["EstimatedChargeRemaining"] + "%");
      325. }
      326. return info.ToString();
      327. }
      328. private string GetSensorInfo()
      329. {
      330. // Da es keine direkte WMI-Klasse für Sensoren gibt, hier ein Beispiel für eine alternative Methode:
      331. StringBuilder info = new StringBuilder();
      332. info.AppendLine("Sensor Information is not directly available via WMI.");
      333. return info.ToString();
      334. }
      335. private string GetExpansionCardsInfo()
      336. {
      337. StringBuilder info = new StringBuilder();
      338. var searcher = new ManagementObjectSearcher("select * from Win32_SystemSlot");
      339. foreach (var obj in searcher.Get())
      340. {
      341. info.AppendLine("SlotDesignation: " + obj["SlotDesignation"]);
      342. info.AppendLine("Status: " + obj["Status"]);
      343. }
      344. return info.ToString();
      345. }
      346. private string GetBIOSInfo()
      347. {
      348. StringBuilder info = new StringBuilder();
      349. var searcher = new ManagementObjectSearcher("select * from Win32_BIOS");
      350. foreach (var obj in searcher.Get())
      351. {
      352. info.AppendLine("Name: " + obj["Name"]);
      353. info.AppendLine("Manufacturer: " + obj["Manufacturer"]);
      354. info.AppendLine("Version: " + obj["Version"]);
      355. }
      356. return info.ToString();
      357. }
      358. private string GetSystemSlotsInfo()
      359. {
      360. StringBuilder info = new StringBuilder();
      361. var searcher = new ManagementObjectSearcher("select * from Win32_SystemSlot");
      362. foreach (var obj in searcher.Get())
      363. {
      364. info.AppendLine("SlotDesignation: " + obj["SlotDesignation"]);
      365. info.AppendLine("Status: " + obj["Status"]);
      366. }
      367. return info.ToString();
      368. }
      369. private string ConvertBytesToGB(long bytes)
      370. {
      371. return (bytes / (1024 * 1024 * 1024)).ToString();
      372. }
      373. }


      Form2 Einstellungen UI

      Spoiler anzeigen

      C#-Quellcode

      1. ​using System;
      2. using System.IO;
      3. using System.Linq;
      4. using System.Windows.Forms;
      5. public partial class Form2 : Form
      6. {
      7. public Form2()
      8. {
      9. InitializeComponent();
      10. }
      11. private void Form2_Load(object sender, EventArgs e)
      12. {
      13. LoadSettings();
      14. }
      15. private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
      16. {
      17. bool checkAll = linkLabel1.Text == "Alles auswählen";
      18. for (int i = 0; i < checkedListBox1.Items.Count; i++)
      19. {
      20. checkedListBox1.SetItemChecked(i, checkAll);
      21. }
      22. linkLabel1.Text = checkAll ? "Alles abwählen" : "Alles auswählen";
      23. }
      24. private void saveBtn_Click(object sender, EventArgs e)
      25. {
      26. SaveSettings();
      27. }
      28. private void SaveSettings()
      29. {
      30. string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "hardware_settings.txt");
      31. using (StreamWriter writer = new StreamWriter(path))
      32. {
      33. foreach (var item in checkedListBox1.CheckedItems)
      34. {
      35. writer.WriteLine(item.ToString());
      36. }
      37. }
      38. MessageBox.Show("Einstellungen gespeichert.");
      39. }
      40. private void LoadSettings()
      41. {
      42. string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "hardware_settings.txt");
      43. if (File.Exists(path))
      44. {
      45. string[] lines = File.ReadAllLines(path);
      46. for (int i = 0; i < checkedListBox1.Items.Count; i++)
      47. {
      48. if (lines.Contains(checkedListBox1.Items[i].ToString()))
      49. {
      50. checkedListBox1.SetItemChecked(i, true);
      51. }
      52. }
      53. }
      54. }
      55. }


      ### old v.1.0.0###
      Spoiler anzeigen
      Beschreibung:Das PC Info Tool ist eine benutzerfreundliche Windows-Anwendung, die detaillierte Informationen über die Hardware-Komponenten eines Computers sammelt und anzeigt. Es bietet eine praktische Möglichkeit, die Spezifikationen des Systems zu überprüfen und den potenziellen Verkaufswert des PCs im gebrauchten Zustand zu ermitteln. Zu den angezeigten Komponenten gehören Grafikkarte, Mainboard, RAM, Prozessor, Netzteil, Speichergeräte, Bluetooth, WiFi und weitere Systeminformationen. Das Tool kann die gesammelten Daten speichern und in die Zwischenablage kopieren.Screenshot(s):
      Verwendete Programmiersprache(n) und IDE(s):C# .NETVisual Studio 2019Systemanforderungen:
      Windows 7 oder höher.NET Framework 4.8 oder höherSystemveränderungen:
      Das Programm benötigt Administratorrechte, um vollständige Hardware-Informationen abzurufen. Es ändert jedoch keine Systemdateien oder Einstellungen.
      Lizenz/Weitergabe:
      Freeware: Das Programm kann kostenlos genutzt und weitergegeben werden. Der Quellcode steht nicht zur Verfügung. Das Programm darf nicht verkauft werden.
      Dateien

      Dieser Beitrag wurde bereits 15 mal editiert, zuletzt von „mehmetqan“ ()

      Moin moin

      Also das Prog ist seltsam.
      Es öffnen sich 2 Forms. Eine Form ist komplett leer :!:
      Die Daten in die Zwischenablage kopieren geht.

      Der Link "check" :?: Mir erschließt sich hier der Sinn nicht, das da eine Messagebox zum Userverzeichnis kommt!

      Beim beenden des Progs bleibt die leere Form weiterhin offen!!

      Würde sagen, das ist noch sehr unausgegoren.
      Bilder
      • pccheck11.jpg

        222,69 kB, 912×516, 44 mal angesehen
      • pccheck12.jpg

        185,56 kB, 630×531, 45 mal angesehen
      Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
      Hey, ich habs nicht ausprobiert, aber für mich wäre das auch nicht brauchbar.

      Ich habe 5 Festplatten in meinem Desktop, 1x M2 NVME SSD, 2x SATA SSD, 2x SATA HDD(Spiele Assets und UnrealEngine-Projekte brauchen sehr sehr viel Platz). Dein Tool ist limitiert auf 2. Dann kommen wir nun zum RAM, in der Funktion GetRAMInfo(), verwendest du einen StringBuilder um einen Text zu verketten, dieser Text hat weil du StringBuilder.AppendLine verwendest mehrere Zeilen, du hast eine SingleLine-TextBox zur Ansicht.

      Weiter mit CPUs. Das sieht man zwar eher selten, aber es gibt Boards wo man mehrere CPUs verbauen kann. Im Büro habe ich so eine WorkStation, da hab ich 2 CPUs drin. Genau das gleiche mit GPUs. In der Workstation habe ich 2 GPUs, es kann aber auch nur eine angezeigt werden.

      Dann vermisse ich weitere Hardware. Was ist mit optischen Laufwerken? Also CD, DVD, BD Laufwerke/Brenner. Werden zwar immer seltener verbaut, aber es gibt sie immer noch!

      @Amelie hat recht mit der Aussage, das dein Tool noch sehr unausgegoren ist. Da gibts einiges was noch verbesserungswürdig ist.

      @mehmetqan Ist der Download bei diesem trackingverseuchten Hoster die Projektmappe? Ich frage weil der Thread als OpenSource getagt ist. Wenn ja, leg lieber ein Github-Account an und nutze diese Platform um den Source zu teilen. Ich habs vorgezogen zu dekompilieren, anstatt dort runterzuladen um zu schauen was du da gemacht hast.

      PS.
      Gerade ist mir noch etwas aufgefallen, CPUs haben ja heutzutage mehr als einen Kern. Informationen darüber wären doch auch nützlich. Ich weis nicht ob man mit WMI auch auslesen kann, wie viele Threads die CPU kann. Das wäre doch auch noch gut in so einem Tool.

      PPS.
      Jetzt sehe ich auch das der Quellcode nicht zur verfügung steht. Warum ist der Thread dann als OpenSource gekennzeichnet? @mehmetqan Korrigiere das doch bitte.
      Zitat von mir 2023:
      Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

      Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „DTF“ ()

      mehmetqan schrieb:

      Kritik ist ein wenig hart... aber dennoch motiviert es mich sehr!


      Freut mich das du die Kritik annimmst :thumbup: Mit Kritik kann nicht jeder gut umgehen. Böse meine ich das ja nicht, auch wenn es manchmal bei mir so wirkt. Den Code brauch ich zwar nicht, hab nur geschaut was du gemacht hast um Verbesserungsmöglichkeiten vorschlagen zu können. Aber der einer oder andere kann damit bestimmt etwas anfangen, kannst ja auch einfach hier eine EXE(ist ja Showroom) und optional auch eine bereinigte Projektmappe anhängen.
      Zitat von mir 2023:
      Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

      Soll mein PC Info Tool den Wert Ihrer Hardwarekomponenten mithilfe der eBay API ermitteln?

      Würden Sie es nützlich finden, wenn das PC Info Tool den Marktwert Ihrer Hardwarekomponenten anzeigt? 5
      1.  
        Ja (4) 80%
      2.  
        Nein (1) 20%
      Liebe Community,

      ich erwäge, ein neues Feature in mein PC Info Tool zu integrieren. Mit diesem Feature möchte ich den aktuellen Marktwert Ihrer gesamten Hardware basierend auf den Preisen bei eBay ermitteln.

      Feature-Beschreibung:
      1. Das Tool würde die eBay API nutzen, um aktuelle Preise für die spezifischen Hardwarekomponenten Ihres Systems abzurufen.
      2. Der ungefähre Gesamtwert Ihrer Hardwarekomponenten wird basierend auf diesen Preisen berechnet und angezeigt.
      3. Diese Funktion könnte Ihnen helfen, den potenziellen Verkaufswert Ihres PCs im gebrauchten Zustand besser zu verstehen.
      Also die Idee finde ich eigendlich sehr gut. Aber ich habe Zweifel ob man so wirklich einen angemessenen Preis ermitteln kann. Ich selbst habe schon hin und wieder auf Ebay und Kleinanzeigen nach Hardware geschaut. Einige Anbieter wollten Preise die fast dem Neupreis(zum Zeitpunkt des kaufes vom Verkäufer) gleichen. Ich glaube solche Angebote fliessen mit in deren Daten ein, wodurch ein zu hoher Preis zusammenkommen könnte.

      Es kommt IMO einfach erstmal auf einen Versuch an, aber dann musst du verifizieren das das wirklich realisitische Preise sind. Wegen meiner Zweifel werde ich nicht abstimmen, ich weis einfach nicht ob sowas, so wirklich realisitisch umsetzbar ist.
      Zitat von mir 2023:
      Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
      Ah komm @DTF probieren geht über studieren. Lass mich das machen und wir schauen wo wir wie fixen können ^^ Vielleicht gibt es ja hier einige Codder unter uns, die das Programm erweitern und neue Features vorschlagen. ☺️

      Es reicht auch einige einfache wenn und oder Funktionen hinzuzufügen um die Preise zu kalkulieren (z. B. Wenn preis durchschnitt = Abweichung >100€ dann mit weitere 50 Produkte vergleichen, wenn keine weitere Produkte da, dann als Info im Endergebnis schreiben) also es geht ja um just for fun und nicht ein bezahltes Produkt etc.
      Jupp, da hast du schon recht. Ich hab auch so einige JustForFun Projekte gemacht nur um daraus zu lernen, ob es gut geht oder nicht, du gewinnst an Erfahrung, welche auch einiges Wert ist. Na gut, ich klick denn doch auf den Button.
      Zitat von mir 2023:
      Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
      @mehmetqan

      Zur Kritik:
      Hart, denke ich nicht. Ich habe nur das geschrieben, was mir auffiel. ;)
      ---
      Ich habe keine Ahnung ob diese "ebay-Funktion" etwas hergibt. Kann man die Preise denn so bestimmen?
      Ich vergleiche mal mit einer Kamera.
      Top gepflegt, immer zu Wartung usw. schaut aus wie neu. Original Verpackungen. Neupreis: 1800€ nur ein Jahr alt.
      Das erste was gefragt wird; wieviele Auslösungen. Je nachdem geht der Preis dann schnell unter die 500€ Marke.

      Ähnlich stelle ich mir das bei PC Komponenten vor. CPU / Grafikkarte? Ständig übertaktet in einem Gamer-PC usw..???

      Naja Gut, als "Just for fun"-Projekt eine bestimmt gute Idee!
      Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
      @Amelie ich liebe Kritik wirklich, so bekomme ich immer faszinierende Ideen!!!! überleg mal (radioboxen 1-10 je nach dem was ausgewählt ist, mach der Durchschnitt wert einfach minus?)

      @RodFromGermany kannst du bitte den Thread einmal lesen bitte? Ich glaube du kannst mit deinem Wissen mir/uns helfen wie der Logik für Kalkulation sein könnte, oder?

      und was sagst du @VaporiZed?
      Okay.. @Amelie stell dir mal das Ganze so vor:

      Wir haben ein Wert und der ist z. B. 700€
      RadioBox gibt den Wert von Gebrauchtwert in Prozent. Wenn 0 ausgewählt wird der Wert nicht gekürzt, wenn 5 ausgewählt wird, wird der Wert um z. B. 14% weniger, also die RadioBoxen wählt der User, um eine Pflege Ranking für sein PC zu geben. 0 ist Zustand sehr gut, 5 Zustand sehr niedrig.

      PS: API Abruf kann man auch nach Kategorien beim Abruf rausfiltern. Beispiel nur Artikel anzeigen mit: Gebraucht, Neu etc. Man könnte auch in UI die Möglichkeit an den User geben, welche Produkte verglichen werden sollen (entweder oder)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mehmetqan“ ()

      mehmetqan schrieb:

      und was sagst du @VaporiZed?
      Gar nichts. Ich schaue mir Fremdprogramme im Forum grundsätzlich nicht an. Ich unterhalte mich im Forum über Code, nicht über Fertigprodukte.
      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

      Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
      Also ich habe es mir auch nicht anschauen können.




      Wenn selbst Chrome da schon Panik kriegt, dann weiß ich es ehrlich gesagt auch nicht.
      Was machst du in dem kleinen Ding, sodass alle Virenscanner sich da einscheißern?
      Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

      Meine Firma: Procyon Systems

      Selbstständiger Softwareentwickler & IT-Techniker.
      @siycah :D vielleicht einige usings? Ich werde mal am besten den Quellcode z.V. Stellen, kann aber sagen, dass da keine „Virus“ ist. Chrome detected (auch andere chromiums) ohne Herausgeber etc. „Virus“

      AssemblyInfo ist auch leer, siehe auch hier: stackoverflow.com/questions/40…am-is-detected-as-a-virus

      Virenscanner schlagen auch Alarm? Wie geht das? Bei mir Virustotal nahezu alles clean.


      Edit: virustotal.com/gui/file/691f36…3f5b1a3f0c7dbec?nocache=1

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mehmetqan“ ()

      Okay, mit Tricks habe ich es dann auch ans Laufen bekommen.Naja, mal zu allererst: hübsch isses nicht. Als Zweites: das Tool bietet mir keinen Mehrwert, gegenüber z.B. CPU-Z oder einfach mal sysinfo/Task Manager aufrufen, was mir sämtliche Infos auch mal hübsch darstellt.Was genau möchtest du mit dem Programm bezwecken, was die anderen Programme nicht/schlechter können?Ich kenne die Specs von meinem Rechner ziemlich genau, auch den Preis/Wert. Dein Programm spiegelt das z.T. auch gar nicht wieder.Mal so grob die Specs von meinem Rechner:

      Spoiler anzeigen

      Quellcode

      1. MSI X670E Carbon MPG WiFi mit PCIe5
      2. AMD Ryzen 7 7700X
      3. 64GiB DDR5 5600MT/s
      4. RTX 3080 10G OC
      5. 1x Samsung 990 Pro 2TiB
      6. 1x Samsung 980 Pro 1TiB
      7. 2x Samsung 970 Evo Plus 1TiB
      8. 1x ST2000 SATA 6G (Seagate Barracuda) HDD
      9. 1x ST1000 SATA 6G (Seagate Barracude) HDD
      10. 1x Kingston SATA 6G 250GiB SSD
      11. 1x 24" 1080p Monitor
      12. 2x 32" 2K Monitore


      Das Ausgabeformat und die Tatsache, dass dieses Fenster permanent oben bleiben sind übrigens echt Murcks. Das hätte so niemals sein dürfen.

      Nun zu dem, was dein Tool ausspuckt:

      Quellcode

      1. Motherboard:
      2. Product: MPG X670E CARBON WIFI (MS-7D70)
      3. Manufacturer: Micro-Star International Co., Ltd.


      Ist richtig, steht auch so im WMI.

      Quellcode

      1. Netzwerkadapter:
      2. Name: Realtek Gaming 2.5GbE Family Controller
      3. MACAddress: 04:7C:16:70:67:EC
      4. Speed: 2500000000 bps
      5. Name: VirtualBox Host-Only Ethernet Adapter
      6. MACAddress: 0A:00:27:00:00:06
      7. Speed: 1000000000 bps


      Von den physikalischen Adaptern fehlt einer, dann fehlen noch zig weitere virtuelle Adapter. Warum ausgerechnet VBox dort auftaucht ist mir ein Rätsel.
      Außerdem: Lass das mit den Baudraten, wir sind hier nicht auf LIN, CAN oder RS232 unterwegs. Gib den Kram in Gbit an.

      Die USB-Geräte überspringe ich, das ist komplett Kraut und Rübe, was das Ding ausspuckt. Solchen Technobrabbel will auch ich nicht lesen.

      Zun den Videoadaptern:

      Quellcode

      1. Videoausgänge:
      2. DeviceName: AMD Radeon(TM) Graphics
      3. DisplayFlags: 0
      4. DisplayFrequency: 60 Hz


      50% Fehlerquote. :thumbdown:


      Wiederholrate ist übrigens auch Murcks, an dem internen Ding ist keins der drei Bildschirme angeschlossen.
      Die könnte man übrigens auch anzeigen, mitsamt wirklich interessanter Infos über das Gerät.



      Bei den Soundkarten wird meine NVidia erfolgreich erkannt. Also kaputt ist die Karte jedenfalls nicht ;)

      Quellcode

      1. Soundkarten:
      2. ProductName: AMD High Definition Audio Device
      3. Manufacturer: Advanced Micro Devices
      4. ProductName: NVIDIA High Definition Audio
      5. Manufacturer: NVIDIA
      6. ProductName: CORSAIR VOID ELITE Wireless Gaming Headset
      7. Manufacturer: CORSAIR
      8. ProductName: NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
      9. Manufacturer: NVIDIA
      10. ProductName: NVIDIA Broadcast
      11. Manufacturer: NVIDIA
      12. ProductName: USB Audio Device
      13. Manufacturer: (Generic USB Audio)
      14. ProductName: USB Audio 2.0
      15. Manufacturer: Microsoft


      Und die Peripheriegeräte da so in eine Liste hinzurotzen ist übrigens auch ziemlich uncool.
      Hier mal ein Ausschnitt:

      Quellcode

      1. Name: ACPI x64-based PC
      2. Description: ACPI x64-based PC
      3. Name: K:\
      4. Description: MassStorageClass
      5. Name: PCI Express Root Port
      6. Description: PCI Express Root Port
      7. Name: PCI Express Root Port
      8. Description: PCI Express Root Port


      Die Hälfte und mehr gehört da nicht hin.




      Jetzt höre ich aber auch auf, das alles aufzulisten. Ich glaube du verstehst was ich sage.
      Idee ist da, aber das ist allenfalls noch ein Konzept und lange kein fertiges Produkt.

      Der Code an und für sich schaut soweit erstmal... machbar aus. Typischer Anfängercode, halt.
      Und rechnen tut das Ding übrigens auch gar nichts.

      Zum Code direkt etwas Feedback:

      C#-Quellcode

      1. private void saveBtn_Click(object sender, EventArgs e) => this.SaveSettings();
      2. private void SaveSettings()
      3. {
      4. using (StreamWriter streamWriter = new StreamWriter(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "hardware_settings.txt")))
      5. {
      6. foreach (object checkedItem in this.checkedListBox1.CheckedItems)
      7. streamWriter.WriteLine(checkedItem.ToString());
      8. }
      9. int num = (int) MessageBox.Show("Einstellungen gespeichert.");
      10. }


      Lass den Quatsch. Das bringt dir nichts weiter, als eine größere VTable. Der Compiler würde das wahrscheinlich wegoptimieren, aber bei sowas fragt man sich einfach nur "?!" und dreht mit den Augen.

      C#-Quellcode

      1. private void LoadSettings()
      2. {
      3. string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "hardware_settings.txt");
      4. if (!File.Exists(path))
      5. return;
      6. string[] source = File.ReadAllLines(path);
      7. for (int index = 0; index < this.checkedListBox1.Items.Count; ++index)
      8. {
      9. if (((IEnumerable<string>) source).Contains<string>(this.checkedListBox1.Items[index].ToString()))
      10. this.checkedListBox1.SetItemChecked(index, true);
      11. }
      12. }

      Das würde explodieren, wenn da einer in die Datei was schreibt.
      Dazu kommt, dass einfache Textdateien keine Konfigurationsdateien sind. Es gibt genug Libs, wie Newtonsoft.Json, YamlDotNet, QuickType, etc. die mit Schemas umgehen können und Typsicher sind.
      Wenn du den Bums nicht menschenlesbar haben willst, kannst du auch Protobuf nehmen.

      C#-Quellcode

      1. private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
      2. {
      3. }


      Toter Code ist tot. Lösch ihn. Du lässt ja auch keine Bananenschalen rumliegen.

      C#-Quellcode

      1. foreach (string str in File.Exists(path) ? File.ReadAllLines(path) : new string[0])
      2. {
      3. if (str != null)
      4. {
      5. switch (str.Length)
      6. {
      7. case 7:
      8. switch (str[0])
      9. {
      10. case 'G':
      11. if (str == "Gehäuse")
      12. {
      13. stringBuilder.AppendLine("Gehäuse:");
      14. stringBuilder.AppendLine(this.GetCaseInfo());
      15. stringBuilder.AppendLine();
      16. continue;
      17. }
      18. continue;
      19. case 'K':
      20. if (str == "Kühlung")
      21. {
      22. stringBuilder.AppendLine("Kühlung:");
      23. stringBuilder.AppendLine(this.GetCoolingInfo());
      24. stringBuilder.AppendLine();
      25. continue;
      26. }
      27. continue;
      28. default:
      29. continue;
      30. }


      Auch das ganze Zeugs... weg damit.

      Warum machst du dir das Leben so kompliziert, wenn du es z.B. auch so machen könntest (ACHTUNG: UNGETESTET!)?:

      C#-Quellcode

      1. using System;
      2. namespace Test {
      3. public class TestClass {
      4. public bool GetMonitors { get; set }
      5. public bool GetCpuInfo { get; set; }
      6. public void Serialise() {
      7. var json = System.Text.Json.JsonSerializer.Serialize(this);
      8. }
      9. public static TestClass Deserialise(string json) {
      10. return System.Text.Json.JsonSerializer.Deserialize<TestClass>(json);
      11. }
      12. }
      13. }
      14. /**
      15. Result:
      16. {
      17. "GetMonitors": true,
      18. "GetCpuInfo": false
      19. }
      20. */


      Und zu guter Letzt:

      C#-Quellcode

      1. private string GetVideoOutputsInfo()
      2. {
      3. StringBuilder stringBuilder = new StringBuilder();
      4. foreach (ManagementBaseObject managementBaseObject in new ManagementObjectSearcher("select * from Win32_DisplayConfiguration").Get())
      5. {
      6. stringBuilder.AppendLine("DeviceName: " + managementBaseObject["DeviceName"]?.ToString());
      7. stringBuilder.AppendLine("DisplayFlags: " + managementBaseObject["DisplayFlags"]?.ToString());
      8. stringBuilder.AppendLine("DisplayFrequency: " + managementBaseObject["DisplayFrequency"]?.ToString() + " Hz");
      9. }
      10. return stringBuilder.ToString();
      11. }


      Wenn du dein Programm schon auf Deutsch schreibst, dann sieh' auch zu, dass die Daten auf Deutsch lesbar sind. Nicht jeder spricht englisch und noch weniger Leute können was mit begrifflichkeiten wie "DisplayFlags" anfangen.
      Bau dir dafür einen richtigen Parser und wenn du schon dabei bist, mach es translatable und jut.

      Zum ganzen Virusthema: keine Ahnung. Aber meine Firewall wollte es auch nicht.
      Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

      Meine Firma: Procyon Systems

      Selbstständiger Softwareentwickler & IT-Techniker.

      mehmetqan schrieb:

      Opensource


      Nenenenene, einfach hier wild Code ins Forum posten ist nicht der Sinn hinter open-source.
      Siehe Git - Grundlagen, Branches, Best-Practices und mehr.
      Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

      Meine Firma: Procyon Systems

      Selbstständiger Softwareentwickler & IT-Techniker.
      Für mich ist der Code Open Source, sobald ich ihn hier poste. Ich bin jedoch nicht beruflich in diesem Bereich tätig, sondern mache das nur als Hobby. Deine Kommentar über das:
      Nenenenene, einfach hier wild Code ins Forum posten ist nicht der Sinn hinter open-source. (Ist der n und e Taste stecken geblieben? :D) empfinde ich als etwas störend.

      Ich kenne mich nicht mit Git aus und habe auch nicht vor, mich damit auseinanderzusetzen, da es mir weder jetzt noch in der Zukunft nützlich erscheint. Wenn das Posten von Code hier für dich oder die Admins nicht als Open Source gilt, dann werde ich das entsprechende Tag ändern.

      Ich verstehe nicht, warum dich das so sehr^10 nervt, aber danke trotzdem für deine Antwort.