Click here to Skip to main content
15,887,917 members
Home / Discussions / C#
   

C#

 
AnswerRe: Best way to declaring multiple objects Pin
OriginalGriff19-Aug-13 20:55
mveOriginalGriff19-Aug-13 20:55 
GeneralRe: Best way to declaring multiple objects Pin
rfresh20-Aug-13 8:14
rfresh20-Aug-13 8:14 
GeneralRe: Best way to declaring multiple objects Pin
OriginalGriff20-Aug-13 8:41
mveOriginalGriff20-Aug-13 8:41 
QuestionC# Iframe WebBrowser Automation Pin
Abhinav Chitre19-Aug-13 9:41
Abhinav Chitre19-Aug-13 9:41 
AnswerRe: C# Iframe WebBrowser Automation Pin
Richard MacCutchan19-Aug-13 20:51
mveRichard MacCutchan19-Aug-13 20:51 
QuestionC Code Inside Visual Studio 2010? Pin
Member 944713619-Aug-13 5:14
Member 944713619-Aug-13 5:14 
AnswerRe: C Code Inside Visual Studio 2010? Pin
DaveyM6919-Aug-13 5:28
professionalDaveyM6919-Aug-13 5:28 
QuestionWinforms, Console, IPC and stuff Pin
Member 965483119-Aug-13 0:10
Member 965483119-Aug-13 0:10 
Sorry for the not so descriptive or apt title but I have been trying to do this for a while now but to no effect and its getting to me. I have a chat server(console application) and a chat client (winform application) and a separate winform application which only has a button on it. Whenever there is any new message and if the client window is minimized then i want that the button on that separate winform turns red. Once the client window gets restored or maximized then it should turn back to yellow which is also the original color of the button. I am able to achieve the change of color when a message is received but not taking into consideration the minimized state etc. If i try to do that using IsIconic nothing happens. What i have done is that get a handle of the client winform in the server application and checking if it is Iconic or not. Please guide as i am stuck on this for a while. The code is as follows:

The Server Application:

using System;
using System.Threading;
using System.Net.Sockets;
using System.Text;
using System.Collections;
using System.Net;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Diagnostics;


namespace ConsoleApplication1
{

class Program
{

public static Hashtable clientsList = new Hashtable();

public static void Main()
{
string mutex_id = "MY_APP";
using (Mutex mutex = new Mutex(false, mutex_id))
{
if (!mutex.WaitOne(0, false))
{
return;
}

var loaclAddress = IPAddress.Parse("127.0.0.1");
var serverSocket = new TcpListener(loaclAddress, 81);
/*
TcpListener serverSocket = new TcpListener(8888);

*/

TcpClient clientSocket = default(TcpClient);
int counter = 0;
serverSocket.Start();
Console.WriteLine("Chat Server Started ....");
counter = 0;

while ((true))
{
counter += 1;
clientSocket = serverSocket.AcceptTcpClient();
byte[] bytesFrom = new byte[10025];
string dataFromClient = null;
NetworkStream networkStream = clientSocket.GetStream();
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
clientsList.Add(dataFromClient, clientSocket);
broadcast(dataFromClient + " Joined ", dataFromClient, false);
Console.WriteLine(dataFromClient + " Joined chat room ");
handleClinet client = new handleClinet();
client.startClient(clientSocket, dataFromClient, clientsList);
}
clientSocket.Close();
serverSocket.Stop();
Console.WriteLine("exit");
Console.ReadLine();

}

}

public static void broadcast(string msg, string uName, bool flag)
{

foreach (DictionaryEntry Item in clientsList)
{

TcpClient broadcastSocket;
broadcastSocket = (TcpClient)Item.Value;
NetworkStream broadcastStream = broadcastSocket.GetStream();
Byte[] broadcastBytes = null;
if (flag == true)
{
broadcastBytes = Encoding.ASCII.GetBytes(uName + " says : " + msg);
}
else
{
broadcastBytes = Encoding.ASCII.GetBytes(msg);
}
broadcastStream.Write(broadcastBytes, 0, broadcastBytes.Length);
broadcastStream.Flush();
}

} //end broadcast function

}//end Main class





public class handleClinet
{

//This is used to send custom message to your Winforms
[DllImport("user32")]
private static extern int SendMessage(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam);
//This is used to find your winforms window
[DllImport("user32", CharSet = CharSet.Auto)]
private static extern IntPtr FindWindow(string className, string windowName);
//This is used to register custom message so that it's ensured to be unique
[DllImport("user32")]
private static extern int RegisterWindowMessage(string msgName);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsIconic(IntPtr hWnd);


TcpClient clientSocket;
string clNo;
Hashtable clientsList;

public void startClient(TcpClient inClientSocket, string clineNo, Hashtable cList)
{

this.clientSocket = inClientSocket;
this.clNo = clineNo;
this.clientsList = cList;
Thread ctThread = new Thread(doChat);
ctThread.Start();
}

private void doChat()
{

int requestCount = 0;
byte[] bytesFrom = new byte[10025];
string dataFromClient = null;
Byte[] sendBytes = null;
string serverResponse = null;
string rCount = null;
requestCount = 0;

while ((true))
{
try
{
requestCount = requestCount + 1;
NetworkStream networkStream = clientSocket.GetStream();
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
Console.WriteLine("From client - " + clNo + " : " + dataFromClient);

int msg = 0;
IntPtr hwnd = IntPtr.Zero;
int red = RegisterColorCode(Color.Red);
//Console.WriteLine(red);
int yellow = RegisterColorCode(Color.Yellow);
//Console.WriteLine(yellow);
msg = 49806;
if (hwnd == IntPtr.Zero)
hwnd = FindWindow(null, "Winforms Application");
IntPtr hwnd1 = FindWindow(null, "ClientApp");

if (IsIconic(hwnd1)) //this if-else seems to have no effect as no color changes in the button on the winform
{
if (hwnd != IntPtr.Zero)
SetBackColor(hwnd, msg);
}
else
{
msg = 50054;
SetBackColor(hwnd, msg);
}

//SetBackColor(hwnd, msg);
//If i write only this then color changes but not on minized state its changed once and for all...
//what i want is for the previous if else condition to work**

hwnd1 = IntPtr.Zero;


rCount = Convert.ToString(requestCount);
Program.broadcast(dataFromClient, clNo, true);

hwnd = IntPtr.Zero;
}
catch (Exception ex)
{

Console.WriteLine(ex.ToString());

}

}//end while

}//end doChat

static int RegisterColorCode(Color c)
{
return RegisterWindowMessage(c.ToString());
}


static void SetBackColor(IntPtr hwnd, int colorCode)
{
SendMessage(hwnd, colorCode, IntPtr.Zero, IntPtr.Zero);
}


} //end class handleClinet

}//end namespace


The Client Application

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
using System.Runtime.InteropServices;

namespace chatClient
{
public partial class Form1 : Form
{

TcpClient clientSocket = new System.Net.Sockets.TcpClient();
NetworkStream serverStream;//new NetworkStream(clientSocket); //default(NetworkStream);
string readData = null;

public Form1()
{
InitializeComponent();
Text = "ClientApp";
}

private void Form1_Load(object sender, EventArgs e)
{

}


private void button1_Click(object sender, EventArgs e)
{

byte[] outStream = System.Text.Encoding.ASCII.GetBytes(textBox2.Text + "$");
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();
}

private void button2_Click(object sender, EventArgs e)
{
readData = "Conected to Chat Server ...";
msg();
clientSocket.Connect("127.0.0.1", 81);
serverStream = clientSocket.GetStream();

byte[] outStream = System.Text.Encoding.ASCII.GetBytes(textBox3.Text + "$");
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();

Thread ctThread = new Thread(getMessage);
ctThread.Start();

button2.Enabled = false;
}

private void getMessage()
{
while (true)
{
serverStream = clientSocket.GetStream();
int buffSize = 0;
byte[] inStream = new byte[10025];
buffSize = clientSocket.ReceiveBufferSize;
serverStream.Read(inStream, 0, buffSize);
string returndata = System.Text.Encoding.ASCII.GetString(inStream);
readData = "" + returndata;
msg();
}
}

private void msg()
{
if (this.InvokeRequired)
this.Invoke(new MethodInvoker(msg));
else
textBox1.Text = textBox1.Text + Environment.NewLine + " >> " + readData;
}

private void textBox2_TextChanged(object sender, EventArgs e)
{

}

}
}



The Winform Apllication which has the button on it:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;


namespace consoleMR
{
public partial class Form1 : Form
{
[DllImport("user32")]
private static extern int RegisterWindowMessage(string msgName);

int red, yellow;

public Form1()
{
InitializeComponent();

red = RegisterColorCode(Color.Red);
yellow = RegisterColorCode(Color.Yellow);
//Set your form caption to a specified (must be unique at the time it runs)
Text = "Winforms Application";
}

private int RegisterColorCode(Color c)
{
return RegisterWindowMessage(c.ToString());
}

private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MINIMIZE = 0xf020;
private const int SC_MAXIMIZE = 0xf030;
private const int SC_RESTORE = 0xF120;



protected override void WndProc(ref Message m)
{

if (m.Msg == WM_SYSCOMMAND)
{
if (m.WParam.ToInt32() == SC_MAXIMIZE || m.WParam.ToInt32() == SC_RESTORE)
{

button1.BackColor = Color.Yellow;
this.WindowState = FormWindowState.Maximized;
return;
}
}
switch (m.Msg)
{
case 49806:
button1.BackColor = Color.Red;
return;
case 570445:
button1.BackColor = Color.Yellow;
return;
}
base.WndProc(ref m);
}

private void buttonUCT_Click(object sender, EventArgs e)
{
Process.Start("C:\\Users\\MainUser\\Documents\\Visual Studio 2010\\Projects\\chatServer\\chatServer\\bin\\Debug\\chatServer.exe");
}

}
}

I have been stuck on this for a while now and would really appreciate any help or sample code or correction of code...really anything at all
SuggestionRe: Winforms, Console, IPC and stuff PinPopular
Richard MacCutchan19-Aug-13 2:07
mveRichard MacCutchan19-Aug-13 2:07 
QuestionHow to make random Reflection for a ball with c # code? Pin
Member 1020541618-Aug-13 20:11
Member 1020541618-Aug-13 20:11 
AnswerRe: How to make random Reflection for a ball with c # code? Pin
Pete O'Hanlon18-Aug-13 20:40
mvePete O'Hanlon18-Aug-13 20:40 
AnswerRe: How to make random Reflection for a ball with c # code? Pin
Mycroft Holmes18-Aug-13 21:21
professionalMycroft Holmes18-Aug-13 21:21 
QuestionListbox suggestion from textbox Pin
dudz artiaga18-Aug-13 5:33
dudz artiaga18-Aug-13 5:33 
AnswerRe: Listbox suggestion from textbox Pin
Abhinav S18-Aug-13 6:18
Abhinav S18-Aug-13 6:18 
GeneralRe: Listbox suggestion from textbox Pin
dudz artiaga18-Aug-13 15:19
dudz artiaga18-Aug-13 15:19 
AnswerRe: Listbox suggestion from textbox Pin
SaqibRasheed18-Aug-13 11:18
SaqibRasheed18-Aug-13 11:18 
GeneralRe: Listbox suggestion from textbox Pin
dudz artiaga18-Aug-13 15:25
dudz artiaga18-Aug-13 15:25 
GeneralRe: Listbox suggestion from textbox Pin
SaqibRasheed19-Aug-13 2:45
SaqibRasheed19-Aug-13 2:45 
GeneralRe: Listbox suggestion from textbox Pin
BillWoodruff19-Aug-13 11:52
professionalBillWoodruff19-Aug-13 11:52 
AnswerRe: Listbox suggestion from textbox Pin
BillWoodruff18-Aug-13 14:12
professionalBillWoodruff18-Aug-13 14:12 
GeneralRe: Listbox suggestion from textbox Pin
dudz artiaga18-Aug-13 15:27
dudz artiaga18-Aug-13 15:27 
GeneralRe: Listbox suggestion from textbox Pin
BillWoodruff19-Aug-13 12:05
professionalBillWoodruff19-Aug-13 12:05 
AnswerRe: Listbox suggestion from textbox Pin
TnTinMn19-Aug-13 17:14
TnTinMn19-Aug-13 17:14 
GeneralRe: Listbox suggestion from textbox Pin
BillWoodruff20-Aug-13 17:48
professionalBillWoodruff20-Aug-13 17:48 
GeneralRe: Listbox suggestion from textbox Pin
TnTinMn21-Aug-13 4:34
TnTinMn21-Aug-13 4:34 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.