vncdesktopthread.h
1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#if !defined(_WINVNC_VNCDESKTOPTHREAD)
#define _WINVNC_VNCDESKTOPTHREAD
#include "stdhdrs.h"
#include "vncServer.h"
#include "vncKeymap.h"
#include "vncDesktop.h"
#include "vncService.h"
#include "mmsystem.h"
typedef struct _CURSORINFO
{
DWORD cbSize;
DWORD flags;
HCURSOR hCursor;
POINT ptScreenPos;
} MyCURSORINFO, *PMyCURSORINFO, *LPMyCURSORINFO;
// The desktop handler thread
// This handles the messages posted by RFBLib to the vncDesktop window
typedef BOOL (WINAPI *_GetCursorInfo)(PMyCURSORINFO pci);
extern bool g_DesktopThread_running;
class vncDesktopThread : public omni_thread
{
public:
vncDesktopThread() {
m_returnsig = NULL;
user32 = LoadLibrary("user32.dll");
MyGetCursorInfo=NULL;
if (user32) MyGetCursorInfo=(_GetCursorInfo )GetProcAddress(user32, "GetCursorInfo");
g_DesktopThread_running=true;
m_lLastMouseMoveTime = 0L;
m_lLastUpdateTime = 0L;
};
protected:
~vncDesktopThread() {
if (m_returnsig != NULL) delete m_returnsig;
if (user32) FreeLibrary(user32);
g_DesktopThread_running=false;
};
public:
virtual BOOL Init(vncDesktop *desktop, vncServer *server);
virtual void *run_undetached(void *arg);
virtual void ReturnVal(BOOL result);
void PollWindow(rfb::Region2D &rgn, HWND hwnd);
// Modif rdv@2002 - v1.1.x - videodriver
#ifdef DRIVER
virtual BOOL handle_driver_changes(rfb::Region2D &rgncache,rfb::UpdateTracker &tracker);
virtual void copy_bitmaps_to_buffer(ULONG i,rfb::Region2D &rgncache,rfb::UpdateTracker &tracker);
#endif
protected:
vncServer *m_server;
vncDesktop *m_desktop;
omni_mutex m_returnLock;
omni_condition *m_returnsig;
BOOL m_return;
BOOL m_returnset;
bool m_screen_moved;
bool lastsend;
HMODULE user32;
_GetCursorInfo MyGetCursorInfo;
bool XRichCursorEnabled;
DWORD newtick,oldtick;
DWORD m_lLastUpdateTime;
DWORD m_lLastMouseMoveTime;
};
#endif