win32 screen saver now handled.
This commit is contained in:
parent
7100e07d2b
commit
76db457830
|
@ -2,6 +2,7 @@
|
||||||
#include "CClient.h"
|
#include "CClient.h"
|
||||||
#include "CClipboard.h"
|
#include "CClipboard.h"
|
||||||
#include "CMSWindowsClipboard.h"
|
#include "CMSWindowsClipboard.h"
|
||||||
|
#include "CMSWindowsScreenSaver.h"
|
||||||
#include "CPlatform.h"
|
#include "CPlatform.h"
|
||||||
#include "XScreen.h"
|
#include "XScreen.h"
|
||||||
#include "CLock.h"
|
#include "CLock.h"
|
||||||
|
@ -97,6 +98,9 @@ CMSWindowsSecondaryScreen::open(CClient* client)
|
||||||
grabClipboard(id);
|
grabClipboard(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// disable the screen saver
|
||||||
|
getScreenSaver()->disable();
|
||||||
|
|
||||||
// hide the cursor
|
// hide the cursor
|
||||||
m_active = true;
|
m_active = true;
|
||||||
leave();
|
leave();
|
||||||
|
@ -107,6 +111,9 @@ CMSWindowsSecondaryScreen::close()
|
||||||
{
|
{
|
||||||
assert(m_client != NULL);
|
assert(m_client != NULL);
|
||||||
|
|
||||||
|
// restore the screen saver settings
|
||||||
|
getScreenSaver()->enable();
|
||||||
|
|
||||||
// close the display
|
// close the display
|
||||||
closeDisplay();
|
closeDisplay();
|
||||||
|
|
||||||
|
@ -382,6 +389,17 @@ CMSWindowsSecondaryScreen::grabClipboard(ClipboardID /*id*/)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CMSWindowsSecondaryScreen::screenSaver(bool activate)
|
||||||
|
{
|
||||||
|
if (activate) {
|
||||||
|
getScreenSaver()->activate();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
getScreenSaver()->deactivate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CMSWindowsSecondaryScreen::getMousePos(SInt32& x, SInt32& y) const
|
CMSWindowsSecondaryScreen::getMousePos(SInt32& x, SInt32& y) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -36,6 +36,7 @@ public:
|
||||||
virtual void mouseWheel(SInt32 delta);
|
virtual void mouseWheel(SInt32 delta);
|
||||||
virtual void setClipboard(ClipboardID, const IClipboard*);
|
virtual void setClipboard(ClipboardID, const IClipboard*);
|
||||||
virtual void grabClipboard(ClipboardID);
|
virtual void grabClipboard(ClipboardID);
|
||||||
|
virtual void screenSaver(bool activate);
|
||||||
virtual void getMousePos(SInt32& x, SInt32& y) const;
|
virtual void getMousePos(SInt32& x, SInt32& y) const;
|
||||||
virtual void getShape(SInt32&, SInt32&, SInt32&, SInt32&) const;
|
virtual void getShape(SInt32&, SInt32&, SInt32&, SInt32&) const;
|
||||||
virtual SInt32 getJumpZoneSize() const;
|
virtual SInt32 getJumpZoneSize() const;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "CMSWindowsScreen.h"
|
#include "CMSWindowsScreen.h"
|
||||||
|
#include "CMSWindowsScreenSaver.h"
|
||||||
#include "CThread.h"
|
#include "CThread.h"
|
||||||
#include "CLock.h"
|
#include "CLock.h"
|
||||||
#include "TMethodJob.h"
|
#include "TMethodJob.h"
|
||||||
|
@ -27,7 +28,8 @@ CMSWindowsScreen::CMSWindowsScreen() :
|
||||||
m_cursor(NULL),
|
m_cursor(NULL),
|
||||||
m_x(0), m_y(0),
|
m_x(0), m_y(0),
|
||||||
m_w(0), m_h(0),
|
m_w(0), m_h(0),
|
||||||
m_thread(0)
|
m_thread(0),
|
||||||
|
m_screenSaver(NULL)
|
||||||
{
|
{
|
||||||
assert(s_screen == NULL);
|
assert(s_screen == NULL);
|
||||||
s_screen = this;
|
s_screen = this;
|
||||||
|
@ -114,13 +116,20 @@ CMSWindowsScreen::openDisplay()
|
||||||
|
|
||||||
// let subclass prep display
|
// let subclass prep display
|
||||||
onOpenDisplay();
|
onOpenDisplay();
|
||||||
|
|
||||||
|
// initialize the screen saver
|
||||||
|
m_screenSaver = new CMSWindowsScreenSaver();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CMSWindowsScreen::closeDisplay()
|
CMSWindowsScreen::closeDisplay()
|
||||||
{
|
{
|
||||||
assert(s_instance != NULL);
|
assert(s_instance != NULL);
|
||||||
assert(m_class != 0);
|
assert(m_class != 0);
|
||||||
|
|
||||||
|
// done with screen saver
|
||||||
|
delete m_screenSaver;
|
||||||
|
m_screenSaver = NULL;
|
||||||
|
|
||||||
// let subclass close down display
|
// let subclass close down display
|
||||||
onCloseDisplay();
|
onCloseDisplay();
|
||||||
|
@ -203,6 +212,12 @@ CMSWindowsScreen::isCurrentDesktop(HDESK desk) const
|
||||||
getCurrentDesktopName());
|
getCurrentDesktopName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CMSWindowsScreenSaver*
|
||||||
|
CMSWindowsScreen::getScreenSaver() const
|
||||||
|
{
|
||||||
|
return m_screenSaver;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CMSWindowsScreen::getEvent(MSG* msg) const
|
CMSWindowsScreen::getEvent(MSG* msg) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
|
class CMSWindowsScreenSaver;
|
||||||
class CThread;
|
class CThread;
|
||||||
|
|
||||||
class CMSWindowsScreen {
|
class CMSWindowsScreen {
|
||||||
|
@ -61,6 +62,10 @@ protected:
|
||||||
// windows 95/98/me.
|
// windows 95/98/me.
|
||||||
bool isCurrentDesktop(HDESK desk) const;
|
bool isCurrentDesktop(HDESK desk) const;
|
||||||
|
|
||||||
|
// get the screen saver object
|
||||||
|
CMSWindowsScreenSaver*
|
||||||
|
getScreenSaver() const;
|
||||||
|
|
||||||
// wait for and get the next message. cancellable.
|
// wait for and get the next message. cancellable.
|
||||||
void getEvent(MSG*) const;
|
void getEvent(MSG*) const;
|
||||||
|
|
||||||
|
@ -91,6 +96,7 @@ private:
|
||||||
SInt32 m_x, m_y;
|
SInt32 m_x, m_y;
|
||||||
SInt32 m_w, m_h;
|
SInt32 m_w, m_h;
|
||||||
DWORD m_thread;
|
DWORD m_thread;
|
||||||
|
CMSWindowsScreenSaver* m_screenSaver;
|
||||||
static CMSWindowsScreen* s_screen;
|
static CMSWindowsScreen* s_screen;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -95,6 +95,10 @@ SOURCE=.\CMSWindowsScreen.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\CMSWindowsScreenSaver.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\CPlatform.cpp
|
SOURCE=.\CPlatform.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
|
@ -111,6 +115,10 @@ SOURCE=.\CMSWindowsScreen.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\CMSWindowsScreenSaver.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\CPlatform.h
|
SOURCE=.\CPlatform.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "CMSWindowsPrimaryScreen.h"
|
#include "CMSWindowsPrimaryScreen.h"
|
||||||
#include "CServer.h"
|
#include "CServer.h"
|
||||||
#include "CMSWindowsClipboard.h"
|
#include "CMSWindowsClipboard.h"
|
||||||
|
#include "CMSWindowsScreenSaver.h"
|
||||||
#include "CPlatform.h"
|
#include "CPlatform.h"
|
||||||
#include "XScreen.h"
|
#include "XScreen.h"
|
||||||
#include "XSynergy.h"
|
#include "XSynergy.h"
|
||||||
|
@ -34,15 +35,29 @@ CMSWindowsPrimaryScreen::CMSWindowsPrimaryScreen() :
|
||||||
m_setRelay = (SetRelayFunc)GetProcAddress(m_hookLibrary, "setRelay");
|
m_setRelay = (SetRelayFunc)GetProcAddress(m_hookLibrary, "setRelay");
|
||||||
m_install = (InstallFunc)GetProcAddress(m_hookLibrary, "install");
|
m_install = (InstallFunc)GetProcAddress(m_hookLibrary, "install");
|
||||||
m_uninstall = (UninstallFunc)GetProcAddress(m_hookLibrary, "uninstall");
|
m_uninstall = (UninstallFunc)GetProcAddress(m_hookLibrary, "uninstall");
|
||||||
|
m_init = (InitFunc)GetProcAddress(m_hookLibrary, "init");
|
||||||
|
m_cleanup = (CleanupFunc)GetProcAddress(m_hookLibrary, "cleanup");
|
||||||
if (m_setZone == NULL ||
|
if (m_setZone == NULL ||
|
||||||
m_setRelay == NULL ||
|
m_setRelay == NULL ||
|
||||||
m_install == NULL ||
|
m_install == NULL ||
|
||||||
m_uninstall == NULL) {
|
m_uninstall == NULL ||
|
||||||
|
m_init == NULL ||
|
||||||
|
m_cleanup == NULL) {
|
||||||
log((CLOG_ERR "invalid hook library"));
|
log((CLOG_ERR "invalid hook library"));
|
||||||
FreeLibrary(m_hookLibrary);
|
FreeLibrary(m_hookLibrary);
|
||||||
throw XScreenOpenFailure();
|
throw XScreenOpenFailure();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get the screen saver functions
|
||||||
|
m_installScreenSaver = (InstallScreenSaverFunc)GetProcAddress(
|
||||||
|
m_hookLibrary, "installScreenSaver");
|
||||||
|
m_uninstallScreenSaver = (UninstallScreenSaverFunc)GetProcAddress(
|
||||||
|
m_hookLibrary, "uninstallScreenSaver");
|
||||||
|
if (m_installScreenSaver == NULL || m_uninstallScreenSaver == NULL) {
|
||||||
|
// disable uninstall if install is unavailable
|
||||||
|
m_uninstallScreenSaver = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// detect operating system
|
// detect operating system
|
||||||
m_is95Family = CPlatform::isWindows95Family();
|
m_is95Family = CPlatform::isWindows95Family();
|
||||||
|
|
||||||
|
@ -56,6 +71,11 @@ CMSWindowsPrimaryScreen::~CMSWindowsPrimaryScreen()
|
||||||
assert(m_hookLibrary != NULL);
|
assert(m_hookLibrary != NULL);
|
||||||
assert(m_window == NULL);
|
assert(m_window == NULL);
|
||||||
|
|
||||||
|
// uninstall screen saver hook
|
||||||
|
if (m_uninstallScreenSaver != NULL) {
|
||||||
|
m_uninstallScreenSaver();
|
||||||
|
}
|
||||||
|
|
||||||
// done with hook library
|
// done with hook library
|
||||||
FreeLibrary(m_hookLibrary);
|
FreeLibrary(m_hookLibrary);
|
||||||
}
|
}
|
||||||
|
@ -346,6 +366,12 @@ CMSWindowsPrimaryScreen::isLockedToScreen() const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
CMSWindowsPrimaryScreen::isScreenSaverActive() const
|
||||||
|
{
|
||||||
|
return getScreenSaver()->isActive();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CMSWindowsPrimaryScreen::onOpenDisplay()
|
CMSWindowsPrimaryScreen::onOpenDisplay()
|
||||||
{
|
{
|
||||||
|
@ -355,6 +381,14 @@ CMSWindowsPrimaryScreen::onOpenDisplay()
|
||||||
// save thread id. we'll need to pass this to the hook library.
|
// save thread id. we'll need to pass this to the hook library.
|
||||||
m_threadID = GetCurrentThreadId();
|
m_threadID = GetCurrentThreadId();
|
||||||
|
|
||||||
|
// initialize hook library
|
||||||
|
m_init(m_threadID);
|
||||||
|
|
||||||
|
// install the screen saver hook
|
||||||
|
if (m_installScreenSaver != NULL) {
|
||||||
|
m_installScreenSaver();
|
||||||
|
}
|
||||||
|
|
||||||
// get the input desktop and switch to it
|
// get the input desktop and switch to it
|
||||||
if (m_is95Family) {
|
if (m_is95Family) {
|
||||||
if (!openDesktop()) {
|
if (!openDesktop()) {
|
||||||
|
@ -379,6 +413,14 @@ CMSWindowsPrimaryScreen::onCloseDisplay()
|
||||||
switchDesktop(NULL);
|
switchDesktop(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// uninstall the screen saver hook
|
||||||
|
if (m_uninstallScreenSaver != NULL) {
|
||||||
|
m_uninstallScreenSaver();
|
||||||
|
}
|
||||||
|
|
||||||
|
// cleanup hook library
|
||||||
|
m_cleanup();
|
||||||
|
|
||||||
// clear thread id
|
// clear thread id
|
||||||
m_threadID = 0;
|
m_threadID = 0;
|
||||||
|
|
||||||
|
@ -507,6 +549,17 @@ CMSWindowsPrimaryScreen::onPreTranslate(MSG* msg)
|
||||||
m_y = static_cast<SInt32>(msg->lParam);
|
m_y = static_cast<SInt32>(msg->lParam);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
case SYNERGY_MSG_SCREEN_SAVER:
|
||||||
|
if (msg->wParam != 0) {
|
||||||
|
if (getScreenSaver()->checkStarted(msg->message, FALSE, 0)) {
|
||||||
|
m_server->onScreenSaver(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_server->onScreenSaver(false);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
case WM_TIMER:
|
case WM_TIMER:
|
||||||
// if current desktop is not the input desktop then switch to it
|
// if current desktop is not the input desktop then switch to it
|
||||||
if (!m_is95Family) {
|
if (!m_is95Family) {
|
||||||
|
@ -709,7 +762,7 @@ bool
|
||||||
CMSWindowsPrimaryScreen::openDesktop()
|
CMSWindowsPrimaryScreen::openDesktop()
|
||||||
{
|
{
|
||||||
// install hooks
|
// install hooks
|
||||||
m_install(m_threadID);
|
m_install();
|
||||||
|
|
||||||
// note -- we use a fullscreen window to grab input. it should
|
// note -- we use a fullscreen window to grab input. it should
|
||||||
// be possible to use a 1x1 window but i've run into problems
|
// be possible to use a 1x1 window but i've run into problems
|
||||||
|
@ -819,7 +872,7 @@ CMSWindowsPrimaryScreen::switchDesktop(HDESK desk)
|
||||||
}
|
}
|
||||||
|
|
||||||
// install hooks
|
// install hooks
|
||||||
m_install(m_threadID);
|
m_install();
|
||||||
|
|
||||||
// note -- we use a fullscreen window to grab input. it should
|
// note -- we use a fullscreen window to grab input. it should
|
||||||
// be possible to use a 1x1 window but i've run into problems
|
// be possible to use a 1x1 window but i've run into problems
|
||||||
|
|
|
@ -30,6 +30,7 @@ public:
|
||||||
virtual void getClipboard(ClipboardID, IClipboard*) const;
|
virtual void getClipboard(ClipboardID, IClipboard*) const;
|
||||||
virtual KeyModifierMask getToggleMask() const;
|
virtual KeyModifierMask getToggleMask() const;
|
||||||
virtual bool isLockedToScreen() const;
|
virtual bool isLockedToScreen() const;
|
||||||
|
virtual bool isScreenSaverActive() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// CMSWindowsScreen overrides
|
// CMSWindowsScreen overrides
|
||||||
|
@ -106,10 +107,14 @@ private:
|
||||||
|
|
||||||
// hook library stuff
|
// hook library stuff
|
||||||
HINSTANCE m_hookLibrary;
|
HINSTANCE m_hookLibrary;
|
||||||
|
InitFunc m_init;
|
||||||
|
CleanupFunc m_cleanup;
|
||||||
InstallFunc m_install;
|
InstallFunc m_install;
|
||||||
UninstallFunc m_uninstall;
|
UninstallFunc m_uninstall;
|
||||||
SetZoneFunc m_setZone;
|
SetZoneFunc m_setZone;
|
||||||
SetRelayFunc m_setRelay;
|
SetRelayFunc m_setRelay;
|
||||||
|
InstallScreenSaverFunc m_installScreenSaver;
|
||||||
|
UninstallScreenSaverFunc m_uninstallScreenSaver;
|
||||||
|
|
||||||
// stuff for restoring active window
|
// stuff for restoring active window
|
||||||
HWND m_lastForegroundWindow;
|
HWND m_lastForegroundWindow;
|
||||||
|
|
|
@ -45,6 +45,7 @@ static HANDLE g_keyHookThread = NULL;
|
||||||
static DWORD g_keyHookThreadID = 0;
|
static DWORD g_keyHookThreadID = 0;
|
||||||
static HANDLE g_keyHookEvent = NULL;
|
static HANDLE g_keyHookEvent = NULL;
|
||||||
static HHOOK g_keyboardLL = NULL;
|
static HHOOK g_keyboardLL = NULL;
|
||||||
|
static bool g_screenSaver = false;
|
||||||
static bool g_relay = false;
|
static bool g_relay = false;
|
||||||
static SInt32 g_zoneSize = 0;
|
static SInt32 g_zoneSize = 0;
|
||||||
static UInt32 g_zoneSides = 0;
|
static UInt32 g_zoneSides = 0;
|
||||||
|
@ -247,6 +248,14 @@ LRESULT CALLBACK
|
||||||
getMessageHook(int code, WPARAM wParam, LPARAM lParam)
|
getMessageHook(int code, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
if (code >= 0) {
|
if (code >= 0) {
|
||||||
|
if (g_screenSaver) {
|
||||||
|
MSG* msg = reinterpret_cast<MSG*>(lParam);
|
||||||
|
if (msg->message == WM_SYSCOMMAND && msg->wParam == SC_SCREENSAVE) {
|
||||||
|
// broadcast screen saver started message
|
||||||
|
PostThreadMessage(g_threadID,
|
||||||
|
SYNERGY_MSG_SCREEN_SAVER, TRUE, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (g_relay) {
|
if (g_relay) {
|
||||||
MSG* msg = reinterpret_cast<MSG*>(lParam);
|
MSG* msg = reinterpret_cast<MSG*>(lParam);
|
||||||
if (msg->message == g_wmMouseWheel) {
|
if (msg->message == g_wmMouseWheel) {
|
||||||
|
@ -455,19 +464,46 @@ DllMain(HINSTANCE instance, DWORD reason, LPVOID)
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
int
|
int
|
||||||
install(DWORD threadID)
|
init(DWORD threadID)
|
||||||
{
|
{
|
||||||
assert(g_threadID == 0);
|
assert(g_hinstance != NULL);
|
||||||
assert(g_hinstance != NULL);
|
|
||||||
assert(g_keyboard == NULL);
|
// see if already initialized
|
||||||
assert(g_mouse == NULL);
|
if (g_threadID != 0) {
|
||||||
assert(g_cbt == NULL);
|
return 0;
|
||||||
assert(g_wheelSupport != kWheelOld || g_getMessage == NULL);
|
}
|
||||||
|
|
||||||
// save thread id. we'll post messages to this thread's
|
// save thread id. we'll post messages to this thread's
|
||||||
// message queue.
|
// message queue.
|
||||||
g_threadID = threadID;
|
g_threadID = threadID;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
cleanup(void)
|
||||||
|
{
|
||||||
|
assert(g_hinstance != NULL);
|
||||||
|
|
||||||
|
g_threadID = 0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
install()
|
||||||
|
{
|
||||||
|
assert(g_hinstance != NULL);
|
||||||
|
assert(g_keyboard == NULL);
|
||||||
|
assert(g_mouse == NULL);
|
||||||
|
assert(g_cbt == NULL);
|
||||||
|
assert(g_getMessage == NULL || g_screenSaver);
|
||||||
|
|
||||||
|
// must be initialized
|
||||||
|
if (g_threadID == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// set defaults
|
// set defaults
|
||||||
g_relay = false;
|
g_relay = false;
|
||||||
g_zoneSize = 0;
|
g_zoneSize = 0;
|
||||||
|
@ -520,8 +556,8 @@ install(DWORD threadID)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// install GetMessage hook
|
// install GetMessage hook (unless already installed)
|
||||||
if (g_wheelSupport == kWheelOld) {
|
if (g_wheelSupport == kWheelOld && g_getMessage == NULL) {
|
||||||
g_getMessage = SetWindowsHookEx(WH_GETMESSAGE,
|
g_getMessage = SetWindowsHookEx(WH_GETMESSAGE,
|
||||||
&getMessageHook,
|
&getMessageHook,
|
||||||
g_hinstance,
|
g_hinstance,
|
||||||
|
@ -563,9 +599,7 @@ install(DWORD threadID)
|
||||||
int
|
int
|
||||||
uninstall(void)
|
uninstall(void)
|
||||||
{
|
{
|
||||||
assert(g_keyboard != NULL);
|
assert(g_hinstance != NULL);
|
||||||
assert(g_mouse != NULL);
|
|
||||||
assert(g_cbt != NULL);
|
|
||||||
|
|
||||||
// uninstall hooks
|
// uninstall hooks
|
||||||
if (g_keyHookThread != NULL) {
|
if (g_keyHookThread != NULL) {
|
||||||
|
@ -577,17 +611,22 @@ uninstall(void)
|
||||||
g_keyHookThread = NULL;
|
g_keyHookThread = NULL;
|
||||||
g_keyHookThreadID = 0;
|
g_keyHookThreadID = 0;
|
||||||
}
|
}
|
||||||
UnhookWindowsHookEx(g_keyboard);
|
if (g_keyboard != NULL) {
|
||||||
UnhookWindowsHookEx(g_mouse);
|
UnhookWindowsHookEx(g_keyboard);
|
||||||
UnhookWindowsHookEx(g_cbt);
|
}
|
||||||
if (g_getMessage != NULL) {
|
if (g_mouse != NULL) {
|
||||||
|
UnhookWindowsHookEx(g_mouse);
|
||||||
|
}
|
||||||
|
if (g_cbt != NULL) {
|
||||||
|
UnhookWindowsHookEx(g_cbt);
|
||||||
|
}
|
||||||
|
if (g_getMessage != NULL && !g_screenSaver) {
|
||||||
UnhookWindowsHookEx(g_getMessage);
|
UnhookWindowsHookEx(g_getMessage);
|
||||||
|
g_getMessage = NULL;
|
||||||
}
|
}
|
||||||
g_keyboard = NULL;
|
g_keyboard = NULL;
|
||||||
g_mouse = NULL;
|
g_mouse = NULL;
|
||||||
g_cbt = NULL;
|
g_cbt = NULL;
|
||||||
g_getMessage = NULL;
|
|
||||||
g_threadID = 0;
|
|
||||||
|
|
||||||
// show the cursor
|
// show the cursor
|
||||||
restoreCursor();
|
restoreCursor();
|
||||||
|
@ -595,6 +634,47 @@ uninstall(void)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
installScreenSaver(void)
|
||||||
|
{
|
||||||
|
assert(g_hinstance != NULL);
|
||||||
|
|
||||||
|
// must be initialized
|
||||||
|
if (g_threadID == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// generate screen saver messages
|
||||||
|
g_screenSaver = true;
|
||||||
|
|
||||||
|
// install hook unless it's already installed
|
||||||
|
if (g_getMessage == NULL) {
|
||||||
|
g_getMessage = SetWindowsHookEx(WH_GETMESSAGE,
|
||||||
|
&getMessageHook,
|
||||||
|
g_hinstance,
|
||||||
|
0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (g_getMessage != NULL) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
uninstallScreenSaver(void)
|
||||||
|
{
|
||||||
|
assert(g_hinstance != NULL);
|
||||||
|
|
||||||
|
// uninstall hook unless the mouse wheel hook is installed
|
||||||
|
if (g_getMessage != NULL && g_threadID == 0) {
|
||||||
|
UnhookWindowsHookEx(g_getMessage);
|
||||||
|
g_getMessage = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// screen saver hook is no longer installed
|
||||||
|
g_screenSaver = false;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
setZone(UInt32 sides,
|
setZone(UInt32 sides,
|
||||||
SInt32 x, SInt32 y, SInt32 w, SInt32 h,
|
SInt32 x, SInt32 y, SInt32 w, SInt32 h,
|
||||||
|
|
|
@ -22,17 +22,26 @@
|
||||||
#define SYNERGY_MSG_MOUSE_MOVE WM_APP + 0x0014 // x; y
|
#define SYNERGY_MSG_MOUSE_MOVE WM_APP + 0x0014 // x; y
|
||||||
#define SYNERGY_MSG_POST_WARP WM_APP + 0x0015 // x; y
|
#define SYNERGY_MSG_POST_WARP WM_APP + 0x0015 // x; y
|
||||||
#define SYNERGY_MSG_MOUSE_WHEEL WM_APP + 0x0016 // delta; <unused>
|
#define SYNERGY_MSG_MOUSE_WHEEL WM_APP + 0x0016 // delta; <unused>
|
||||||
|
#define SYNERGY_MSG_SCREEN_SAVER WM_APP + 0x0017 // activated; <unused>
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
typedef int (*InstallFunc)(DWORD targetQueueThreadID);
|
typedef int (*InitFunc)(DWORD targetQueueThreadID);
|
||||||
|
typedef int (*CleanupFunc)(void);
|
||||||
|
typedef int (*InstallFunc)(void);
|
||||||
typedef int (*UninstallFunc)(void);
|
typedef int (*UninstallFunc)(void);
|
||||||
|
typedef int (*InstallScreenSaverFunc)(void);
|
||||||
|
typedef int (*UninstallScreenSaverFunc)(void);
|
||||||
typedef void (*SetZoneFunc)(UInt32,
|
typedef void (*SetZoneFunc)(UInt32,
|
||||||
SInt32, SInt32, SInt32, SInt32, SInt32);
|
SInt32, SInt32, SInt32, SInt32, SInt32);
|
||||||
typedef void (*SetRelayFunc)(void);
|
typedef void (*SetRelayFunc)(void);
|
||||||
|
|
||||||
CSYNERGYHOOK_API int install(DWORD);
|
CSYNERGYHOOK_API int init(DWORD);
|
||||||
|
CSYNERGYHOOK_API int cleanup(void);
|
||||||
|
CSYNERGYHOOK_API int install(void);
|
||||||
CSYNERGYHOOK_API int uninstall(void);
|
CSYNERGYHOOK_API int uninstall(void);
|
||||||
|
CSYNERGYHOOK_API int installScreenSaver(void);
|
||||||
|
CSYNERGYHOOK_API int uninstallScreenSaver(void);
|
||||||
CSYNERGYHOOK_API void setZone(UInt32 sides,
|
CSYNERGYHOOK_API void setZone(UInt32 sides,
|
||||||
SInt32 x, SInt32 y, SInt32 w, SInt32 h,
|
SInt32 x, SInt32 y, SInt32 w, SInt32 h,
|
||||||
SInt32 jumpZoneSize);
|
SInt32 jumpZoneSize);
|
||||||
|
|
Loading…
Reference in New Issue