Welche Programmiersprache?

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...

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

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?

Woher ich das weiß:Hobby – hobby programmierer seit 2020

Tino17487 
Beitragsersteller
 03.11.2023, 13:42

Hallo vielen Dank. Wäre Python noch eine Option trotz der Langsamkeit?

0
SusgUY446  03.11.2023, 15:32
@Tino17487

Python ist nicht langsam wenn man halbwegs neue hardware hat

1
SusgUY446  03.11.2023, 15:33
@Tino17487

Ich kenn mich nicht damit aus was der Unterschied zwischen den beiden ist

1