Ammyy admin createcompatiblebitmap error 0

How to check and increase remote desktop software performance


This article will be useful for those using Ammyy Admin as well as other remote access application users as it contains general info on remote control software which can be applied while using similar remote access applications.

It happens quite often when Ammyy Admin users ask "What is the minimum Internet connection bandwidth that makes Ammyy Admin work ok?". Usually we give an answer like this "Ammyy Admin will work with any Internet bandwidth, but the better Internet is the faster Ammyy Admin works". However, it’s impossible to identify the minimum Internet connection speed required for comfort work because there is no any standard for "comfort work" and the meaning of this term may vary from person to person. Thus "comfort work" term used in this article is nothing more than my personal opinion on the matter and you may have your own different one.

Step 1: Connection speed test

1.1. Connect to a client in "Speed Test Only" mode. The new window will show you "TCP by router: port" or "Direct TCP with ip:port" or "Direct UDP with ip:port". The 1st phrase tells the traffic is going through a router, the 2nd and 3rd mean direct traffic transfer. In most cases direct connection provides faster performance rather than connection through router thus it’s always better to establish direct connection although it’s not always possible.

1.2. First of all, make sure that client and operator have "Allow Direct TCP/UDP" box checked. Direct TCP is possible in cases when:
— Both PCs are located in one LAN, or
— One of the PCs can receive incoming TCP connections onto a certain port and this port is listed in "External TCP Port" and has "On" status.

After that click "Start". You’ll get the test results (picture 1) including:
1) Ping time min-avr-max (also called round trip time). This is time a minimal data packet spends for round-trip and reflects minimal, average and maximal time. This parameter has almost no affect on data transfer speed of a bigger size, but it’s crucial for work in remote desktop mode. Comfort work requires average time of 150ms at maximum.
2) Dnload speed – "from client to operator" bandwidth.
3) Upload speed – "from operator to client" bandwidth.

picture 1

picture 1Р°

Bandwidth is often called connection speed. In case you have Direct TCP connection the speed will depend only on Internet providers of client and operator. Ammyy Company will not be able to help you in this case. If you have TCP by router connection and the speed test results are much worse than minimal client and operator Internet bandwidth you should sort out the issue with router before writing to Ammyy tech support.

Читайте также:  Disciples 2 как поменять разрешение экрана

Step 2: Router check

2.1. Please open on client side. Here you can see your external IP and country of current location. The closest router that will provide connection between operator and client will be defined based on the country. In case the country was defined wrong, please tell about it Ammyy Company. Keep in mind that this might be due to the following reasons:
— Your Internet provider gave wrong info about your IP.
— You work through a Proxy Server which is located in other country.
— Information on your IP doesn’t match in Ammyy Data Base.

2.2. Next, launch Ammyy Admin and click in main menu Ammyy -> Settings -> Network and get the list of public routers. Ping all routers and choose the best of them, for example, based on the average round trip time parameter. I recommend doing the test using big data packets. For instance, execute the following command "ping -1 1400" and so on with the rest of the routers. In case the 1st public router in the list gives a worse test result than the best one, it’s a reason to address to Ammyy and provide your test results. You may also set the best router private, it’ll be used after Ammyy Admin restart.

2.3. The router you’ve chosen should also be checked with command "ping -1 1400 –n 200" on both client and operator side. Average round trip time should not exceed 200ms and the number of lost packets should not be more than 1%.

Step 3. V >Even though you got good speed test results during big files transfer the speed of remote desktop refreshment may be rather slow. In this case you have to check your video system. Launch Ammyy Admin on client PC and click in menu Ammyy -> Settings -> Client -> Video system speed test. Test laptop performed the test with the following results

picture 2

1280 x 1024 x 32 bits – desktop resolution and color depth.
4.14 ms — average time of screen capturing.
7.35ms – 2 screen frames average time of comparing. It usually depends on CPU and RAM characteristics, and doesn’t depend on the video system.

To make work comfortable the sum of the 1st and the 2nd line should not be bigger than 50 ms, and a very comfortable work implies the sum to be not more than 20 ms.

It’s remarkable that these are results of a system with disabled hardware acceleration. When hardware acceleration was turned on the test laptop showed average time of capturing increase up to 35 ms, what is by 31ms longer! It might be justified by the fact that disabled hardware acceleration makes graphic adapter use basic RAM and CPU reading speed from RAM is much higher than reading from video memory. Please, check this parameter, and in case average capturing time is too long, one has to look for a reason why graphic adapter works so slowly.

To disable hardware acceleration in Windows 7/XP, please, do the following:

1. Right click on the desktop and select Screen Resolution
2. On the window that opens up, click on the Advanced Settings link
3. Select the Troubleshoot tab, then click Change Settings
4. Move the Hardware acceleration slider towards none to reduce or turn off video hardware acceleration.
5. Click OK, and then click Restart Now.

Читайте также:  Длина кровати 160 до какого возраста

picture 3

If UAC is enabled, it’ll require user confirmation. In some cases in windows 7 it’s impossible to turn off video hardware acceleration because video adapter and its driver don’t allow changing this settings.

Step 4: Encoder settings

Afterwards, check what encoders are used during the connection and what parameters do they have. To do it please click on the button "Connection Encoder" on the control panel during remote desktop control session (picture 4). In the new window you can change encoder settings for current connection. To create a new encoder profile with predefined settings or edit existing one please choose in menu Ammyy -> Settings -> Operator -> Encoder profiles.

picture 4

To make remote desktop speed faster please follow this recommended encoder settings:

1) It’s recommended to disable desktop background, visual effects and desktop composition. This simplifies remote desktop image and increases compression level and as a result make the system work faster.
2) Don’t use RAW encoder – it’s destined only for testing and transmits the image without compression.
3) AAFC encoder is used for connection within one LAN where connection bandwidth is more than 10 Mbit/sec. If you’ve got less use AAC.
4) To improve performance you can also decrease color depth and remote desktop complexity as well as choose optimal encoder settings. For example, to watch pictures it might be the best option to turn on jpeg compression.

Maxim Prokopenko, independent Internet and network technologies expert and co-developer of Ammyy Admin.

Try instant connection with Ammyy Admin

How to establish connection within 30 sec (first run guide)

Ammyy Admin features

Ammyy Admin manual

Функция CreateCompatibleBitmap создает точечный рисунок, совместимый с устройством, которое связано с заданным контекстом устройства.

[in] Дескриптор контекста устройства.

[in] Определяет ширину точечного рисунка, в пикселях.

[in] Определяет высоту точечного рисунка, в пикселях.

Если функция завершается успешно, возвращаемое значение — дескриптор совместимого точечного рисунка (аппаратно-зависимая точечная картинка (DDB)).

Если функция завершается ошибкой, возвращаемое значение — ПУСТО (NULL).

Windows NT/2000/XP: Чтобы получать дополнительные сведения об ошибке, вызовите GetLastError .

Цветовой формат точечного рисунка, созданного функцией CreateCompatibleBitmap соответствует цветовому формату устройства, идентифицированного параметром hdc . Этот точечный рисунок может выбраться в любой контекст устройства в памяти, который является совместимым с исходным устройством.

Поскольку контексты устройства в памяти допускают и цветные, и одноцветные точечные рисунки, формат такого рисунка, возвращенного функцией CreateCompatibleBitmap отличается, если заданный контекст устройства — контекст устройства в памяти. Однако, совместимый точечный рисунок, который создавался для контекста устройства не в памяти всегда, обладает одним и тем же цветовым форматом и использует одну и ту же цветовую палитру, что и заданный контекст устройства.

Обратите внимание! на то, что: если создается контекст устройства в памяти , он вначале имеет одноцветный точечный рисунок размером 1 Х 1 пиксель, выбранный в него. Если этот контекст устройства в памяти используется функцией CreateCompatibleBitmap, точечный рисунок, который создается является одноцветным точечным рисунком. Чтобы создать цветной рисунок, используйте hDC, который был использован для, создания контекста устройства в памяти, как показано в нижеследующем коде:
Читайте также:  Исполнительные файлы запускает программу

Если приложение устанавливает параметры nWidth или nHeight в нуль, CreateCompatibleBitmap возвращает дескриптор одноцветного точечного рисунка размером 1 на 1 пиксель.

Если секция DIB, которая является точечным рисунком, созданным функцией CreateDIBSection, выбирается в контекст устройства, идентифицированный параметром hdc , функция CreateCompatibleBitmap создает секцию DIB.

Когда Вам больше не нужен точечный рисунок, вызовите функцию DeleteObject , чтобы удалить его.

Windows 95/98/Me: Созданный точечный рисунок по величине не может быть больше 16 МБ.

Размещение и совместимость CreateCompatibleBitmap

Код такой, в результате на экран выводит черную картинку(а не скрин)

Если LoadBitmap использую то всё ок, вчём дело? Что с CreateCompatibleBitmap или может я её не правильно использую?

Цитата (A />)
Код такой, в результате на экран выводит черную картинку(а не скрин)

что то я ничего не пойму.

я же контекст устройства заполненый уже беру скрином а не CompatibleDC?

Цитата (A />)
Если LoadBitmap использую то всё ок, вчём дело? Что с CreateCompatibleBitmap или может я её не правильно использую?
Цитата (A />)
я же контекст устройства заполненый уже беру скрином а не CompatibleDC?

Цитата (A />)
я же контекст устройства заполненый уже беру скрином а не CompatibleDC?

Создает новый контекст совместимый по формату с hdcdesk, но не являющийся его копией.

всё я окончательно запутался))))

вот этот код работает, получил путём проб и ошибок, и вышесказанного Alexeis, Earnest.

но вот логику не понимаю? что храниться в hbmp. Я думал хендел изображения, а оказалось мы его копируем BitBlt(hdcmem,0,0,x,y,hdcdesk,0,0,SRCCOPY);

конечно копируем, ты же создаешь новый битмап,
чтобы в нем был нарисован десктоп, надо это сделать, поэтому и вызываешь BitBlt(hdcmem,0,0,x,y,hdcdesk,0,0,SRCCOPY);

но я только не понимаю, зачем он тебе нужен, если ты просто выводишь содержимое десктопа в своем окне,
используй функцию PaintDesktop, это же гораздо проще

Цитата (A />)
что храниться в hbmp.

hbmp мне нужна будет потом для поиска цветовой палитры и массива точек, а весь остальной код нужен был для понимания. Но я так и не понял что мы имеем до и после этого кода в hbmp(в самом объекте: заполнен он или нет? и если заполнен то в каком случае?)

и когда я смогу воспользоваться функцией GetDIBits?

Цитата (A />)
//что тут в hbmp?
Цитата (A />)
что тут в hbmp стало?
Цитата (A />)
когда я смогу воспользоваться функцией GetDIBits?

GetDIBits можно пользоваться хоть здесь:

опиши хотя бы словестный алгоритм того, что ты хочешь получить,
а то спрашиваешь одно и то же, и ни кому непонятно, что тебе непонятно

GremlinProg, мне надо сохранить битмап в файл, показать битмап из файла(16 цветов, 256 цветов, 32 бита), сделать преобразования и показать.

hDeskDC = ::GetDC( HWND_DESKTOP );

::ReleaseDC( HWND_DESKTOP, hDeskDC);

int GetDIBits(
HDC hdc, // handle of device context
HBITMAP hbmp, // handle of bitmap
UINT uStartScan, // first scan line to set in destination bitmap
UINT cScanLines, // number of scan lines to copy
LPVOID lpvBits, // address of array for bitmap bits
LPBITMAPINFO lpbi, // address of structure with bitmap data
UINT uUsage // RGB or palette index

у этой функции есть аргумент hbmp, разве этот битмап не должен быть заполнен картинкой?