CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 2 of 2
  1. #1
    Join Date
    Feb 2007
    Posts
    48

    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.

  2. #2
    Join Date
    Oct 2002
    Location
    Timisoara, Romania
    Posts
    14,360

    Re: COPYDATASTRUCT IPC reading data out

    Marius Bancila
    Home Page
    My CodeGuru articles

    I do not offer technical support via PM or e-mail. Please use vbBulletin codes.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured