7

I am instantiating a local COM server using CoCreateInstance. Sometimes the application providing the server takes a long time to start. When this happens, Windows pops a dialog box like this:

Server Busy

The action cannot be completed because the other program is busy. Choose 'Switch To' to activate the busy program and correct the problem.

[Switch To...] [Retry] [Cancel]

I have found mention of a Visual Basic property on the Application object, OleRequestPendingTimeout, that can be used to control the time before this dialog comes up. I can't find any good documentation on this or an equivalent that is useful from C++. Can anyone point me in the right direction?

J. Loomis
  • 196
  • 1
  • 6

3 Answers3

10

If you're using MFC, we used to do stuff like this:

// prevent the damned "Server Busy" dialog.
AfxOleGetMessageFilter()->EnableBusyDialog(0);
AfxOleGetMessageFilter()->EnableNotRespondingDialog(0); 
John Dibling
  • 99,718
  • 31
  • 186
  • 324
4

Have a look at IMessageFilter and CoRegisterMessageFilter.

Sunlight
  • 2,103
  • 13
  • 9
  • 1
    This is a good pointer, it turns out MFC does some of the work as demonstrated in John Dibling's answer. – J. Loomis Nov 12 '08 at 00:48
3

To increase timeout call:

AfxOleGetMessageFilter()->SetMessagePendingDelay(nTimeout);

See details here How to prevent the OLE Server Busy dialog box from appearing during a lengthy COM operation