How can I programmatically cancel my call or request to join a conference before it succeeds?
How can I programmatically leave a conference in which I am participating?
What is the difference between a Conference object (INmConference) and a Call object (INmCall)?
Why is my data broken into 4K chunks when I use SendData?
Is there a limit to the amount of data that can be sent using SendData?
How can I launch a copy of my application on a remote computer?
How can I create a directory of users in my product?
When do I have to use AddRef and Release in NetMeeting?
How can I reactivate audio or video in the NMUI sample after I have disabled them?
How can I switch audio and video between participants in my meeting?
How can I get the conference name for a conference I have joined?
How can I add a NetMeeting call link to my Web page?
Back to Frequently Asked Questions
The INmCall::Cancel method can be used to cancel placement of a call or to cancel a request to join a conference. Here's an excerpt from the NetMeeting 2.1 SDK documentation.
INmCall::Cancel
HRESULT Cancel(void);
// Cancels the request to join a conference.
When the call is canceled, the application will receive a NM_CALL_CANCELED call state change notification for the Call object.
Back to list of Software Development questions
The INmConference::Leave method can be used to leave (hang up) a conference in which you are currently participating. Here's an excerpt from the NetMeeting 2.1 SDK documentation.
INmConference::Leave
HRESULT Leave(void);
// Removes the local computer from the active conference.
The conference state will change to NM_CONFERENCE_IDLE after all of the members and channels have been removed from the conference.
Back to list of Software Development questions
A Conference object has channels and participants (members) while a Call object refers to a specific computer or user. A call is an invitation to join a conference.
Back to list of Software Development questions
Use the INmChannelAppShare::SetState method to set the current state to NM_SHARE_IN_CONTROL. This interface provides the same behavior as the Collaborate button in the NetMeeting user interface. It puts the user in the collaborating state and gives the user control of the cursor. Here is an excerpt from the NetMeeting 2.1 SDK documentation.
INmChannelAppShare::SetState
[in] NM_SHARE_STATE uState,
// Sets the app sharing state of the local user.
The uState parameter identifies the desired application sharing state. The following values are currently supported for uState:
NM_SHARE_IN_CONTROL | start collaborating and automatically take control of the sharing system |
NM_SHARE_WORKING_ALONE | stop collaborating |
Back to list of Software Development questions
When INmChannelData::SendData is used with more than 4096 bytes, the low-level T.120 layer breaks the data into manageable packets. The receiveing system can detect this by checking the dwFlags parameter during the INmChannelDataNotify::DataReceived notification.
Back to list of Software Development questions
A maximum of 65,535 bytes can be sent at a time using the SendData method. This is because the T.120 stack in NetMeeting has a limited amount of memory available for sending data. It is recommended that you segment data into sizes smaller than 4K to optimize for T.120 traffic.
It is important to note that you should always be prepared for SendData to fail regardless of the packet size you choose because other clients of the SDK might be sharing the NetMeeting data channel with your application.
Back to list of Software Development questions
You can use the INmConference::LaunchRemote method to launch a remote copy of your application when in an active conference. To do this, you need two pieces of information:
HRESULT LaunchRemote(
[in] REFGUID rguid,
[in] INmMember *pMember);
hr = g_pConference->LaunchRemote(guid, pMember);
Back to list of Software Development questions
The Internet Locator Server COM interface, included in the NetMeeting 2.1 SDK, enables you to include directory services in your application.
Back to list of Software Development questions
When using the NetMeeting COM interface, you should follow the same rules for use of AddRef and Release as in other COM applications. These are outlined in detail in Chapter 2 of Inside OLE, Second Edition.
When an interface is returned from a method, it must be released. It is not necessary to AddRef or Release an object in a notification callback unless the application intends to use it after the function returns.
Back to list of Software Development questions
To reactivate the destination channel for audio or video, use the SetActive method on the Channel object for the destination channel. Here's an excerpt from the NetMeeting 2.1 SDK documentation.
HRESULT SetActive(
BOOL fActive);
// Sets the channel to active or inactive.
Note Instead of disabling the audio and video, you can use the Pause property for each of these channels to achieve a similar effect without actually disconnecting the channel.
For video, use the INmChannelVideo::SetProperty method and set the NM_VIDPROP property to NM_VIDPROP_PAUSE. Here's an excerpt from the NetMeeting 2.1 SDK documentation.
HRESULT SetProperty(
[in] NM_VIDPROP uID,
[in] ULONG uValue);
// Sets the display properties of the current video channel.
For audio, use the INmChannelAudio::SetProperty method and set the NM_AUDPROP property to NM_AUDPROP_PAUSE (paused). Here's an excerpt from the NetMeeting 2.1 SDK documentation.
HRESULT SetProperty(
[in] NM_AUDPROP uID,
[in] ULONG uValue);
// Sets the property values of the current audio channel.
To switch audio and video from one meeting participant to another, you must:
If you do not already have your own pointers to the appropriate audio channels, you can find a specific audio channel by using INmConference::EnumChannel to get an enumerator for all the channels in the conference. Here's an excerpt from the NetMeeting 2.1 SDK documentation.
HRESULT EnumChannel(
[out] IEnumNMChannel **ppEnum);
Then use IEnumNmChannel::Next to traverse the list of channels until you find the audio channel for the member you want to switch to. Here's an excerpt from the NetMeeting 2.1 SDK documentation.
HRESULT Next(
[in] ULONG cConference,
[out] INmConference **rgpConference,
[out] ULONG *pcFetched);
An audio channel can be identified using INmChannel::GetNmch:
HRESULT GetNmch(
[out] ULONG *puCh);
The value returned in by puCh will be NMCH_AUDIO if it is an audio channel.
For each of the audio channels, you can then use INmChannel::EnumMember to get an enumerator for all the Member objects in each channel. Note that the audio channel will have only one member.
HRESULT EnumMember(
[out] IEnumNmMember **ppEnum);
The easiest way to deactivate the current audio channel is to set your own active audio channel to inactive using INmChannel::SetActive:
HRESULT SetActive(
BOOL fActive);
Make sure to set fActive to FALSE.
Wait for the INmConferenceNotify::ChannelChanged notification. When you get it, check to make sure that the notification is for the channel that you just deactivated and that the channel's state is NM_AUDIO_IDLE.
Finally, to activate the destination channel for audio and video, use the SetActive method on the Channel object for the destination channel to set fActive to TRUE.
Back to list of Software Development questions
INmConference::GetName can be used to retrieve the name of the conference in which a member is participating. However, a called member should not use this method until it receives an NM_MEMBER_UPDATED notification for itself and the member's capabilities include NMCH_DATA. For example:
case NM_MEMBER_UPDATED:
hResult = pMember->GetNmchCaps(&uCaps);
if ((uCaps == NMCH_DATA) && (S_OK == pMember->IsSelf()))
//if the member has Data Channel capabilities, you can GetName
hResult = pConf->GetName(&bstrConfName);
Back to list of Software Development questions
Using Microsoft® Internet Explorer, people can call you using a link on your Web page even if they do not have NetMeeting running. Use one of the following formats to create a NetMeeting call link on your Web page:
Format | Example |
callto:DNS name | callto:machine2.test.com |
callto:IP address | callto:157.55.22.31 |
callto:e-mail address | callto:user@test.com |
callto:server name/e-mail address | callto:uls4.microsoft.com/user@test.com |
For example, if John Smith wanted to embed a link in his Web page so that other people could call him, he would add the following HTML tag:
Call me using NetMeeting at
<A HREF="callto:uls.microsoft.com/jsmith@somedomain.com>
uls.microsoft.com/jsmith@somedomain.com</A>
Back to list of Software Development questions
Last Updated: November 1, 1997
© 1997 Microsoft Corporation. All rights reserved. Terms of Use.