Skriva ett enkelt GUI-baserat program i Windows, som går att köra utan ytterligare installationer?

Permalänk
Medlem

Skriva ett enkelt GUI-baserat program i Windows, som går att köra utan ytterligare installationer?

Jag behöver skriva ett enkelt hjälpprogram till jobbet. I princip behöver jag kunna markera text en text i valfritt program, anropa ett API, och visa ett resultat.

Programmeringen är inget större problem, oavsett språk, men jag har svårare att läsa mig till vad jag borde välja om målet är att få en portabel exekverbar binär för Windows, som inte kräver någon installation av ytterligare bibliotek för att köra.

Jag gissar att svaret egentligen är Visual Studio och .NET eller C#, men jag har inte tillgång till Visual Studio
Professional eller Enterprise, och att använda Community är väl licensmässigt lite tveksamt.

Vad finns det för bra alternativ?

Permalänk
Medlem
Skrivet av jaqob:

Vad finns det för bra alternativ?

Delphi eller Lazarus:
https://www.embarcadero.com/products/Delphi
https://www.lazarus-ide.org/

Visual Studio är ett härke utan sitt like

Går fint att be ChatGPT att skapa exempelkod

Permalänk
Medlem

Håller inte med walkir att Visual Studio är ett härke utan sitt like. Visst, VS är ett stort program, men funkar finfint. Använder du WinForms så har du ett program på bara några minuter.

Lite otydligt om du vill markera text i ett annat program. Det kan gå men är krångligt. Du behöver lyssna på Windows events och försöka tolka datan.
Ett enklare sätt vore kanske att kopiera texten i det andra programmet till Clipboard. Då kan du i ditt program automatiskt reagera på det, ge Focus till ditt GUI, och agera.

*edit: Winforms må vara gammalt, men oslagbart om man supersnabbt vill ha ett GUI
*edit2: Enligt en snabb googling, får VS Community användas av upp till 5 personer att utveckla program som säljs kommerciellt.

Permalänk
Medlem
Skrivet av walkir:

Delphi eller Lazarus:
https://www.embarcadero.com/products/Delphi
https://www.lazarus-ide.org/

Visual Studio är ett härke utan sitt like

Går fint att be ChatGPT att skapa exempelkod

När jag sa "oavsett språk" så fanns det ett underförstått "förutom Delphi och Pascal".
Är gammal nog för att ha pluggat Pascal i skolan, men hoppades slippa se det igen. Ska dock titta lite närmare, så tack för tipsen!

Skrivet av Supreme8001:

Håller inte med walkir att Visual Studio är ett härke utan sitt like. Visst, VS är ett stort program, men funkar finfint. Använder du WinForms så har du ett program på bara några minuter.

Lite otydligt om du vill markera text i ett annat program. Det går men är krångligt. Du behöver lyssna på Windows events och försöka tolka datan.
Ett enklare sätt vore kanske att kopiera texten i det andra programmet till Clipboard. Då kan du i ditt program automatiskt reagera på det och agera.

Min oro för Visual Studio handlar främst om licenserna. Jag tror inte jag kan använda Community-varianten för att göra ett program som kommer användas brett på ett företag, och det jag gör är inte viktigt nog för att betala för Professional eller Enterprise.

Prototypade en varitant med Python och tkinter, och ja, kopiera istället för att läsa från fönstret är ett bra förslag.

Edit: "In non-enterprise organizations, up to five users can use Visual Studio Community. In enterprise organizations (meaning those with >250 PCs or >$1 Million US Dollars in annual revenue), no use is permitted beyond the open source, academic research, and classroom learning environment scenarios described above."

Så nej, det kan jag inte använda.

Permalänk
Medlem
Skrivet av jaqob:

När jag sa "oavsett språk" så fanns det ett underförstått "förutom Delphi och Pascal".
Är gammal nog för att ha pluggat Pascal i skolan, men hoppades slippa se det igen.

Jo, fick själv lära mig "Strukturerad programmering i Turbo Pascal" på högskolan

Har för mig att bland annat Total Commander utvecklas i Lazarus numera, då många anser att Embarcadero är extremt giriga.

Tycker att Delphi/Lazarus känns väldigt bra optimerat jfm all bloat som annars förespråkas idag.

Skrivet av Supreme8001:

Håller inte med walkir att Visual Studio är ett härke utan sitt like. Visst, VS är ett stort program, men funkar finfint. Använder du WinForms så har du ett program på bara några minuter.

Jag överdrev lite, men ogillar att Visual Studio ofta (alltid?) är beroende av externa DLL:er i 100-tals versioner. I Delphi får jag en EXE-fil på 2MB som innehåller allt som behövs för att köra programmet.

Mina gamla VS-projekt har alltid krävt att jag letar DLL:er på nätet med ljus och lykta.

Permalänk
Medlem
Skrivet av jaqob:

Prototypade en varitant med Python och tkinter, och ja, kopiera istället för att läsa från fönstret är ett bra förslag.

Det går ju även att bygga ett "fristående" program av Python-kod med verktyg som PyInstaller. Inget jag testat, men kanske är värt att titta närmare på?

Permalänk
Skrivet av jaqob:

När jag sa "oavsett språk" så fanns det ett underförstått "förutom Delphi och Pascal".
Är gammal nog för att ha pluggat Pascal i skolan, men hoppades slippa se det igen. Ska dock titta lite närmare, så tack för tipsen!

Min oro för Visual Studio handlar främst om licenserna. Jag tror inte jag kan använda Community-varianten för att göra ett program som kommer användas brett på ett företag, och det jag gör är inte viktigt nog för att betala för Professional eller Enterprise.

Prototypade en varitant med Python och tkinter, och ja, kopiera istället för att läsa från fönstret är ett bra förslag.

Edit: "In non-enterprise organizations, up to five users can use Visual Studio Community. In enterprise organizations (meaning those with >250 PCs or >$1 Million US Dollars in annual revenue), no use is permitted beyond the open source, academic research, and classroom learning environment scenarios described above."

Så nej, det kan jag inte använda.

VS Code lär väl fungera

Permalänk
Medlem
Skrivet av bbbbbaaaaa:

VS Code lär väl fungera

Saknar inte VS Code helt stöd för visuell GUI-utveckling (läs Win32)? Bortsett via tredjepart?

Permalänk
Medlem

Jag vet inte om det är till hjälp men du kan ju alltid göra en office add-in?

https://learn.microsoft.com/en-us/office/dev/add-ins/develop/...

Permalänk
Medlem

För att skriva grafiska program i c++ finns QT (https://www.qt.io/), inte använt själv så kan inte recensera desto mer. Sen finns ju också internets hatobjekt: ElectronJS. Vilket i princip bygger en site som en körbar exe-fil till windows. Lite krångel såklart men massor med guider osv finns på nätet.

Permalänk
Medlem
Skrivet av trudelutt:

Det går ju även att bygga ett "fristående" program av Python-kod med verktyg som PyInstaller. Inget jag testat, men kanske är värt att titta närmare på?

Tack, det får nog bli den här lösningen för tillfället, även om det känns galet att behöva skicka med så pass mycket.
Men, kan inte låta bli att tycka det är lite märkligt att så det inte finns ett mer självklart svar på den här frågan...

Permalänk
Medlem

Jag tror att det "självklara" svaret är Lazarus om du vill fixa något snabbt och enkelt. Object Pascal med RAD är väldigt annorlunda från Turbo Pascal.

Permalänk
Hedersmedlem
Skrivet av walkir:

Jag överdrev lite, men ogillar att Visual Studio ofta (alltid?) är beroende av externa DLL:er i 100-tals versioner. I Delphi får jag en EXE-fil på 2MB som innehåller allt som behövs för att köra programmet.

Mina gamla VS-projekt har alltid krävt att jag letar DLL:er på nätet med ljus och lykta.

För c++ är standard att länka mot "Microsoft visual c++ runtime <version>" (som finns här, men ofta också redan är installerade) men man kan också välja att länka statiskt. .NET gillar också dll-filer, men på senare år har det tillkommit alternativ för att packa ihop projektets alla filer till en stor körbar exe-fil. Man kan baka in hela .net om man vill, men då blir det en stor fil.

Permalänk
Medlem
Skrivet av walkir:

Saknar inte VS Code helt stöd för visuell GUI-utveckling (läs Win32)? Bortsett via tredjepart?

Det går att koda mot wpf i VSC om man nu inte vill/kan köra VS eller Rider. Vill man se hur xaml-koden man skriver är tänkt att se ut medan man skriver den går det t.ex. att luta sig mot psscriptpad som har en wpf-designer. Tredjeparts går ju förstås med, då är avalonia antagligen ett ok val.

För att sedan få det i en ensam fil med ramverk inkluderat kan man nog titta på https://learn.microsoft.com/en-us/dotnet/core/deploying/singl...

Visa signatur

The power of GNU compiles you!
"Often statistics are used as a drunken man uses lampposts -- for support rather than illumination."

Permalänk
Medlem

Det verkar faktiskt vara möjligt att göra det du vill, genom lite kreativt användande av Win32-API:et.

Jag hade inte riktigt förväntat mig det, det brukade vara ett av argumenten till att gå över till Wayland att det är ett säkerhetsproblem i X Windows att applikationer kan komma åt varandras fönster.

Kopierar in den föreslagna C#-koden (som jag inte testat) här. Lösningen borde gå fint att översätta till alla språk från vilka man kan anropa Win32.

using System; using System.Runtime.InteropServices; using System.Windows; using System.Windows.Forms; namespace GetTextSelectedFromOtherApp { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Loaded+= new RoutedEventHandler(Window_Loaded); } private Timer _timer = new Timer(); private void Window_Loaded(object sender, RoutedEventArgs e) { _timer.Interval = 1000; _timer.Tick += new EventHandler(_timer_Tick); } void _timer_Tick(object sender, EventArgs e) { try { textBox1.Text = GetTextFromFocusedControl(); } catch (Exception exp) { textBox1.Text += exp.Message; } } private void button1_Click(object sender, EventArgs e) { _timer.Start(); } private string GetTextFromFocusedControl() { try { int activeWinPtr = GetForegroundWindow().ToInt32(); int activeThreadId = 0, processId; activeThreadId = GetWindowThreadProcessId(activeWinPtr, out processId); int currentThreadId = GetCurrentThreadId(); if (activeThreadId != currentThreadId) AttachThreadInput(activeThreadId, currentThreadId, true); IntPtr activeCtrlId = GetFocus(); return GetText(activeCtrlId); } catch (Exception exp) { return exp.Message; } } private string GetText(IntPtr handle) { int maxLength = 100; IntPtr buffer = Marshal.AllocHGlobal((maxLength + 1) * 2); SendMessageW(handle, WM_GETTEXT, maxLength, buffer); string w = Marshal.PtrToStringUni(buffer); Marshal.FreeHGlobal(buffer); return w; } [DllImport("user32.dll", EntryPoint = "WindowFromPoint", CharSet = CharSet.Auto, ExactSpelling = true)] public static extern IntPtr WindowFromPoint(Point pt); [DllImport("user32.dll", EntryPoint = "SendMessageW")] public static extern int SendMessageW([InAttribute] System.IntPtr hWnd, int Msg, int wParam, IntPtr lParam); public const int WM_GETTEXT = 13; [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] internal static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] internal static extern IntPtr GetFocus(); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] internal static extern int GetWindowThreadProcessId(int handle, out int processId); [DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] internal static extern int AttachThreadInput(int idAttach, int idAttachTo, bool fAttach); [DllImport("kernel32.dll")] internal static extern int GetCurrentThreadId(); } }

Permalänk
Skrivet av jaqob:

Jag behöver skriva ett enkelt hjälpprogram till jobbet. I princip behöver jag kunna markera text en text i valfritt program, anropa ett API, och visa ett resultat.

Programmeringen är inget större problem, oavsett språk, men jag har svårare att läsa mig till vad jag borde välja om målet är att få en portabel exekverbar binär för Windows, som inte kräver någon installation av ytterligare bibliotek för att köra.

Jag gissar att svaret egentligen är Visual Studio och .NET eller C#, men jag har inte tillgång till Visual Studio
Professional eller Enterprise, och att använda Community är väl licensmässigt lite tveksamt.

Vad finns det för bra alternativ?

Varför? Det är ju fritt att använda.
Jag använder hellre Visual Studio Community än Visual Studio Code....vilket är bara en simpel enkel texteditor.

Permalänk
Hedersmedlem
Skrivet av heretic16:

Varför? Det är ju fritt att använda.

För privatpersoner.
Mycket mer komplext för organisationer.

Klicka för mer information

b. Organizational License. If you are an organization, your users may use the software as follows:

i. Any number of your users may use the software to develop and test applications released under Open Source Initiative (OSI) approved open source software licenses.

ii. Any number of your users may use the software to develop and test extensions to Visual Studio.

iii. Any number of your users may use the software to develop and test device drivers for the Windows operating system.

iv. Any number of your users may use the software only for Microsoft SQL Server development when using the SQL Server Data Tools or the extensions “Microsoft Analysis Services Projects”, “Microsoft Reporting Services Projects”, or “SQL Server Integration Services Projects” to develop Microsoft SQL Server database projects or Analysis Services, Reporting Services, Power BI Report Server, or Integration Services projects.

v. Any number of your users may use the software to develop and test your applications as part of online or in person classroom training and education, or for performing academic research.

vi. If none of the above apply, and you are also not an enterprise (defined below), then up to 5 of your individual users can use the software concurrently to develop and test your applications.

vii. If you are an enterprise, your employees and contractors may not use the software to develop or test your applications, except for: (i) open source; (ii) Visual Studio extensions; (iii) device drivers for the Windows operating system; (iv) SQL Server development; and, (v) education purposes as permitted above.

An “enterprise” is any organization and its affiliates who collectively have either (a) more than 250 PCs or users or (b) one million U.S. dollars (or the equivalent in other currencies) in annual revenues, and “affiliates” means those entities that control (via majority ownership), are controlled by, or are under common control with an organization.

Visa mer
Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
Mobil: Moto G200

Permalänk
Medlem

För tillfället får nog mina kollegor hålla till godo med pyInstaller-versionen. Done is better than perfect. När jag får tid över ska jag prova att skriva om koden i Rust, med native-windows-gui.

Men jag tackar för tipsen och för exempelkoden!

Skrivet av heretic16:

Varför? Det är ju fritt att använda.
Jag använder hellre Visual Studio Community än Visual Studio Code....vilket är bara en simpel enkel texteditor.

Nu börjar jag bli gammal, men just att det bara är en simpel texteditor (i jämförelse med VS), är väl anledningen till att typ hela världen gått över till använda VSCode. Jag avskyr när det händer massa saker i bakgrunden. Ska jag göra ett GUI så vill jag definera det i koden, inte i någon xml-fil någonstans

Permalänk
Medlem
Skrivet av jaqob:

Nu börjar jag bli gammal, men just att det bara är en simpel texteditor (i jämförelse med VS), är väl anledningen till att typ hela världen gått över till använda VSCode. Jag avskyr när det händer massa saker i bakgrunden.

VSCodium borde väl vara ännu mer rätt då?
https://vscodium.com/
VS Code utan telemetry/tracking av Microsoft

Permalänk
Medlem
Skrivet av walkir:

VSCodium borde väl vara ännu mer rätt då?
https://vscodium.com/
VS Code utan telemetry/tracking av Microsoft

Jag menade utvecklingsmässigt, att man grafiskt bygger ett gränssnitt, ändrar egenskaper i tabeller och annat. Jag vill ha mina egenskrivna källkodsfiler och så lite annat som möjligt

Testade faktiskt vscodium vid något tillfälle, men vill minnas att det var någon extensions som inte funkade, och som jag inte orkade felsöka, så gick tillbaka till vscode.

Permalänk
Skrivet av Thomas:

För privatpersoner.
Mycket mer komplext för organisationer.

Klicka för mer information

b. Organizational License. If you are an organization, your users may use the software as follows:

i. Any number of your users may use the software to develop and test applications released under Open Source Initiative (OSI) approved open source software licenses.

ii. Any number of your users may use the software to develop and test extensions to Visual Studio.

iii. Any number of your users may use the software to develop and test device drivers for the Windows operating system.

iv. Any number of your users may use the software only for Microsoft SQL Server development when using the SQL Server Data Tools or the extensions “Microsoft Analysis Services Projects”, “Microsoft Reporting Services Projects”, or “SQL Server Integration Services Projects” to develop Microsoft SQL Server database projects or Analysis Services, Reporting Services, Power BI Report Server, or Integration Services projects.

v. Any number of your users may use the software to develop and test your applications as part of online or in person classroom training and education, or for performing academic research.

vi. If none of the above apply, and you are also not an enterprise (defined below), then up to 5 of your individual users can use the software concurrently to develop and test your applications.

vii. If you are an enterprise, your employees and contractors may not use the software to develop or test your applications, except for: (i) open source; (ii) Visual Studio extensions; (iii) device drivers for the Windows operating system; (iv) SQL Server development; and, (v) education purposes as permitted above.

An “enterprise” is any organization and its affiliates who collectively have either (a) more than 250 PCs or users or (b) one million U.S. dollars (or the equivalent in other currencies) in annual revenues, and “affiliates” means those entities that control (via majority ownership), are controlled by, or are under common control with an organization.

Visa mer

Ska detta vara ett problem att ett företag måste betala en licens?
Jag menar, man får ju mycket tillbaka om man använder ett verktyg som underlättar.

Tänk om alla hade använt CMake...vad dyr utvecklingstiden skulle vara då.

Tanken är att Visual Studio ska vara enkelt att skapa en applikation med, oavsett språk. Men det kommer självklart till ett pris.

Permalänk
Medlem
Skrivet av heretic16:

Ska detta vara ett problem att ett företag måste betala en licens?
Jag menar, man får ju mycket tillbaka om man använder ett verktyg som underlättar.

Tänk om alla hade använt CMake...vad dyr utvecklingstiden skulle vara då.

Tanken är att Visual Studio ska vara enkelt att skapa en applikation med, oavsett språk. Men det kommer självklart till ett pris.

Om vi hade använt Visual Studio till annat så hade det självklart inte varit ett problem, men jag lovar att det är enklare att skriva programmet, inkl. GUI och nätaccess, i assembler, med en hexeditor, än att få ett multinationellt företag att att upphandla Visual Studio för att jag ska skriva ihop ett fulhack som underlättar arbetet för ett antal kollegor.

Permalänk
Medlem

Hört gott om kombon https://avaloniaui.net och https://jetbrains.com/rider

Men funkar säkert bra med vscode

Permalänk
Medlem

Jag är inte helt med på scope för vad du behöver men du kan också skriva det i Powershell eftersom det är native i Windows.
Behöver du GUI kan du lägga in det i koden (WinForms eller WPF). Till sist kan du, om du vill, konvertera scriptet till en vanlig exe.

Visa signatur

🟢 Main: Ryzen7 5800X | Strix x470-I | 32GB | RTX2070S | Samsung C49RG9
🔵 unRaid: Ryzen5 2700X | B450M DS3H | 32GB
🟠 Tfn: Google Pixel 7 Lime Green

-:| @ eller citera för svar |:-

Permalänk

Jag har kört både QT och WinForms osv. Visst, dom fungerar....men dom är riktigt tråkiga, samt när projektet börjar bli stort, så är det mycket kod...och en sak till....allt är en klass.

Har @jaqob testat ImGui?

Permalänk
Medlem

Låter som att du bara skall formatera om text, eventuellt räkna lite på vissa uppgifter. Kan inte en fristående websida med javascript-kod vara det allra lägsta äpplet. Anropa sidan från valfri browser med "file:" och kör den lokalt.

<!DOCTYPE html> <html> <head> <title>JobAid</title> <style> #enter { background: yellow; } #output { background: wheat; } </style> <script> function fix_it(data) { return "Lite trevligare!\n\n" + data; } function handle_it() { let ent = document.getElementById("enter"); let out = document.getElementById("output"); let data = ent.value; data = fix_it(data); out.innerHTML = data; } </script> </head> <body> <form action="javascript:handle_it();"> <textarea id="enter" rows="10" cols="80"> </textarea> <p> <input type="submit"> </form> <textarea id="output" rows="10" cols="80"> </textarea> </body> </html>