vncServer::Authenticated()
└┬m_desktop = new vncDesktop();
│vncDesktop::Init();
│ └┬vncDesktopThread *thread = new vncDesktopThread;
│ └thread->Init(this, m_server);
│ └┬m_returnsig = new omni_condition(&m_returnLock);
│ └start_undetached();// Start the thread
│ │m_desktop->Startup()
│ │ └┬InitDesktop()
│ │ │InitBitmap()
│ │ │ThunkBitmapInfo()
│ │ │EnableOptimisedBlits();
│ │ │SetPixFormat()
│ │ │SetPixShifts()
│ │ │SetPalette()
│ │ │InitWindow()
│ │ └SetHooks()
│ └while (TRUE){}//捕获消息循环
│client->SetBuffer(&(m_desktop->m_buffer));
└m_authClients.push_back(clientid);
//启动vncDesktopThread,截获消息,进行处理
// vncDesktopThread::run_undetached();
// m_desktop->Startup()
// PeekMessage()
用户连接以后,调用m_desktop = new vncDesktop();
WinMain()
└┬WinVNCAppMain() //主函数
│vncServer server;
│ └┬m_update_tracker.init(this);
│ └m_clientquitsig = new omni_condition(&m_clientsLock); // Signal set when a client quits
│vncMenu *menu = new vncMenu(&server);
└while (GetMessage(&msg, NULL, 0,0) ){}
vncMenu()
{
m_properties.Init(m_server);
└┬vncProperties::Init()
└┬Load(TRUE);
└┬ApplyUserPrefs();
└┬m_server->SockConnect(m_pref_SockConnect);
└┬m_socketConn = new vncSockConnect()
│m_socketConn->Init(this, m_port)
└┬m_socket.Create()
│m_socket.Bind(m_port, server->LoopbackOnly())
│m_socket.Listen()
│m_thread = new vncSockConnectThread;//此线程完成帮助m_socket.Accept
└m_thread->Init(&m_socket, server);
└┬start_undetached();
└┬while() m_server->AddClient(new_socket, FALSE, FALSE);
} └┬client = new vncClient();
└client->Init(this, socket, auth, shared, clientid);
└┬m_thread = new vncClientThread;
└m_thread->Init(this, m_server, m_socket, auth, shared);
└┬start();/**/
└vncClientThread::run(void *arg);
└┬InitVersion();
│InitAuthenticate();
│àm_server->Authenticated(
│m_client->GetClientId())
│while (connected)此函数不断接收客户端的
│Message, 进行处理
│vncKeymap::keyEvent()
│{
│ VkKeyScan();
│ keybd_event();
│}
└mouse_event()
vncClient::TriggerUpdateThread()
└┬m_updatethread = new vncClientUpdateThread
└m_updatethread->Init(this)
└─start_undetached()
└┬update.enable_copyrect(true);
└while (1)
└┬clipboard_text
│send_palette
└m_client->SendUpdate(update)
VNC 注册表HKEY_LOCAL_MACHINE/SOFTWARE/ORL/WinVNC3/Default
HKEY_LOCAL_MACHINE/SOFTWARE/ORL/WinVNC3 debugmode
└┬m_desktop = new vncDesktop();
│vncDesktop::Init();
│ └┬vncDesktopThread *thread = new vncDesktopThread;
│ └thread->Init(this, m_server);
│ └┬m_returnsig = new omni_condition(&m_returnLock);
│ └start_undetached();// Start the thread
│ │m_desktop->Startup()
│ │ └┬InitDesktop()
│ │ │InitBitmap()
│ │ │ThunkBitmapInfo()
│ │ │EnableOptimisedBlits();
│ │ │SetPixFormat()
│ │ │SetPixShifts()
│ │ │SetPalette()
│ │ │InitWindow()
│ │ └SetHooks()
│ └while (TRUE){}//捕获消息循环
│client->SetBuffer(&(m_desktop->m_buffer));
└m_authClients.push_back(clientid);
//启动vncDesktopThread,截获消息,进行处理
// vncDesktopThread::run_undetached();
// m_desktop->Startup()
// PeekMessage()
用户连接以后,调用m_desktop = new vncDesktop();
WinMain()
└┬WinVNCAppMain() //主函数
│vncServer server;
│ └┬m_update_tracker.init(this);
│ └m_clientquitsig = new omni_condition(&m_clientsLock); // Signal set when a client quits
│vncMenu *menu = new vncMenu(&server);
└while (GetMessage(&msg, NULL, 0,0) ){}
vncMenu()
{
m_properties.Init(m_server);
└┬vncProperties::Init()
└┬Load(TRUE);
└┬ApplyUserPrefs();
└┬m_server->SockConnect(m_pref_SockConnect);
└┬m_socketConn = new vncSockConnect()
│m_socketConn->Init(this, m_port)
└┬m_socket.Create()
│m_socket.Bind(m_port, server->LoopbackOnly())
│m_socket.Listen()
│m_thread = new vncSockConnectThread;//此线程完成帮助m_socket.Accept
└m_thread->Init(&m_socket, server);
└┬start_undetached();
└┬while() m_server->AddClient(new_socket, FALSE, FALSE);
} └┬client = new vncClient();
└client->Init(this, socket, auth, shared, clientid);
└┬m_thread = new vncClientThread;
└m_thread->Init(this, m_server, m_socket, auth, shared);
└┬start();/**/
└vncClientThread::run(void *arg);
└┬InitVersion();
│InitAuthenticate();
│àm_server->Authenticated(
│m_client->GetClientId())
│while (connected)此函数不断接收客户端的
│Message, 进行处理
│vncKeymap::keyEvent()
│{
│ VkKeyScan();
│ keybd_event();
│}
└mouse_event()
vncClient::TriggerUpdateThread()
└┬m_updatethread = new vncClientUpdateThread
└m_updatethread->Init(this)
└─start_undetached()
└┬update.enable_copyrect(true);
└while (1)
└┬clipboard_text
│send_palette
└m_client->SendUpdate(update)
VNC 注册表HKEY_LOCAL_MACHINE/SOFTWARE/ORL/WinVNC3/Default
HKEY_LOCAL_MACHINE/SOFTWARE/ORL/WinVNC3 debugmode