Sending a user defined message to a Process ?

Hi,

I have an application which calls another EXE using CreateProcess(..). This EXE is a standard window which can have multiple views. What I want is to be able to send a message to the EXE  telling it to do something.  I managed to get the HANDLE of the Window by searching for the title of the dialog. I issued a ::PostMessage(hWnd,WM_MYMESSAGE,0,0) to it, and have an ON_MESSAGE(WM_MESSAGE..) in the EXE source, but nothing happens. Could someone give precise answers to what could be wrong and how to solve it?

Thanks,
Sintax
LVL 1
SintaxAsked:
Who is Participating?
 
jkrConnect With a Mentor Commented:
That is done by using 'ON_REGISTERED_MESSAGE()':

// example for ON_REGISTERED_MESSAGE
const UINT    wm_CustomMessage = RegisterWindowMessage( CUSTOMMSGSTRING );
BEGIN_MESSAGE_MAP( CMyWnd, CMyParentWndClass )
    //{{AFX_MSG_MAP( CMyWnd )
    ON_REGISTERED_MESSAGE( wm_CustomMessage, OnCustomMessage )
    // ... Possibly more entries to handle additional messages
    //}}AFX_MSG_MAP
END_MESSAGE_MAP( )

The 1st app would the use

const UINT    wm_CustomMessage = RegisterWindowMessage( CUSTOMMSGSTRING );

PostMessage ( hTargetWnd, wm_CustomMessage, wParam, lParam);

Feel free to ask if you need more information or would need another example!
0
 
migelCommented:
Hi!
show your code for OnMessage handler in the target app.
In what message map you add such haandler?
Are you shure that  finded HWND hwnd of the Main Window of your application?
0
 
SintaxAuthor Commented:
hi,
To be simple, let's call "A" the application which needs to mesasge the other ("B")

In "A":
HWND hWnd;

hWnd =  ::FindWindow(NULL,"Database Window");
if (hWnd != NULL)
{
  ::PostMessage(m_hWnd,WM_MYMESSAGE,0,0);
}

The handle IS correct since If I issue a WM_QUIT then B closes.

In "B" the main class has the following:
BEGIN_MESSAGE_MAP(CBApp, CWinApp)
...
     ON_MESSAGE(WM_MYMESSAGE, WMDOSG)
END_MESSAGE_MAP()

and WMDOSG() is defined as follows:
void CBApp::WMDOSG()
{
  AfxMessageBox("I GOT THE MESSAGE");
}

but the message box is never displayed, so it doesn't get the message. Maybe because its a separate process??

Sintax
0
Cloud Class® Course: Microsoft Azure 2017

Azure has a changed a lot since it was originally introduce by adding new services and features. Do you know everything you need to about Azure? This course will teach you about the Azure App Service, monitoring and application insights, DevOps, and Team Services.

 
SintaxAuthor Commented:
I already tried registering the message (both sides, same string), but it seems that the messages are NOT getting to the window. Is there a reason that it doesn't get there?
0
 
jkrCommented:
>>Is there a reason that it doesn't get there?

There shouldn't be one, if the MSG strings passed to 'RegisterWindowsMessage()' are identical - could you post more of your code?
0
 
migelCommented:
Hi!
can you run SPY++ and watch what message come to the B app main window?
0
 
SintaxAuthor Commented:
I tried Spy++, I moved the cross in find window over B, it was able to get the handle and the title, but when I said OK, it displayed "No window matches search criteria!". This is weird.. since it found the window. What could be wrong?
0
 
migelCommented:
Try press F5 in the spy before dragging cross to the window (this updates windows list in the SPY)
0
 
SintaxAuthor Commented:
Thanx jkr and everybody who helped me !! It works now. I had to use the mainframe. Although now I have another problem. I need to acess the View's public function. How can I access this from MainFrm ???


Sintax
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.