TeamTalk 5 .NET DLL: Desktop Sharing

TeamTalk 5 .NET DLL Version 5.18A

Loading...
Searching...
No Matches
Classes | Enumerations | Functions | Variables
Desktop Sharing

This section explains how to use the desktop sharing feature where users can share their desktop applications. More...

## Classes

struct | BearWare.DesktopWindow
| A struct containing the properties of a shared desktop window. More...
struct | BearWare.DesktopInput
| A struct containing a mouse or keyboard event. More...
struct | BearWare.DesktopInputConstants
| Constants for BearWare.DesktopInput. More...

## Enumerations

enum | BearWare.BitmapFormat : uint { BearWare.BitmapFormat.BMP_NONE = 0 , BearWare.BitmapFormat.BMP_RGB8_PALETTE = 1 , BearWare.BitmapFormat.BMP_RGB16_555 = 2 , BearWare.BitmapFormat.BMP_RGB24 = 3 , BearWare.BitmapFormat.BMP_RGB32 = 4 }
| The bitmap format used for a BearWare.DesktopWindow. More...
enum | BearWare.DesktopProtocol : uint { BearWare.DesktopProtocol.DESKTOPPROTOCOL_ZLIB_1 = 1 }
| The protocols supported for transferring a BearWare.DesktopWindow. More...
enum | BearWare.DesktopKeyState : uint { BearWare.DesktopKeyState.DESKTOPKEYSTATE_NONE = 0x00000000 , BearWare.DesktopKeyState.DESKTOPKEYSTATE_DOWN = 0x00000001 , BearWare.DesktopKeyState.DESKTOPKEYSTATE_UP = 0x00000002 }
| The state of a key (or mouse button), i.e. if it's pressed or released. More...

enum

BearWare.TTKeyTranslate : uint {
BearWare.TTKeyTranslate.TTKEY_NO_TRANSLATE = 0 , BearWare.TTKeyTranslate.TTKEY_WINKEYCODE_TO_TTKEYCODE = 1 , BearWare.TTKeyTranslate.TTKEY_TTKEYCODE_TO_WINKEYCODE = 2 , BearWare.TTKeyTranslate.TTKEY_MACKEYCODE_TO_TTKEYCODE = 3 ,
BearWare.TTKeyTranslate.TTKEY_TTKEYCODE_TO_MACKEYCODE = 4
}

| Translate to and from TeamTalk's intermediate key-codes (TTKEYCODE). More...

## Functions

int | BearWare.TeamTalkBase.SendDesktopWindow (DesktopWindow lpDesktopWindow, BitmapFormat nConvertBmpFormat)
| Transmit a desktop window (bitmap) to users in the same channel.
bool | BearWare.TeamTalkBase.CloseDesktopWindow ()
| Close the current desktop session.
static System.Drawing.Color | BearWare.TeamTalkBase.Palette_GetColorTable (BitmapFormat nBmpPalette, int nIndex)
| Get RGB values of the palette for the bitmap format.
int | BearWare.TeamTalkBase.SendDesktopWindowFromHWND (System.IntPtr hWnd, BitmapFormat nBitmapFormat, DesktopProtocol nDesktopProtocol)
| Transmit the specified window in a desktop session.
bool | BearWare.TeamTalkBase.PaintDesktopWindow (int nUserID, System.IntPtr hDC, int XDest, int YDest, int nDestWidth, int nDestHeight)
| Paint user's desktop window using a Windows' DC (device context).
bool | BearWare.TeamTalkBase.PaintDesktopWindowEx (int nUserID, System.IntPtr hDC, int XDest, int YDest, int nDestWidth, int nDestHeight, int XSrc, int YSrc, int nSrcWidth, int nSrcHeight)
| Paint user's desktop window using a Windows' DC (device context).
bool | BearWare.TeamTalkBase.SendDesktopCursorPosition (ushort nPosX, ushort nPosY)
| Send the position of mouse cursor to users in the same channel.
bool | BearWare.TeamTalkBase.SendDesktopInput (int nUserID, DesktopInput[] lpDesktopInputs)
| Send a mouse or keyboard event to a shared desktop window.
DesktopWindow | BearWare.TeamTalkBase.AcquireUserDesktopWindow (int nUserID)
| Get a user's desktop window (bitmap image).
DesktopWindow | BearWare.TeamTalkBase.AcquireUserDesktopWindowEx (int nUserID, BitmapFormat nBitmapFormat)
| Same as TeamTalkBase.AcquireUserDesktopWindow() except an extra option for converting bitmap to a different format.
bool | BearWare.TeamTalkBase.ReleaseUserDesktopWindow (DesktopWindow lpDesktopWindow)
| Release memory allocated by the BearWare.DesktopWindow.

## Variables

const uint | BearWare.DesktopInputConstants.DESKTOPINPUT_KEYCODE_IGNORE = 0xFFFFFFFF
const ushort | BearWare.DesktopInputConstants.DESKTOPINPUT_MOUSEPOS_IGNORE = 0xFFFF
const uint | BearWare.DesktopInputConstants.DESKTOPINPUT_KEYCODE_LMOUSEBTN = 0x1000
const uint | BearWare.DesktopInputConstants.DESKTOPINPUT_KEYCODE_RMOUSEBTN = 0x1001
const uint | BearWare.DesktopInputConstants.DESKTOPINPUT_KEYCODE_MMOUSEBTN = 0x1002
const int | BearWare.TeamTalkBase.TT_DESKTOPINPUT_MAX = 16

## Detailed Description

This section explains how to use the desktop sharing feature where users can share their desktop applications.

A user can transmit a desktop window to other users in a channel by passing the handle of a window to the TeamTalk client instance. The TeamTalk client then converts the window to a bitmap image which is transmitted to the server. The server then forwards the bitmap image to all other users in the channel.

To transmit a desktop window the user's BearWare.UserAccount must have the UserRight.USERRIGHT_TRANSMIT_DESKTOP.

Sections:

- Send Desktop Window (or bitmap)
  - Windows Desktop Sharing
- Displaying Shared Desktop Window (or bitmap)
  - Desktop Cursor Sharing
- Remote Desktop Access
  - Receive Desktop Input
  - Transmit Desktop Input
  - Desktop Input and Keyboard Layouts

# Send Desktop Window (or bitmap)

Before sending a desktop window to a channel the handle (identifier) of the window to share must first be found. It is, however, possible to simply send a raw bitmap by calling TeamTalkBase.SendDesktopWindow().

## Windows Desktop Sharing

TeamTalk for Windows provides the following functions for obtaining different `HWNDs:`

- WindowsHelper.GetDesktopActiveHWND()
  - Get the `HWND` of the window which has focus.
- WindowsHelper.GetDesktopHWND()
  - Get the `HWND` of the Windows desktop.
- WindowsHelper.GetDesktopWindowHWND()
  - Enumerate all visible windows.
- WindowsHelper.GetWindow()
  - Get information about a window, e.g. window title, size, etc.

Once the `HWND` of the window to share has been found use the following function for sending the window to the channel:

- TeamTalkBase.SendDesktopWindowFromHWND()

# Displaying Shared Desktop Window (or bitmap)

When a shared desktop window is received the event TeamTalkBase.OnUserDesktopWindow() is posted to the local client instance. TeamTalkBase.AcquireUserDesktopWindow() can then be called to obtain a bitmap image of the shared window.

## Desktop Cursor Sharing

It is also possible to share the position of the mouse cursor when sharing a desktop window. Use TeamTalkBase.SendDesktopCursorPosition() to transmit the position of the mouse cursor. When the position is received the event BearWare.TeamTalkBase.OnUserDesktopCursor is posted to the local client instance. TeamTalkBase.GetUserDesktopCursor() can then be used to obtain the cursor position.

# Remote Desktop Access

If a user has shared a desktop window it's possible for other users in the same channel to take over control of mouse and keyboard on the computer sharing the desktop window.

To access a remote desktop the user's BearWare.UserAccount must have the UserRight.USERRIGHT_TRANSMIT_DESKTOPINPUT.

## Receive Desktop Input

In order for a client instance to allow remote desktop access it is required to first subscribe to desktop input from the user who wants access to the shared desktop window. This is done by calling TeamTalkBase.DoSubscribe() along with the user-id and subscription Subscription.SUBSCRIBE_DESKTOPINPUT. Once desktop input (mouse or keyboard input) is received from a remote user the TeamTalkBase.OnUserDesktopInput() event will be posted to the client instance. The actual mouse or keyboard input can then be obtained by the client instance using TeamTalkBase.GetUserDesktopInput() which returns a struct of type BearWare.DesktopInput. Afterwards WindowsHelper.Execute() can be used to execute the mouse or keyboard input.

## Transmit Desktop Input

The remote user who wants to transmit mouse or keyboard input to the user sharing a desktop window can use TeamTalkBase.SendDesktopInput(). Remember that the user sharing the desktop window must have enabled the subscription Subscription.SUBSCRIBE_DESKTOPINPUT.

## Desktop Input and Keyboard Layouts

It can be quite troublesome to handle keyboard input since each key-code depends on the OS and the regional settings on the OS. E.g. on a German keyboard the Z key is located where the Y key is on a US keyboard. The German keyboard also has letters which don't even appear on a US keyboard.

Because of the issues with keyboard layouts and regional settings the TeamTalk API provides BearWare.WindowsHelper.DesktopInput_KeyTranslate() which can be used to translate a keyboard's scan-code to an intermediate format. If e.g. a client instance is running Windows then BearWare.WindowsHelper.DesktopInput_KeyTranslate() can be called with TTKeyTranslate.TTKEY_WINKEYCODE_TO_TTKEYCODE which converts the scan-code on a Windows keyboard to TeamTalk's intermediate format (TTKEYCODE). To be able to execute the key-code once it's received it must be converted back again from TeamTalk's intermediate format to the platform where the application is running. I.e. if the TTKEYCODE is received on a Mac then BearWare.WindowsHelper.DesktopInput_KeyTranslate() must be called with TTKeyTranslate.TTKEY_TTKEYCODE_TO_MACKEYCODE.

# Translation of key-codes to TTKEYCODE-format.

When a key is pressed the OS generates a scan-code which denotes the location of the key on the keyboard. In order to generate the same key-press on a remote computer this scan-code must be converted to an intermediate format. The reason the scan-code cannot be sent directly is that the remote computer might use a different keyboard layout or run an operating system which has other values for the scan-codes.

The intermediate format for storing key-codes in TeamTalk is TTKEYCODE. Here's a table which shows how the keys on a US 104-keys keyboard are translated to TTKEYCODE.

       Symbol      | Shifted Symbol | Location | TTKEYCODE
       --------------------------------------------------
       Esc         |                |          | 0x0001
       1           | !              |          | 0x0002
       2           | @              |          | 0x0003
       3           | #              |          | 0x0004
       4           | $              |          | 0x0005
       5           | %              |          | 0x0006
       6           | ^              |          | 0x0007
       7           | &              |          | 0x0008
       8           |                |          | 0x0009
       9           | (              |          | 0x000a
       0           | )              |          | 0x000b
       -           | _              |          | 0x000c
       =           | +              |          | 0x000d
       Backspace   |                |          | 0x000e
       Tab         |                |          | 0x000f
       Q           |                |          | 0x0010
       W           |                |          | 0x0011
       E           |                |          | 0x0012
       R           |                |          | 0x0013
       T           |                |          | 0x0014
       Y           |                |          | 0x0015
       U           |                |          | 0x0016
       I           |                |          | 0x0017
       O           |                |          | 0x0018
       P           |                |          | 0x0019
       [           | {              |          | 0x001a
       ]           | }              |          | 0x001b
       Enter       |                |          | 0x001c
       Ctrl        |                | Left     | 0x001d
       A           |                |          | 0x001e
       S           |                |          | 0x001f
       D           |                |          | 0x0020
       F           |                |          | 0x0021
       G           |                |          | 0x0022
       H           |                |          | 0x0023
       J           |                |          | 0x0024
       K           |                |          | 0x0025
       L           |                |          | 0x0026
       ;           |                |          | 0x0027
       '           |                |          | 0x0028
       `           |                |          | 0x0029
       Shift       |                | Left     | 0x002a
       \\          | |              |          | 0x002b
       Z           |                |          | 0x002c
       X           |                |          | 0x002d
       C           |                |          | 0x002e
       V           |                |          | 0x002f
       B           |                |          | 0x0030
       N           |                |          | 0x0031
       M           |                |          | 0x0032
       ,           | <              |          | 0x0033
       .           | >              |          | 0x0034
       /           | ?              |          | 0x0035
       Shift       |                | Right    | 0x0036
       \*          |                |          | 0x0037
       Alt         |                |          | 0x0038
       Space bar   |                |          | 0x0039
       Caps Lock   |                |          | 0x003a
       F1          |                |          | 0x003b
       F2          |                |          | 0x003c
       F3          |                |          | 0x003d
       F4          |                |          | 0x003e
       F5          |                |          | 0x003f
       F6          |                |          | 0x0040
       F7          |                |          | 0x0041
       F8          |                |          | 0x0042
       F9          |                |          | 0x0043
       Num Lock    |                | Numpad   | 0x0044
       Scroll Lock |                |          | 0x0046
       Home        | 7              | Numpad   | 0x0047
       Up arrow    | 8              | Numpad   | 0x0048
       PgUp        | 9              | Numpad   | 0x0049
       -           |                | Numpad   | 0x004a
       Left arrow  | 4              | Numpad   | 0x004b
       5           |                | Numpad   | 0x004c
       Right arrow | 6              | Numpad   | 0x004d
       +           |                | Numpad   | 0x004e
       End         | 1              | Numpad   | 0x004f
       Down arrow  | 2              | Numpad   | 0x0050
       PgDn        | 3              | Numpad   | 0x0051
       Insert      | 0              | Numpad   | 0x0052
       Delete      |                | Numpad   | 0x0053
       F11         |                |          | 0x0057
       F12         |                |          | 0x0058
       Break       | Pause          |          | 0x0100
       Enter       |                | Numpad   | 0x011c
       Ctrl        |                | Right    | 0x011d
       /           |                | Numpad   | 0x0135
       SysRq       | Print Scrn     |          | 0x0137
       Alt         |                | Right    | 0x0138
       Home        |                | Funcpad  | 0x0147
       Up arrow    |                | Funcpad  | 0x0148
       Page Up     |                | Funcpad  | 0x0149
       Left arrow  |                | Funcpad  | 0x014b
       Right arrow |                | Funcpad  | 0x014d
       End         |                | Funcpad  | 0x014f
       Down arrow  |                | Funcpad  | 0x0150
       Page Down   |                | Funcpad  | 0x0151
       Insert      |                | Funcpad  | 0x0152
       Delete      |                | Funcpad  | 0x0153
       Windows     |                | Left     | 0x015b
       Windows     |                | Right    | 0x015c
       Menu        |                |          | 0x015d
                   |                |          |
       <           |                | Non-US   | 0x0056
                   |                |          |
       Mouse btn   |                | Left     | 0x1000
       Mouse btn   |                | Right    | 0x1001
       Mouse btn   |                | Middle   | 0x1002

## Enumeration Type Documentation

## ◆ BitmapFormat

enum BearWare.BitmapFormat : uint

The bitmap format used for a BearWare.DesktopWindow.

Enumerator
BMP_NONE | Used to denote nothing selected.
BMP_RGB8_PALETTE | The bitmap is a 256-colored bitmap requiring a palette. The default 256 colored palette is the Netscape browser-safe palette. Use TeamTalkBase.Palette_GetColorTable() to access or change the palette. The maximum size of a 8-bit bitmap is 4095 blocks of 120 by 34 pixels.
BMP_RGB16_555 | The bitmap is a 16-bit colored bitmap. The maximum pixels.
BMP_RGB24 | The bitmap is a 24-bit colored bitmap. The maximum size of a 24-bit bitmap is 4095 blocks of 85 by 16 pixels.
BMP_RGB32 | The bitmap is a 32-bit colored bitmap. The maximum size of a 32-bit bitmap is 4095 blocks of 51 by 20 pixels.

Definition at line 724 of file TeamTalk.cs.

## ◆ DesktopProtocol

enum BearWare.DesktopProtocol : uint

The protocols supported for transferring a BearWare.DesktopWindow.

So far only one, UDP-based, protocol is supported.

Enumerator
DESKTOPPROTOCOL_ZLIB_1 | Desktop protocol based on ZLIB for image compression and UDP for data transmission.

Definition at line 751 of file TeamTalk.cs.

## ◆ DesktopKeyState

enum BearWare.DesktopKeyState : uint

The state of a key (or mouse button), i.e. if it's pressed or released.

See also
  DesktopInput

Enumerator
DESKTOPKEYSTATE_NONE | The key is ignored.
DESKTOPKEYSTATE_DOWN | The key is pressed.
DESKTOPKEYSTATE_UP | The key is released.

Definition at line 795 of file TeamTalk.cs.

## ◆ TTKeyTranslate

enum BearWare.TTKeyTranslate : uint

Translate to and from TeamTalk's intermediate key-codes (TTKEYCODE).

See also
  TeamTalkBase.OnUserDesktopInput()

Enumerator
TTKEY_NO_TRANSLATE | Perform no translation.
TTKEY_WINKEYCODE_TO_TTKEYCODE | Translate from Windows scan-code to TTKEYCODE. The Windows scan-code can be retrieved in Windows' `WM_KEYDOWN` and `WM_KEYUP` event.
TTKEY_TTKEYCODE_TO_WINKEYCODE | Translate from TTKEYCODE to Windows scan-code.
TTKEY_MACKEYCODE_TO_TTKEYCODE | Translate from Mac OS X Carbon `kVK_*` key-code to TTKEYCODE. The Mac OS X key-codes are defined in Carbon's API.
TTKEY_TTKEYCODE_TO_MACKEYCODE | Translate from TTKEYCODE to Mac OS X Carbon `kVK_*` key-code.

Definition at line 8764 of file TeamTalk.cs.

## Function Documentation

## ◆ SendDesktopWindow()

int BearWare.TeamTalkBase.SendDesktopWindow | ( | DesktopWindow | lpDesktopWindow,
|  | BitmapFormat | nConvertBmpFormat )

Transmit a desktop window (bitmap) to users in the same channel.

When TeamTalkBase.SendDesktopWindow() is called the first time a new desktop session will be started. To update the current desktop session call TeamTalkBase.SendDesktopWindow() again once the previous desktop transmission has finished. Tracking progress of the current desktop transmission is done by checking for the TeamTalkBase.OnDesktopTransferUpdate() event. While the desktop transmission is active the flag BearWare.ClientFlag.CLIENT_TX_DESKTOP will be set on the local client instance.

If the desktop window (bitmap) changes size (width/height) or format a new desktop session will be started. Also if the user changes channel a new desktop session will be started. Check `nSessionID` of BearWare.DesktopWindow to see if a new desktop session is started or the TeamTalkBase.OnUserDesktopWindow() event.

Remote users will get the TeamTalkBase.OnUserDesktopWindow() event and can call TeamTalkBase.AcquireUserDesktopWindow() to retrieve the desktop window.

User rights required:

- BearWare.UserRight.USERRIGHT_TRANSMIT_DESKTOP

Parameters

  lpDesktopWindow | Properties of the bitmap. Set the `nSessionID` property to 0.
  nConvertBmpFormat | Before transmission convert the bitmap to this format.

Returns
  TRUE if desktop window is queued for transmission. FALSE if `nBitmapSize` is invalid or if a desktop transmission is already active.
  -1 on error. 0 if bitmap has no changes. Greater than 0 on success.

See also
  TeamTalkBase.CloseDesktopWindow()
  TeamTalkBase.SendDesktopCursorPosition()

Definition at line 6167 of file TeamTalk.cs.

## ◆ CloseDesktopWindow()

bool BearWare.TeamTalkBase.CloseDesktopWindow | ( |  | ) |

Close the current desktop session.

Closing the desktop session will cause the users receiving the current desktop session to see the desktop session ID change to 0 in the TeamTalkBase.OnUserDesktopWindow() event.

Definition at line 6180 of file TeamTalk.cs.

## ◆ Palette_GetColorTable()

static System.Drawing.Color BearWare.TeamTalkBase.Palette_GetColorTable | ( | BitmapFormat | nBmpPalette,
|  | int | nIndex )

static

Get RGB values of the palette for the bitmap format.

This currently only applies to bitmaps of format BearWare.BitmapFormat.BMP_RGB8_PALETTE.

Note that the pointer returned is non-const which means the palette can be overwritten with a custom palette. The custom palette will then be used internally during bitmap conversion.

Parameters

  nBmpPalette | The bitmap format. Currently only BearWare.BitmapFormat.BMP_RGB8_PALETTE is supported.
  nIndex | The index in the color table of the RGB values to extract.

Returns
  Pointer to RGB colors. First byte is Red, second Blue and third Green. Returns NULL if the color-index is invalid.

Definition at line 6201 of file TeamTalk.cs.

## ◆ SendDesktopWindowFromHWND()

int BearWare.TeamTalkBase.SendDesktopWindowFromHWND | ( | System::IntPtr | hWnd,
|  | BitmapFormat | nBitmapFormat,
|  | DesktopProtocol | nDesktopProtocol )

Transmit the specified window in a desktop session.

Same as TeamTalkBase.SendDesktopWindow() except the properties for the BearWare.DesktopWindow are extracted automatically.

Parameters

  hWnd | Windows handle for the window to transmit.
  nBitmapFormat | Bitmap format to use for the transmitted image.
  nDesktopProtocol | The protocol to use for transmitting the image.

Returns
  See TeamTalkBase.SendDesktopWindow().

Definition at line 6223 of file TeamTalk.cs.

## ◆ PaintDesktopWindow()

bool BearWare.TeamTalkBase.PaintDesktopWindow | ( | int | nUserID,
|  | System::IntPtr | hDC,
|  | int | XDest,
|  | int | YDest,
|  | int | nDestWidth,
|  | int | nDestHeight )

Paint user's desktop window using a Windows' DC (device context).

Same as calling TeamTalkBase.PaintDesktopWindowEx() like this:

    TeamTalkBase.PaintDesktopWindowEx(nUserID, hDC, XDest, YDest, nDestWidth,
                            nDestHeight, 0, 0,
                            'src_bmp_width', 'src_bmp_height');

`src_bmp_width` and `src_bmp_height` are extracted internally from the source image.

Definition at line 6244 of file TeamTalk.cs.

## ◆ PaintDesktopWindowEx()

bool BearWare.TeamTalkBase.PaintDesktopWindowEx | ( | int | nUserID,
|  | System::IntPtr | hDC,
|  | int | XDest,
|  | int | YDest,
|  | int | nDestWidth,
|  | int | nDestHeight,
|  | int | XSrc,
|  | int | YSrc,
|  | int | nSrcWidth,
|  | int | nSrcHeight )

Paint user's desktop window using a Windows' DC (device context).

An application can either paint a bitmap by using TeamTalkBase.AcquireUserDesktopWindow() which provides a pointer to a bitmap or the application can ask the client instance to paint the image using this function.

Typically this paint operation will be called in the WM_PAINT message. Here is how the client instance paints internally:

    StretchDIBits(hDC, nPosX, nPosY, nWidth, nHeight, XSrc, YSrc,
                  nSrcWidth, nSrcHeight, frame_buf, &bmi,
                  DIB_RGB_COLORS, SRCCOPY);

Parameters

  nUserID | The user's ID.
  hDC | The handle to the Windows device context.
  XDest | Coordinate of left corner where to start painting.
  YDest | Coordinate or top corner where to start painting.
  nDestWidth | The width of the image.
  nDestHeight | The height of the image.
  XSrc | The left coordinate in the source bitmap of where to start reading.
  YSrc | The top left coordinate in the source bitmap of where to start reading.
  nSrcWidth | The number of width pixels to read from source bitmap.
  nSrcHeight | The number of height pixels to read from source bitmap.

Returns
  TRUE on success. FALSE on error, e.g. if user doesn't exist.

See also
  TeamTalkBase.AcquireUserDesktopWindow()

Definition at line 6286 of file TeamTalk.cs.

## ◆ SendDesktopCursorPosition()

bool BearWare.TeamTalkBase.SendDesktopCursorPosition | ( | ushort | nPosX,
|  | ushort | nPosY )

Send the position of mouse cursor to users in the same channel.

It's only possible to send the mouse cursor position if there's a desktop session which is currently active.

User rights required:

- BearWare.UserRight.USERRIGHT_TRANSMIT_DESKTOP

Parameters

  nPosX | X coordinate of mouse cursor.
  nPosY | Y coordinate of mouse cursor.

See also
  TeamTalkBase.SendDesktopWindow()

Definition at line 6314 of file TeamTalk.cs.

## ◆ SendDesktopInput()

bool BearWare.TeamTalkBase.SendDesktopInput | ( | int | nUserID,
|  | DesktopInput[] | lpDesktopInputs )

Send a mouse or keyboard event to a shared desktop window.

If a user is sharing a desktop window it's possible for a remote user to take control of mouse and keyboard input on the remote computer. Read section Transmit Desktop Input on how to transmit desktop input to a shared window.

When the remote user receives the issued BearWare.DesktopInput the event BearWare.TeamTalkBase.OnUserDesktopInput is posted to the client instance sharing the desktop window.

User rights required:

- BearWare.UserRight.USERRIGHT_TRANSMIT_DESKTOPINPUT

Parameters

  nUserID | The user's ID who owns the shared desktop window and should receive desktop input.
  lpDesktopInputs | An array of BearWare.DesktopInput structs which should be transmitted to the user. Internally in the client instance each user ID has an internal queue which can contain a maximum of 100 BearWare.DesktopInput structs.

Returns
  FALSE If user doesn't exist or if desktop input queue is full or if `nUserID` doesn't subscribe to desktop input.

Definition at line 6343 of file TeamTalk.cs.

## ◆ AcquireUserDesktopWindow()

DesktopWindow BearWare.TeamTalkBase.AcquireUserDesktopWindow | ( | int | nUserID | ) |

Get a user's desktop window (bitmap image).

A user's desktop window can be extracted when the TeamTalkBase.OnUserDesktopWindow() is received.

When the BearWare.DesktopWindow is no longer needed call TeamTalkBase.ReleaseUserDesktopWindow() to release the memory allocated by the client instance.

A desktop window is simply a bitmap image. This method is used for retrieving the user's bitmap image.

To know the properties of the bitmap call this method with `lpBitmap` set to NULL and extract the properties in `lpDesktopWindow`. The size of the buffer to allocate will be `nBytesPerLine` multiplied by `nHeight` in the BearWare.DesktopWindow.

For BearWare.BitmapFormat.BMP_RGB8_PALETTE bitmaps check out TeamTalkBase.Palette_GetColorTable().

Parameters

  nUserID | The user's ID.

Returns
  A zero'ed BearWare.DesktopWindow if there's no active desktop window for this user.

See also
  TeamTalkBase.SendDesktopWindow()

Definition at line 6372 of file TeamTalk.cs.

## ◆ AcquireUserDesktopWindowEx()

DesktopWindow BearWare.TeamTalkBase.AcquireUserDesktopWindowEx | ( | int | nUserID,
|  | BitmapFormat | nBitmapFormat )

Same as TeamTalkBase.AcquireUserDesktopWindow() except an extra option for converting bitmap to a different format.

It is highly adviced to use TeamTalkBase.AcquireUserDesktopWindow() since converting to a different bitmap format is very inefficient.

Definition at line 6388 of file TeamTalk.cs.

## ◆ ReleaseUserDesktopWindow()

bool BearWare.TeamTalkBase.ReleaseUserDesktopWindow | ( | DesktopWindow | lpDesktopWindow | ) |

Release memory allocated by the BearWare.DesktopWindow.

See also
  TeamTalkBase.AcquireUserDesktopWindow()

Definition at line 6401 of file TeamTalk.cs.

## Variable Documentation

## ◆ DESKTOPINPUT_KEYCODE_IGNORE

const uint BearWare.DesktopInputConstants.DESKTOPINPUT_KEYCODE_IGNORE = 0xFFFFFFFF

static

If `uKeyCode` in BearWare.DesktopInput is set to BearWare.DesktopInputConstants.DESKTOPINPUT_KEYCODE_IGNORE it means no key (or mouse button) was pressed in the desktop input event and WindowsHelper.DesktopInputExecute() will ignore the value.

Definition at line 860 of file TeamTalk.cs.

## ◆ DESKTOPINPUT_MOUSEPOS_IGNORE

const ushort BearWare.DesktopInputConstants.DESKTOPINPUT_MOUSEPOS_IGNORE = 0xFFFF

static

If `uMousePosX` or `uMousePosY` in BearWare.DesktopInput are set to BearWare.DesktopInputConstants.DESKTOPINPUT_MOUSEPOS_IGNORE it means the mouse position is ignored when calling WindowsHelper.Execute().

Definition at line 869 of file TeamTalk.cs.

## ◆ DESKTOPINPUT_KEYCODE_LMOUSEBTN

const uint BearWare.DesktopInputConstants.DESKTOPINPUT_KEYCODE_LMOUSEBTN = 0x1000

static

If `uKeyCode` of BearWare.DesktopInput is set to BearWare.DesktopInputConstants.DESKTOPINPUT_KEYCODE_LMOUSEBTN then WindowsDesktopInput.Execute() will see the key-code as a left mouse button click.

Definition at line 877 of file TeamTalk.cs.

## ◆ DESKTOPINPUT_KEYCODE_RMOUSEBTN

const uint BearWare.DesktopInputConstants.DESKTOPINPUT_KEYCODE_RMOUSEBTN = 0x1001

static

If `uKeyCode` of BearWare.DesktopInput is set to BearWare.DesktopInputConstants.DESKTOPINPUT_KEYCODE_RMOUSEBTN then WindowsDesktopInput.Execute() will see the key-code as a right mouse button click.

Definition at line 885 of file TeamTalk.cs.

## ◆ DESKTOPINPUT_KEYCODE_MMOUSEBTN

const uint BearWare.DesktopInputConstants.DESKTOPINPUT_KEYCODE_MMOUSEBTN = 0x1002

static

If `uKeyCode` of BearWare.DesktopInput is set to BearWare.DesktopInputConstants.DESKTOPINPUT_KEYCODE_MMOUSEBTN then WindowsDesktopInput.Execute() will see the key-code as a middle mouse button click.

Definition at line 893 of file TeamTalk.cs.

## ◆ TT_DESKTOPINPUT_MAX

const int BearWare.TeamTalkBase.TT_DESKTOPINPUT_MAX = 16

static

The maximum number BearWare.DesktopInput instances which can be sent by BearWare.TeamTalkBase.SendDesktopInput

Definition at line 4283 of file TeamTalk.cs.