Welche Programmiersprache?
Hallo ich möchte eine Gui Anwendung bauen mit der man seinen PC optimieren kann zum Beispiel es ein Widget gibt wo man den Energiesparmodus auf Höchstleistung stellen kann. Also was brauche ich eigentlich: Gui, und halt effizienten Zugriff auf das System zb. auch Reg Edit so das ich quasi das ganze System optimieren kann vielleicht auch ein BIOS ohne Passwort.
3 Antworten
Eigentlich spielt die verwendete Programmiersprache keine große Rolle, Hauptsache Du hast damit Zugriff auf ein Framwork, welches die GUI-funktionalität bereitstellt.
Unter .Net ist das gewöhnlich Forms.
In C# sähe eine ganz simple Demo folgendermaßen aus:
Demo.cs
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
public class Form1 : Form {
private Button Button1;
private Label Display1;
//Native Funktion zum setzen der aktiven Powershemas
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
static extern UInt32 PowerSetActiveScheme(IntPtr RootPowerKey,Guid SchemeGuid);
private Guid HeighProfile = Guid.Parse("8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c");
public Form1() {
this.Size = new Size(600,140);
Display1 = new Label();
Display1.Text = "Irgendein Text";
Display1.Location = new Point(10, 20);
Display1.AutoSize = true;
this.Controls.Add(Display1);
Button1 = new Button();
Button1.Text = "Setze Höchstleistung";
Button1.Location = new Point(10, 40);
Button1.AutoSize = true;
Button1.Click += new System.EventHandler(Button1_Click);
this.Controls.Add(Button1);
}
private void Button1_Click(object sender, EventArgs e){
Display1.Text = "Jetz sollte Höchstleitun aktiv sein";
PowerSetActiveScheme(IntPtr.Zero,HeighProfile);
}
static void Main() {
Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
die gleiche Sache in Powershell:
demo.ps1
#console ausblenden
$user32=Add-Type -m '[DllImport("user32.dll")] public static extern void ShowWindow(IntPtr hWnd, int nCmdShow);' -Name myAPI -passthru
$hwnd=(gps -id $PID).MainWindowHandle
$user32::ShowWindow($hwnd, 0)
Add-Type -AssemblyName System.Windows.Forms
$Form = New-Object System.Windows.Forms.Form
$Form.Text = 'Irgendwas'
$Form.Size = '600,140'
$Display1 = New-Object System.Windows.Forms.Label
$Display1.Location = '10,10'
$Display1.Text = 'Irgendein Text'
$Display1.AutoSize = $True;
$Form.Controls.Add($Display1)
$Button1 = New-Object System.Windows.Forms.Button
$Button1.Location = '10,40'
$Button1.Text = 'Setze Hoechstleistung'
$Button1.AutoSize = $True
$Button1_Action={
$Button1.Enabled = $False
$Display1.Text = "Jetz sollte Hoechstleitung aktiv sein"
#da es kein Problem ist Powershell von Consol-Befehlen gebrauch zu machen, einfach den bequemsten Weg nutzen
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c #setze Höchstleistung
}
$Button1.Add_Click( $Button1_Action )
$Form.Controls.Add($Button1)
$Null=$Form.ShowDialog()
Auf einem Windows-rechner ist es natürlich am einfachsten mit C# oder Powershell kleine Projekte zu programmieren.
Theoretisch benötigt man nicht mal Visual Studio ein simpler Compiler "csc.exe" befindet sich auf jedem Windowssystem.
Hier eine Kleine Batch mit welcher man kleine C# Programme mit .Net-Framework 4.8 compilieren kann:
compile.cmd
@echo off
chcp 65001 >nul
if "%~1"=="" (
echo C# Compiler-Batch.
echo:
echo Ziehe eine Datei mit C#-Source auf "%~nx0" ...
timeout 7
exit /b
)
for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d /o:-n "%SystemRoot%\Microsoft.NET\*csc.exe"') do (
set "csc=%%v"
)
if "%csc%"=="" (
echo Kein C#-Compiler gefunden
echo Bitte installiere Microsoft-.NetFramework!
pause
exit /b
) else (
echo "%csc%" gefunden.
)
set "WPF_Path=C:\Windows\Microsoft.NET\Framework64\v4.0.30319\WPF"
set "WPF_Speech=/reference:%WPF_Path%\system.speech.dll"
set "WPF_Media=/reference:%WPF_Path%\PresentationCore.dll"
set "WPF_WindowBase=/reference:%WPF_Path%\WindowsBase.dll"
set "Platform=/platform:anycpu"
set "Switches=/nologo %Platform% %WPF_Speech% %WPF_Media% %WPF_WindowBase%"
rem teste ob es sich um eine Windowsformsaplikation handeln könnte
for /f "tokens=*" %%a in ('type "%~f1" ^|findstr /irc:"using *System\.Windows\.Forms *;" /c:"static *....* *Main *(.*)" /c:"Application.Run *(.*)"') do @(
set /a "IsWinApp+=1"
echo %%a |find /i "Main">nul &&(set "IsApp=1")
)
if "%IsWinApp%" == "3" (call :AskCompileWinApp)
if "%IsApp%" neq "1" (goto :NoApp)
set "inputFile=%~f1"
set "outputFile=%~dpn1.exe"
call:compile %Switches% -out:"%outputFile%" "%inputFile%" && (
echo Hat geklappt...
echo ...." %~dpn1.exe"...
echo Ausgabe Deines Programms:
cd /d "%~dp1"
echo:
"%~dpn1.exe"
echo:
) || (
echo Compilererror...
echo:
type compile.log
echo:
)
pause
exit /b
::::::::: subroutines
:compile
"%csc%" %* >compile.log
exit /b
:AskCompileWinApp
echo:
echo possible WindowsApplication
echo Compile as WindowsGUIApp without Console?
choice /c yn /t 1 /d y
if %errorlevel% equ 1 (set Switches=%Switches% /target:winexe)
exit /b
:NoApp
echo Maybe an Library?
echo Doing nothing jet!
pause
einfach eine .cs-Datei auf die Batch ziehen...
Mein persönlicher Favorit für GUI Anwendungen ist Flutter.
Es gibt ein Flutter Package mit Zugriff auf die Win32Api, womit vermutlich einiges gehen könnte.
Du kannst in Dart (Programmiersprache von Flutter auch C Code ausführen. So hättest du C für die Funktionalität und Flutter für die GUI.
Was genau möglich ist, wird auch davon abhängen, was überhaupt in Windows geändert werden. Mit C bzw. auch C++ könnten die Chancen am besten sein.
Native Windows Widgets sollen mit Flutter nicht möglich sein. Du hättest dann ein einfach Fenster vom Programm.
Das Setzen vom Höchstleistungsmodus müsste hiermit funktionieren. Es ist ein Teil der Win32 API und wird in Dart, C, C++, C# und vermutlich weiteren Sprachen verfügbar sein.
C oder cpp?
Ich kenn mich nicht damit aus was der Unterschied zwischen den beiden ist
Hallo vielen Dank. Wäre Python noch eine Option trotz der Langsamkeit?