Archived

This topic is now archived and is closed to further replies.

Remote monitoring program

This topic is 5110 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi I’m making a remote monitoring program, the idea is simple, the server takes continues snap shots of the remote pc’s screen and sends them to the client. So far so good but my problem is with speed, when the server is running on a PC with a screen resolution of 1024x 768 and 32bit colors that equals to 3,145,794 bytes or 3MB per snap shot which is too much, I tried to improve speed by reducing the color depth, compressing the snapshots and converting them to JPG’s but still I cant achieve smooth monitoring (the beast result was 2fps on a 100Mb LAN). Is there a way to know which part of the screen has changed so I can send only that changed part and not the entire screen? Any help is greatly appreciated? Thank you all

Share this post


Link to post
Share on other sites
Yes, you can know it. You do it by listening in on the GDI driver command stream, which means you gotta be fairly low-level, and fairly involved, to make it work.

Windows comes with built-in remote desktop these days, and you can also use Windows Terminal Server to look at a remote desktop. There are also applications that do the same thing, such as PCAnywhere. Unless you have no money at all to spend, and your time is free, I suggest using an existing, working solution and spending your time better elsewhere.

Share this post


Link to post
Share on other sites
dosent every drawing operation means that a WM_PAINT message has been sent, well is there a way to use that on knowing that a part of the screen has changed (redrawing)?



[edited by - fma on December 16, 2003 1:46:22 PM]

[edited by - fma on December 16, 2003 1:48:38 PM]

Share this post


Link to post
Share on other sites
FMA, im working on a "remote control" program for a cyber caffee that has to log off patrons when they are caught navigating porn websites, etc...

My interest in your program is, how do you capture the screen in the first place, the whole desktop?
That would be an interesting addition to this project.

Thank you for any insights you might offer into this...


[Hugo Ferreira][Positronic Dreams][Colibri 3D Engine][Entropy HL2 MOD][Yann L.][Enginuity]
Stop reading my signature and click it!

Share this post


Link to post
Share on other sites
pentium3id:
Here is what i''m doing

1- The client connects to the server and request the first snapshot.

2- The server BitBlt''s the whole desktop to a BMP image and then converts it to a JPG picture to reduce the size.

3- The server sends the jpg image to the client.

4- After the client receives the whole picture it requires the next one, and so on.



Share this post


Link to post
Share on other sites
Well, 2fps inst that bad...

try this:
1) Capture a frame (A)
2) Capture another frame (B)
3) On (B), make all areas black, where (B)==(A)
4) Compress with ZLIB
5) Send

So, just put a zero (black) where pixels are equal to the last instance...

You have (A), which is the first frame you got, and is allways the last frame you received. With (A) you can "decrypt" (B), in the sense that you know that all areas with a certain value, are equal to the reference frame (A)...

This will greatly reduce the size of the package to send, but if your algorithm fails to be quick enough, you might slow down the client computer too much...


[Hugo Ferreira][Positronic Dreams][Colibri 3D Engine][Entropy HL2 MOD][Yann L.][Enginuity]
Stop reading my signature and click it!

Share this post


Link to post
Share on other sites
Well I did tried the ZLIB for compression but the compression process tends to become slow as the compression ratio increases, for example you could compress a not so complicated BMP image from 4MB to 45KB but the compression process would take a second or more so the overall speed (compressing and sending) will decrease, not to mention the processing load you will put on the server.

Share this post


Link to post
Share on other sites