Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

Mouse Message Fail

bearhuggs813bearhuggs813 Posts: 4Member
I'm totally new with MFC programming and I am doing a server-client chat app (1 Client only). As far as I can tell, I got the first task working (which is to send, accept, and display string message to both the server and client interface).

Now, I was tasked to send and accept Mouse Messages (over LAN Network). To further clarify that, when I clicked the "Control Mouse" Button (me being the Server), I should be able to control the Client's Mouse. Got help from Mr. Google and forums, but I still cannot control the mouse of the client.

Please be nice with me as my way of coding may be bad, as I am new and still learning the do's and dont's of MFC Programming. Here's some parts of the code. Thanks.

Problem: I still cannot control the Client's Mouse =,(
[code]
static LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam,LPARAM lParam);
HHOOK hook;
CDialog* hwnd;

CCriticalSection c_s;

UINT ThreadProcess(LPVOID param)
{

CSingleLock lock(&c_s);
lock.Lock();
msgString *udata;
CString m_receive, a, b, ax, ay;
int iLen,i,in;
char *pBuf =new char [1025];


iLen=((CServerChatDlg*)hwnd)->Connect.Receive(pBuf,1025);
udata = (msgString*)pBuf;

if(iLen == SOCKET_ERROR)
{
AfxMessageBox(L"Could not Receive");
}

else
{

pBuf[iLen]='';
a = CString(udata->cId, 2);
b = CString(udata->csMsg, 1000);

if (a=="00")
{
((CServerChatDlg*)hwnd)->RData += b;
((CServerChatDlg*)hwnd)->m_Display.SetWindowText(((CServerChatDlg*)hwnd)->RData);
}

else if(a="01")
{
//Get int within the buffer.. x and y coord.

for (i=1; i<15; i++)
{
if (b[i] !=' ')
{
ax += b[i];
}
else
{
break;
}

in=i;
}

in +=4;

for (i=in; i<15; i++)
{
if (b[i] !=' ')
{
ay += b[i];
}
else
{
break;
}
}
int x= atoi((char*)(LPCTSTR)ax);
int y= atoi((char*)(LPCTSTR)ay);

((CServerChatDlg*)hwnd)->MoveMouse(x,y);
//SetCursorPos(x, y);
}

}

delete pBuf;

lock.Unlock();
return 0;
}
LRESULT CALLBACK MouseProc (int nCode, WPARAM wParam,LPARAM lParam)
{

LPARAM LParamTranslated;

LParamTranslated = ( ( MSLLHOOKSTRUCT* ) lParam )->pt.x ;
LParamTranslated = LParamTranslated | ( ( MSLLHOOKSTRUCT* ) lParam )->pt.y << 16 ;
HWND h = GetForegroundWindow();

if(nCode < 0)
{
CallNextHookEx(hook, nCode, wParam, lParam);
return 0;
}
//LPMSG msg = (LPMSG)lParam;
switch( wParam )
{
case WM_LBUTTONDOWN:
((CServerChatDlg*)hwnd)->OnMyMouseLButtonDown(wParam,lParam);
//::SendMessage( hwnd, UWM_MOUSELBUTTONDOWN, 0 , 0 );
break;

case WM_RBUTTONDOWN:
((CServerChatDlg*)hwnd)->OnMyMouseRButtonDown(0, 0);
break;

case WM_MOUSEMOVE:
((CServerChatDlg*)hwnd)->OnMyMouseMove(0, 0);
break;
default:
break;
}
return CallNextHookEx(hook, nCode, wParam, lParam);
//return 1;
}

LRESULT CServerChatDlg::OnMyMouseLButtonDown(WPARAM, LPARAM param)
{
CSingleLock lock(&c_s);
lock.Lock();
char *pBuf =new char [1025];
CPoint point;
GetCursorPos(&point);
CString a;
a.Format(_T("Left Button at P(%d, %d)"), point.x, point.y);
Connection.Send(pBuf,a.GetLength());
return 1;
lock.Unlock();
}

LRESULT CServerChatDlg::OnMyMouseRButtonDown(WPARAM, LPARAM param)
{
CSingleLock lock(&c_s);
lock.Lock();
char *pBuf =new char [1025];
CPoint point;
GetCursorPos(&point);
CString a;
a.Format(_T("Right Button at P(%d, %d)"), point.x, point.y);
Connection.Send(pBuf,a.GetLength());
return 1;
lock.Unlock();
}

LRESULT CServerChatDlg::OnMyMouseMove(WPARAM, LPARAM param)
{

CSingleLock lock(&c_s);
lock.Lock();
char *pBuf =new char [1025];
CPoint point;
GetCursorPos(&point);
CString a;
a.Format(_T("Move at P(%d, %d)"), point.x, point.y);
Connection.Send(pBuf,a.GetLength());
return 1;
lock.Unlock();

}


void CServerChatDlg::OnBnClickedControl()
{
// TODO: Add your control notification handler code here

CString ctext;
m_control.GetWindowText(ctext);

if (ctext=="Control Mouse")
{
hook = SetWindowsHookEx (WH_MOUSE, MouseProc, NULL, GetCurrentThreadId());
m_control.SetWindowText(_T("Stop"));
}
else
{
UnhookWindowsHookEx(hook);
m_control.SetWindowText(_T("Control Mouse"));
}
}

void CServerChatDlg::MoveMouse(int x, int y)
{
// TODO: Add your control notification handler code here
INPUT input={0};
input.type = INPUT_MOUSE;
input.mi.dx = (x * (65535.0f / (1280-1)));
input.mi.dy = (y * (65535.0f / (1024-1)));
input.mi.mouseData = 0;
input.mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE);
input.mi.time = 0;
input.mi.dwExtraInfo = 0;

SendInput(1,&input,sizeof(INPUT));
}[/code]
Sign In or Register to comment.