-
May 4th, 2009, 09:10 PM
#1
COPYDATASTRUCT IPC reading data out
Hi,
In a c++ dll I am setting up a copydatastruct as follows:
Code:
enum MessageType
{
HCBT
//I will add more messages later
};
//CBT Action - what happened to the window, moved, resized etc.
enum HCBTAction
{
ACTIVATE,
CLICKSKIPPED,
CREATEWND,
DESTROYWND,
KEYSKIPPED,
MINMAX,
MOVESIZE,
QS,
SETFOCUS,
SYSCOMMAND,
Unknown
};
LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
WPARAM xParam = 'x';
HCBTAction ha;
if (nCode < 0) // do not process message
return CallNextHookEx(hcbthook, nCode, wParam, lParam);
switch (nCode)
{
case HCBT_ACTIVATE:
ha = ACTIVATE; break;
case HCBT_CLICKSKIPPED:
ha = CLICKSKIPPED; break;
case HCBT_CREATEWND:
ha = CREATEWND; break;
case HCBT_DESTROYWND:
ha = DESTROYWND; break;
case HCBT_KEYSKIPPED:
ha = KEYSKIPPED; break;
case HCBT_MINMAX:
ha = MINMAX; break;
case HCBT_MOVESIZE:
ha = MOVESIZE; break;
case HCBT_QS:
ha = QS; break;
case HCBT_SETFOCUS:
ha = SETFOCUS; break;
case HCBT_SYSCOMMAND:
ha = SYSCOMMAND; break;
default:
ha = Unknown; break;
}
HCBTMessage(tWindow, ha);
return CallNextHookEx(hcbthook, nCode, wParam, lParam);
}
void HCBTMessage(HWND hTable, HCBTAction hAction)
{
if (hProcessCenter)
{
COPYDATASTRUCT cds;
::ZeroMemory(&cds, sizeof(COPYDATASTRUCT));
cds.dwData = HCBT;
cds.lpData = (PVOID)&hAction;
cds.cbData = sizeof(hAction);
::SendMessage(hProcessCenter, WM_COPYDATA, (WPARAM)hTable, (LPARAM)&cds);
}
}
And on my C# end I have:
Code:
const int WM_COPYDATA = 0x4A;
// Get access to the WM_COPYDATA message
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_COPYDATA)
{
//MessageBox.Show("got one");
OnCopyData(ref m);
}
base.WndProc(ref m);
}
public struct COPYDATASTRUCT
{
public int dwData;
public int cbData;
public IntPtr lpData;
};
enum MessageType
{
HCBT
};
//CBT Action - what happened to the window, moved, resized etc.
enum HCBTAction
{
ACTIVATE,
CLICKSKIPPED,
CREATEWND,
DESTROYWND,
KEYSKIPPED,
MINMAX,
MOVESIZE,
QS,
SETFOCUS,
SYSCOMMAND,
Unknown
};
private void OnCopyData(ref Message m)
{
// Get the COPYDATASTRUCT
COPYDATASTRUCT cds = new COPYDATASTRUCT();
cds = (COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(COPYDATASTRUCT));
int intTmp;
// If the target moved, was resized etc.
if (cds.dwData == (int)MessageType.HCBT)
{
//what do I do here?
how do i actually get my data, in this case an int out of the struct?
}
}
The problem I am having is actually getting my int value out of the copydatastruct structure so that I can then do something with it?
Having real problems with the conceptually!
Thanks.
-
May 5th, 2009, 01:24 AM
#2
Re: COPYDATASTRUCT IPC reading data out
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|