mirror of https://github.com/BOINC/boinc.git
*** empty log message ***
svn path=/trunk/boinc/; revision=5368
This commit is contained in:
parent
5a2a60ad91
commit
6049c6756f
|
@ -24291,3 +24291,30 @@ David 8 Feb 2005
|
||||||
setup_project.py
|
setup_project.py
|
||||||
tools/
|
tools/
|
||||||
make_project
|
make_project
|
||||||
|
|
||||||
|
Rom 8 Feb 2005
|
||||||
|
- Bug Fix: Add the ability for setup to shutdown any running instances
|
||||||
|
of the BOINC Manager during install and uninstall.
|
||||||
|
- Bug Fix: Change "Launch the program" to "Launch the BOINC Manager"
|
||||||
|
- Bug Fix: Fix a number of event bubble up issues with the base
|
||||||
|
wxTaskBarEx class, the sample format provided with the wxWidget
|
||||||
|
framework leads down the wrong path if you try to extend the class.
|
||||||
|
- Bug Fix: Add another custom action dll to do the actual shutdown
|
||||||
|
of the BOINC Manager
|
||||||
|
|
||||||
|
clientgui/
|
||||||
|
BOINCGUIApp.cpp
|
||||||
|
BOINCTaskBar.cpp, .h
|
||||||
|
clientgui/msw/
|
||||||
|
taskbarex.cpp, .h
|
||||||
|
win_build/installerv2/
|
||||||
|
BOINC.ism
|
||||||
|
win_build/installerv2/Windows/src/ShutdownBOINCManager
|
||||||
|
ShutdownBOINCManager.cpp ( added )
|
||||||
|
ShutdownBOINCManager.def ( added )
|
||||||
|
ShutdownBOINCManager.sln ( added )
|
||||||
|
ShutdownBOINCManager.vcproj ( added )
|
||||||
|
stdafx.cpp, .h ( added )
|
||||||
|
win_build/installerv2/Windows/x86/
|
||||||
|
shutdown.dll
|
||||||
|
|
|
@ -99,6 +99,7 @@ bool CBOINCGUIApp::OnInit()
|
||||||
wxLog::SetActiveTarget(m_pLog);
|
wxLog::SetActiveTarget(m_pLog);
|
||||||
|
|
||||||
m_pLog->AddTraceMask( wxT("Function Start/End") );
|
m_pLog->AddTraceMask( wxT("Function Start/End") );
|
||||||
|
m_pLog->AddTraceMask( wxT("Function Status") );
|
||||||
|
|
||||||
// Enable the in memory virtual file system for
|
// Enable the in memory virtual file system for
|
||||||
// storing images
|
// storing images
|
||||||
|
|
|
@ -38,6 +38,11 @@ BEGIN_EVENT_TABLE (CTaskBarIcon, wxTaskBarIconEx)
|
||||||
EVT_MENU_RANGE(ID_TB_NETWORKRUNALWAYS, ID_TB_NETWORKSUSPEND, CTaskBarIcon::OnNetworkSelection)
|
EVT_MENU_RANGE(ID_TB_NETWORKRUNALWAYS, ID_TB_NETWORKSUSPEND, CTaskBarIcon::OnNetworkSelection)
|
||||||
EVT_MENU(wxID_ABOUT, CTaskBarIcon::OnAbout)
|
EVT_MENU(wxID_ABOUT, CTaskBarIcon::OnAbout)
|
||||||
EVT_MENU(wxID_EXIT, CTaskBarIcon::OnExit)
|
EVT_MENU(wxID_EXIT, CTaskBarIcon::OnExit)
|
||||||
|
|
||||||
|
#ifdef __WXMSW__
|
||||||
|
EVT_TASKBAR_SHUTDOWN(CTaskBarIcon::OnShutdown)
|
||||||
|
#endif
|
||||||
|
|
||||||
EVT_IDLE(CTaskBarIcon::OnIdle)
|
EVT_IDLE(CTaskBarIcon::OnIdle)
|
||||||
EVT_CLOSE(CTaskBarIcon::OnClose)
|
EVT_CLOSE(CTaskBarIcon::OnClose)
|
||||||
EVT_TASKBAR_MOVE(CTaskBarIcon::OnMouseMove)
|
EVT_TASKBAR_MOVE(CTaskBarIcon::OnMouseMove)
|
||||||
|
@ -53,7 +58,7 @@ END_EVENT_TABLE ()
|
||||||
|
|
||||||
|
|
||||||
CTaskBarIcon::CTaskBarIcon() :
|
CTaskBarIcon::CTaskBarIcon() :
|
||||||
wxTaskBarIconEx()
|
wxTaskBarIconEx( wxT("BOINCManagerSystray") )
|
||||||
{
|
{
|
||||||
m_iconTaskBarIcon = wxIcon( boinc_xpm );
|
m_iconTaskBarIcon = wxIcon( boinc_xpm );
|
||||||
m_dtLastHoverDetected = wxDateTime( (time_t)0 );
|
m_dtLastHoverDetected = wxDateTime( (time_t)0 );
|
||||||
|
@ -146,19 +151,40 @@ void CTaskBarIcon::OnAbout( wxCommandEvent& WXUNUSED(event) )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CTaskBarIcon::OnExit( wxCommandEvent& WXUNUSED(event) )
|
void CTaskBarIcon::OnExit( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
ResetTaskBar();
|
wxLogTrace(wxT("Function Start/End"), wxT("CTaskBarIcon::OnExit - Function Begin"));
|
||||||
|
|
||||||
CMainFrame* pFrame = wxGetApp().GetFrame();
|
wxCloseEvent eventClose;
|
||||||
wxASSERT(NULL != pFrame);
|
|
||||||
wxASSERT(wxDynamicCast(pFrame, CMainFrame));
|
|
||||||
|
|
||||||
if ( NULL != pFrame )
|
OnClose( eventClose );
|
||||||
pFrame->Close(true);
|
|
||||||
|
if ( eventClose.GetSkipped() ) event.Skip();
|
||||||
|
|
||||||
|
wxLogTrace(wxT("Function Start/End"), wxT("CTaskBarIcon::OnExit - Function End"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __WXMSW__
|
||||||
|
|
||||||
|
|
||||||
|
void CTaskBarIcon::OnShutdown( wxTaskBarIconExEvent& event )
|
||||||
|
{
|
||||||
|
wxLogTrace(wxT("Function Start/End"), wxT("CTaskBarIcon::OnShutdown - Function Begin"));
|
||||||
|
|
||||||
|
wxCloseEvent eventClose;
|
||||||
|
|
||||||
|
OnClose( eventClose );
|
||||||
|
|
||||||
|
if ( eventClose.GetSkipped() ) event.Skip();
|
||||||
|
|
||||||
|
wxLogTrace(wxT("Function Start/End"), wxT("CTaskBarIcon::OnShutdown - Function End"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
void CTaskBarIcon::OnIdle( wxIdleEvent& event )
|
void CTaskBarIcon::OnIdle( wxIdleEvent& event )
|
||||||
{
|
{
|
||||||
wxGetApp().UpdateSystemIdleDetection();
|
wxGetApp().UpdateSystemIdleDetection();
|
||||||
|
@ -168,6 +194,8 @@ void CTaskBarIcon::OnIdle( wxIdleEvent& event )
|
||||||
|
|
||||||
void CTaskBarIcon::OnClose( wxCloseEvent& event )
|
void CTaskBarIcon::OnClose( wxCloseEvent& event )
|
||||||
{
|
{
|
||||||
|
wxLogTrace(wxT("Function Start/End"), wxT("CTaskBarIcon::OnClose - Function Begin"));
|
||||||
|
|
||||||
ResetTaskBar();
|
ResetTaskBar();
|
||||||
|
|
||||||
CMainFrame* pFrame = wxGetApp().GetFrame();
|
CMainFrame* pFrame = wxGetApp().GetFrame();
|
||||||
|
@ -178,6 +206,8 @@ void CTaskBarIcon::OnClose( wxCloseEvent& event )
|
||||||
pFrame->Close(true);
|
pFrame->Close(true);
|
||||||
|
|
||||||
event.Skip();
|
event.Skip();
|
||||||
|
|
||||||
|
wxLogTrace(wxT("Function Start/End"), wxT("CTaskBarIcon::OnClose - Function End"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,9 @@ public:
|
||||||
void OnNetworkSelection( wxCommandEvent& event );
|
void OnNetworkSelection( wxCommandEvent& event );
|
||||||
void OnAbout( wxCommandEvent& event );
|
void OnAbout( wxCommandEvent& event );
|
||||||
void OnExit( wxCommandEvent& event );
|
void OnExit( wxCommandEvent& event );
|
||||||
|
#ifdef __WXMSW__
|
||||||
|
void OnShutdown( wxTaskBarIconExEvent& event );
|
||||||
|
#endif
|
||||||
|
|
||||||
void OnIdle( wxIdleEvent& event );
|
void OnIdle( wxIdleEvent& event );
|
||||||
void OnClose( wxCloseEvent& event );
|
void OnClose( wxCloseEvent& event );
|
||||||
|
|
|
@ -20,7 +20,10 @@
|
||||||
LRESULT APIENTRY wxTaskBarIconExWindowProc( HWND hWnd, unsigned msg, UINT wParam, LONG lParam );
|
LRESULT APIENTRY wxTaskBarIconExWindowProc( HWND hWnd, unsigned msg, UINT wParam, LONG lParam );
|
||||||
|
|
||||||
wxChar *wxTaskBarExWindowClass = (wxChar*) wxT("wxTaskBarExWindowClass");
|
wxChar *wxTaskBarExWindowClass = (wxChar*) wxT("wxTaskBarExWindowClass");
|
||||||
|
wxChar *wxTaskBarExWindow = (wxChar*) wxT("wxTaskBarExWindow");
|
||||||
|
|
||||||
const UINT WM_TASKBARCREATED = ::RegisterWindowMessage(wxT("TaskbarCreated"));
|
const UINT WM_TASKBARCREATED = ::RegisterWindowMessage(wxT("TaskbarCreated"));
|
||||||
|
const UINT WM_TASKBARSHUTDOWN = ::RegisterWindowMessage(wxT("TaskbarShutdown"));
|
||||||
|
|
||||||
wxList wxTaskBarIconEx::sm_taskBarIcons;
|
wxList wxTaskBarIconEx::sm_taskBarIcons;
|
||||||
bool wxTaskBarIconEx::sm_registeredClass = FALSE;
|
bool wxTaskBarIconEx::sm_registeredClass = FALSE;
|
||||||
|
@ -34,6 +37,7 @@ DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_SHOW )
|
||||||
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_HIDE )
|
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_HIDE )
|
||||||
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_TIMEOUT )
|
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_TIMEOUT )
|
||||||
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_USERCLICK )
|
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_USERCLICK )
|
||||||
|
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_SHUTDOWN )
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxTaskBarIconEx, wxEvtHandler)
|
IMPLEMENT_DYNAMIC_CLASS(wxTaskBarIconEx, wxEvtHandler)
|
||||||
|
|
||||||
|
@ -51,7 +55,18 @@ wxTaskBarIconEx::wxTaskBarIconEx(void)
|
||||||
AddObject(this);
|
AddObject(this);
|
||||||
|
|
||||||
if (RegisterWindowClass())
|
if (RegisterWindowClass())
|
||||||
m_hWnd = CreateTaskBarWindow();
|
m_hWnd = CreateTaskBarWindow( wxTaskBarExWindow );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxTaskBarIconEx::wxTaskBarIconEx( wxChar* szWindowTitle )
|
||||||
|
{
|
||||||
|
m_hWnd = 0;
|
||||||
|
m_iconAdded = FALSE;
|
||||||
|
|
||||||
|
AddObject(this);
|
||||||
|
|
||||||
|
if (RegisterWindowClass())
|
||||||
|
m_hWnd = CreateTaskBarWindow( szWindowTitle );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxTaskBarIconEx::~wxTaskBarIconEx(void)
|
wxTaskBarIconEx::~wxTaskBarIconEx(void)
|
||||||
|
@ -73,8 +88,12 @@ wxTaskBarIconEx::~wxTaskBarIconEx(void)
|
||||||
// Events
|
// Events
|
||||||
void wxTaskBarIconEx::OnClose(wxCloseEvent& event)
|
void wxTaskBarIconEx::OnClose(wxCloseEvent& event)
|
||||||
{
|
{
|
||||||
|
wxLogTrace(wxT("Function Start/End"), wxT("wxTaskBarIconEx::OnClose - Function Begin"));
|
||||||
|
|
||||||
::DestroyWindow((HWND) m_hWnd);
|
::DestroyWindow((HWND) m_hWnd);
|
||||||
m_hWnd = 0;
|
m_hWnd = 0;
|
||||||
|
|
||||||
|
wxLogTrace(wxT("Function Start/End"), wxT("wxTaskBarIconEx::OnClose - Function End"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxTaskBarIconEx::OnTaskBarCreated(wxTaskBarIconExEvent& event)
|
void wxTaskBarIconEx::OnTaskBarCreated(wxTaskBarIconExEvent& event)
|
||||||
|
@ -293,12 +312,12 @@ bool wxTaskBarIconEx::RegisterWindowClass()
|
||||||
return( (rc != 0) );
|
return( (rc != 0) );
|
||||||
}
|
}
|
||||||
|
|
||||||
WXHWND wxTaskBarIconEx::CreateTaskBarWindow()
|
WXHWND wxTaskBarIconEx::CreateTaskBarWindow( wxChar* szWindowTitle )
|
||||||
{
|
{
|
||||||
HINSTANCE hInstance = GetModuleHandle(NULL);
|
HINSTANCE hInstance = GetModuleHandle(NULL);
|
||||||
|
|
||||||
HWND hWnd = CreateWindowEx (0, wxTaskBarExWindowClass,
|
HWND hWnd = CreateWindowEx (0, wxTaskBarExWindowClass,
|
||||||
wxT("wxTaskBarExWindow"),
|
szWindowTitle,
|
||||||
WS_OVERLAPPED,
|
WS_OVERLAPPED,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
@ -327,82 +346,108 @@ bool wxTaskBarIconEx::IsBalloonsSupported()
|
||||||
|
|
||||||
long wxTaskBarIconEx::WindowProc( WXHWND hWnd, unsigned int msg, unsigned int wParam, long lParam )
|
long wxTaskBarIconEx::WindowProc( WXHWND hWnd, unsigned int msg, unsigned int wParam, long lParam )
|
||||||
{
|
{
|
||||||
|
wxLogTrace(wxT("Function Start/End"), wxT("wxTaskBarIconEx::WindowProc - Function Begin"));
|
||||||
|
|
||||||
wxEventType eventType = 0;
|
wxEventType eventType = 0;
|
||||||
|
long lReturnValue = 0;
|
||||||
|
|
||||||
if (msg != sm_taskbarMsg)
|
if ( WM_CLOSE == msg )
|
||||||
return DefWindowProc((HWND) hWnd, msg, wParam, lParam);
|
|
||||||
|
|
||||||
switch (lParam)
|
|
||||||
{
|
{
|
||||||
case WM_LBUTTONDOWN:
|
wxLogTrace(wxT("Function Status"), wxT("wxTaskBarIconEx::WindowProc - WM_CLOSE Detected"));
|
||||||
eventType = wxEVT_TASKBAR_LEFT_DOWN;
|
|
||||||
break;
|
wxCloseEvent eventClose(wxEVT_CLOSE_WINDOW, hWnd);
|
||||||
|
ProcessEvent(eventClose);
|
||||||
|
|
||||||
case WM_LBUTTONUP:
|
if ( !eventClose.GetSkipped() )
|
||||||
eventType = wxEVT_TASKBAR_LEFT_UP;
|
lReturnValue = DefWindowProc((HWND) hWnd, msg, wParam, lParam);
|
||||||
break;
|
else
|
||||||
|
lReturnValue = 0;
|
||||||
|
}
|
||||||
|
else if ( WM_TASKBARCREATED == msg )
|
||||||
|
{
|
||||||
|
wxLogTrace(wxT("Function Status"), wxT("wxTaskBarIconEx::WindowProc - WM_TASKBARCREATED Detected"));
|
||||||
|
eventType = wxEVT_TASKBAR_CREATED;
|
||||||
|
}
|
||||||
|
else if ( WM_TASKBARSHUTDOWN == msg )
|
||||||
|
{
|
||||||
|
wxLogTrace(wxT("Function Status"), wxT("wxTaskBarIconEx::WindowProc - WM_TASKBARSHUTDOWN Detected"));
|
||||||
|
eventType = wxEVT_TASKBAR_SHUTDOWN;
|
||||||
|
}
|
||||||
|
if (msg != sm_taskbarMsg)
|
||||||
|
lReturnValue = DefWindowProc((HWND) hWnd, msg, wParam, lParam);
|
||||||
|
|
||||||
case WM_RBUTTONDOWN:
|
if ( 0 == eventType )
|
||||||
eventType = wxEVT_TASKBAR_RIGHT_DOWN;
|
{
|
||||||
break;
|
switch (lParam)
|
||||||
|
{
|
||||||
|
case WM_LBUTTONDOWN:
|
||||||
|
eventType = wxEVT_TASKBAR_LEFT_DOWN;
|
||||||
|
break;
|
||||||
|
|
||||||
case WM_RBUTTONUP:
|
case WM_LBUTTONUP:
|
||||||
eventType = wxEVT_TASKBAR_RIGHT_UP;
|
eventType = wxEVT_TASKBAR_LEFT_UP;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_LBUTTONDBLCLK:
|
case WM_RBUTTONDOWN:
|
||||||
eventType = wxEVT_TASKBAR_LEFT_DCLICK;
|
eventType = wxEVT_TASKBAR_RIGHT_DOWN;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_RBUTTONDBLCLK:
|
case WM_RBUTTONUP:
|
||||||
eventType = wxEVT_TASKBAR_RIGHT_DCLICK;
|
eventType = wxEVT_TASKBAR_RIGHT_UP;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_MOUSEMOVE:
|
case WM_LBUTTONDBLCLK:
|
||||||
eventType = wxEVT_TASKBAR_MOVE;
|
eventType = wxEVT_TASKBAR_LEFT_DCLICK;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_CONTEXTMENU:
|
case WM_RBUTTONDBLCLK:
|
||||||
eventType = wxEVT_TASKBAR_CONTEXT_MENU;
|
eventType = wxEVT_TASKBAR_RIGHT_DCLICK;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NIN_SELECT:
|
case WM_MOUSEMOVE:
|
||||||
eventType = wxEVT_TASKBAR_SELECT;
|
eventType = wxEVT_TASKBAR_MOVE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NIN_KEYSELECT:
|
case WM_CONTEXTMENU:
|
||||||
eventType = wxEVT_TASKBAR_KEY_SELECT;
|
eventType = wxEVT_TASKBAR_CONTEXT_MENU;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NIN_BALLOONSHOW:
|
case NIN_SELECT:
|
||||||
eventType = wxEVT_TASKBAR_BALLOON_SHOW;
|
eventType = wxEVT_TASKBAR_SELECT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NIN_BALLOONHIDE:
|
case NIN_KEYSELECT:
|
||||||
eventType = wxEVT_TASKBAR_BALLOON_HIDE;
|
eventType = wxEVT_TASKBAR_KEY_SELECT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NIN_BALLOONTIMEOUT:
|
case NIN_BALLOONSHOW:
|
||||||
eventType = wxEVT_TASKBAR_BALLOON_TIMEOUT;
|
eventType = wxEVT_TASKBAR_BALLOON_SHOW;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NIN_BALLOONUSERCLICK:
|
case NIN_BALLOONHIDE:
|
||||||
eventType = wxEVT_TASKBAR_BALLOON_USERCLICK;
|
eventType = wxEVT_TASKBAR_BALLOON_HIDE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
case NIN_BALLOONTIMEOUT:
|
||||||
if ( WM_TASKBARCREATED == lParam )
|
eventType = wxEVT_TASKBAR_BALLOON_TIMEOUT;
|
||||||
eventType = wxEVT_TASKBAR_CREATED;
|
break;
|
||||||
break;
|
|
||||||
|
case NIN_BALLOONUSERCLICK:
|
||||||
|
eventType = wxEVT_TASKBAR_BALLOON_USERCLICK;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eventType)
|
if (eventType)
|
||||||
{
|
{
|
||||||
wxTaskBarIconExEvent event(eventType, this);
|
wxTaskBarIconExEvent event(eventType, this);
|
||||||
ProcessEvent(event);
|
ProcessEvent(event);
|
||||||
|
|
||||||
|
lReturnValue = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
wxLogTrace(wxT("Function Start/End"), wxT("wxTaskBarIconEx::WindowProc - Function End"));
|
||||||
|
return lReturnValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT APIENTRY wxTaskBarIconExWindowProc( HWND hWnd, unsigned msg, UINT wParam, LONG lParam )
|
LRESULT APIENTRY wxTaskBarIconExWindowProc( HWND hWnd, unsigned msg, UINT wParam, LONG lParam )
|
||||||
|
|
|
@ -26,7 +26,10 @@ class wxTaskBarIconExEvent;
|
||||||
class wxTaskBarIconEx: public wxEvtHandler {
|
class wxTaskBarIconEx: public wxEvtHandler {
|
||||||
DECLARE_DYNAMIC_CLASS(wxTaskBarIconEx)
|
DECLARE_DYNAMIC_CLASS(wxTaskBarIconEx)
|
||||||
public:
|
public:
|
||||||
|
|
||||||
wxTaskBarIconEx(void);
|
wxTaskBarIconEx(void);
|
||||||
|
wxTaskBarIconEx( wxChar* szWindowTitle );
|
||||||
|
|
||||||
virtual ~wxTaskBarIconEx(void);
|
virtual ~wxTaskBarIconEx(void);
|
||||||
|
|
||||||
enum ICONTYPES
|
enum ICONTYPES
|
||||||
|
@ -69,7 +72,7 @@ public:
|
||||||
static void AddObject(wxTaskBarIconEx* obj);
|
static void AddObject(wxTaskBarIconEx* obj);
|
||||||
static void RemoveObject(wxTaskBarIconEx* obj);
|
static void RemoveObject(wxTaskBarIconEx* obj);
|
||||||
static bool RegisterWindowClass();
|
static bool RegisterWindowClass();
|
||||||
static WXHWND CreateTaskBarWindow();
|
static WXHWND CreateTaskBarWindow( wxChar* szWindowTitle );
|
||||||
static bool IsBalloonsSupported();
|
static bool IsBalloonsSupported();
|
||||||
long WindowProc( WXHWND hWnd, unsigned int msg, unsigned int wParam, long lParam );
|
long WindowProc( WXHWND hWnd, unsigned int msg, unsigned int wParam, long lParam );
|
||||||
|
|
||||||
|
@ -114,6 +117,7 @@ DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_SHOW, 1561 )
|
||||||
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_HIDE, 1562 )
|
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_HIDE, 1562 )
|
||||||
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_TIMEOUT, 1563 )
|
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_TIMEOUT, 1563 )
|
||||||
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_USERCLICK, 1564 )
|
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_USERCLICK, 1564 )
|
||||||
|
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_SHUTDOWN, 1565 )
|
||||||
END_DECLARE_EVENT_TYPES()
|
END_DECLARE_EVENT_TYPES()
|
||||||
|
|
||||||
#define EVT_TASKBAR_CREATED(fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_TASKBAR_CREATED, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
#define EVT_TASKBAR_CREATED(fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_TASKBAR_CREATED, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
||||||
|
@ -124,6 +128,7 @@ END_DECLARE_EVENT_TYPES()
|
||||||
#define EVT_TASKBAR_BALLOON_HIDE(fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_TASKBAR_BALLOON_HIDE, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
#define EVT_TASKBAR_BALLOON_HIDE(fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_TASKBAR_BALLOON_HIDE, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
||||||
#define EVT_TASKBAR_BALLOON_TIMEOUT(fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_TASKBAR_BALLOON_TIMEOUT, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
#define EVT_TASKBAR_BALLOON_TIMEOUT(fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_TASKBAR_BALLOON_TIMEOUT, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
||||||
#define EVT_TASKBAR_CONTEXT_USERCLICK(fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_TASKBAR_BALLOON_USERCLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
#define EVT_TASKBAR_CONTEXT_USERCLICK(fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_TASKBAR_BALLOON_USERCLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
||||||
|
#define EVT_TASKBAR_SHUTDOWN(fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_TASKBAR_SHUTDOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,145 @@
|
||||||
|
// ShutdownBOINCManager.cpp : Defines the entry point for the DLL application.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
|
||||||
|
|
||||||
|
BOOL APIENTRY DllMain( HANDLE hModule,
|
||||||
|
DWORD ul_reason_for_call,
|
||||||
|
LPVOID lpReserved
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Function: LogError
|
||||||
|
//
|
||||||
|
// Description: This function writes to the MSI log file and displays
|
||||||
|
// the SetupError dialog box as appropriate.
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
int LogError(
|
||||||
|
MSIHANDLE hInstall, // handle to the installation session
|
||||||
|
UINT msgType, // message type to send to Windows Installer
|
||||||
|
UINT pbStyle, // push button sstyle to use in message box
|
||||||
|
UINT iconStyle, // icon style to use in message box
|
||||||
|
int errNum, // number of error in Error table
|
||||||
|
TCHAR* ActionName, // name of the custom action causing error
|
||||||
|
TCHAR* ErrorDesc, // description of the error
|
||||||
|
int statuscode // the return value from an api
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PMSIHANDLE hRec; // handle to a record object
|
||||||
|
TCHAR frmtString[4096]; // string to use in field 0
|
||||||
|
|
||||||
|
switch(msgType)
|
||||||
|
{
|
||||||
|
// Send informational message to the log file
|
||||||
|
case INSTALLMESSAGE_INFO:
|
||||||
|
// generate the format string for field 0
|
||||||
|
_tcscpy(frmtString, _T("Custom Message : "));
|
||||||
|
_tcscat(frmtString, _T("Action Name: [1] "));
|
||||||
|
_tcscat(frmtString, _T("Description: [2] "));
|
||||||
|
_tcscat(frmtString, _T("Status Code: [3] "));
|
||||||
|
|
||||||
|
hRec = MsiCreateRecord(3);
|
||||||
|
|
||||||
|
MsiRecordSetString(hRec, 0, frmtString);
|
||||||
|
MsiRecordSetString(hRec, 1, ActionName);
|
||||||
|
MsiRecordSetString(hRec, 2, ErrorDesc);
|
||||||
|
MsiRecordSetInteger(hRec, 3, statuscode);
|
||||||
|
|
||||||
|
// returns IDOK if successful
|
||||||
|
return (MsiProcessMessage(hInstall, INSTALLMESSAGE_INFO,
|
||||||
|
hRec));
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Display a dialog and send error message to log file
|
||||||
|
case INSTALLMESSAGE_ERROR:
|
||||||
|
case INSTALLMESSAGE_WARNING:
|
||||||
|
case INSTALLMESSAGE_USER:
|
||||||
|
hRec = MsiCreateRecord(4);
|
||||||
|
|
||||||
|
MsiRecordSetInteger(hRec, 1, errNum);
|
||||||
|
MsiRecordSetString(hRec, 2, ActionName);
|
||||||
|
MsiRecordSetString(hRec, 3, ErrorDesc);
|
||||||
|
MsiRecordSetInteger(hRec, 4, statuscode);
|
||||||
|
|
||||||
|
// Return value to indicate which button is
|
||||||
|
// pushed on message box
|
||||||
|
return (MsiProcessMessage(hInstall,
|
||||||
|
INSTALLMESSAGE(msgType|pbStyle|iconStyle), hRec));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Function: ShutdownBOINCManager
|
||||||
|
//
|
||||||
|
// Description: This custom action shuts down the BOINC Manager.
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
UINT __stdcall ShutdownBOINCManager(MSIHANDLE hInstall)
|
||||||
|
{
|
||||||
|
HWND hWndBOINCManagerSystray = NULL;
|
||||||
|
LRESULT lrReturnValue = NULL;
|
||||||
|
UINT uiLoopCounter = 0;
|
||||||
|
UINT uiReturn = -1;
|
||||||
|
|
||||||
|
const UINT WM_TASKBARSHUTDOWN = ::RegisterWindowMessage(_T("TaskbarShutdown"));
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
hWndBOINCManagerSystray = FindWindow( _T("wxTaskBarExWindowClass"), _T("BOINCManagerSystray") );
|
||||||
|
if ( NULL != hWndBOINCManagerSystray )
|
||||||
|
{
|
||||||
|
lrReturnValue = SendMessage( hWndBOINCManagerSystray, WM_TASKBARSHUTDOWN, NULL, NULL );
|
||||||
|
if ( 0 != lrReturnValue )
|
||||||
|
{
|
||||||
|
LogError(
|
||||||
|
hInstall,
|
||||||
|
INSTALLMESSAGE_ERROR,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
_T("ShutdownBOINCManager"),
|
||||||
|
_T("Setup was unable to shutdown the BOINC Manager Systray window."),
|
||||||
|
(int)lrReturnValue
|
||||||
|
);
|
||||||
|
return ERROR_INSTALL_FAILURE;
|
||||||
|
}
|
||||||
|
Sleep(1000);
|
||||||
|
}
|
||||||
|
uiLoopCounter++;
|
||||||
|
}
|
||||||
|
while ( (NULL != hWndBOINCManagerSystray) && ( 20 >= uiLoopCounter ) );
|
||||||
|
|
||||||
|
if ( NULL != hWndBOINCManagerSystray )
|
||||||
|
{
|
||||||
|
LogError(
|
||||||
|
hInstall,
|
||||||
|
INSTALLMESSAGE_ERROR,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
_T("ShutdownBOINCManager"),
|
||||||
|
_T("One or more BOINC Manager applications could not be closed, please close them and then rerun setup."),
|
||||||
|
uiLoopCounter
|
||||||
|
);
|
||||||
|
return ERROR_INSTALL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Give the manager a few seconds to shutdown.
|
||||||
|
Sleep(5000);
|
||||||
|
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char *BOINC_RCSID_eeaf7c4c79 = "$Id$";
|
|
@ -0,0 +1,8 @@
|
||||||
|
;
|
||||||
|
; Module definition file for the shutdown.dll
|
||||||
|
;
|
||||||
|
|
||||||
|
LIBRARY shutdown
|
||||||
|
|
||||||
|
EXPORTS
|
||||||
|
ShutdownBOINCManager PRIVATE
|
|
@ -0,0 +1,21 @@
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 8.00
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ShutdownBOINCManager", "ShutdownBOINCManager.vcproj", "{49723CA5-DA05-43C0-93AB-6FD30D046919}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfiguration) = preSolution
|
||||||
|
Debug = Debug
|
||||||
|
Release = Release
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfiguration) = postSolution
|
||||||
|
{49723CA5-DA05-43C0-93AB-6FD30D046919}.Debug.ActiveCfg = Debug|Win32
|
||||||
|
{49723CA5-DA05-43C0-93AB-6FD30D046919}.Debug.Build.0 = Debug|Win32
|
||||||
|
{49723CA5-DA05-43C0-93AB-6FD30D046919}.Release.ActiveCfg = Release|Win32
|
||||||
|
{49723CA5-DA05-43C0-93AB-6FD30D046919}.Release.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityAddIns) = postSolution
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
|
@ -0,0 +1,161 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="7.10"
|
||||||
|
Name="ShutdownBOINCManager"
|
||||||
|
ProjectGUID="{49723CA5-DA05-43C0-93AB-6FD30D046919}"
|
||||||
|
Keyword="Win32Proj">
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"/>
|
||||||
|
</Platforms>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="Debug"
|
||||||
|
IntermediateDirectory="Debug"
|
||||||
|
ConfigurationType="2"
|
||||||
|
CharacterSet="1">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SHUTDOWN_EXPORTS"
|
||||||
|
MinimalRebuild="TRUE"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
UsePrecompiledHeader="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="TRUE"
|
||||||
|
DebugInformationFormat="4"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="msi.lib"
|
||||||
|
OutputFile="$(OutDir)/shutdown.dll"
|
||||||
|
LinkIncremental="2"
|
||||||
|
ModuleDefinitionFile="ShutdownBOINCManager.def"
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
ProgramDatabaseFile="$(OutDir)/shutdown.pdb"
|
||||||
|
SubSystem="2"
|
||||||
|
ImportLibrary="$(OutDir)/shutdown.lib"
|
||||||
|
TargetMachine="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="Release"
|
||||||
|
IntermediateDirectory="Release"
|
||||||
|
ConfigurationType="2"
|
||||||
|
CharacterSet="1">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="2"
|
||||||
|
InlineFunctionExpansion="1"
|
||||||
|
OmitFramePointers="TRUE"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SHUTDOWN_EXPORTS"
|
||||||
|
StringPooling="TRUE"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
EnableFunctionLevelLinking="TRUE"
|
||||||
|
UsePrecompiledHeader="3"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="TRUE"
|
||||||
|
DebugInformationFormat="3"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="msi.lib"
|
||||||
|
OutputFile="$(OutDir)/shutdown.dll"
|
||||||
|
LinkIncremental="1"
|
||||||
|
ModuleDefinitionFile="ShutdownBOINCManager.def"
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
SubSystem="2"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
ImportLibrary="$(OutDir)/shutdown.lib"
|
||||||
|
TargetMachine="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
|
||||||
|
<File
|
||||||
|
RelativePath="ShutdownBOINCManager.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="ShutdownBOINCManager.def">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="stdafx.cpp">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
UsePrecompiledHeader="1"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
UsePrecompiledHeader="1"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc">
|
||||||
|
<File
|
||||||
|
RelativePath="stdafx.h">
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Resource Files"
|
||||||
|
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
|
@ -0,0 +1,10 @@
|
||||||
|
// stdafx.cpp : source file that includes just the standard includes
|
||||||
|
// NativeImage.pch will be the pre-compiled header
|
||||||
|
// stdafx.obj will contain the pre-compiled type information
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
|
||||||
|
// TODO: reference any additional headers you need in STDAFX.H
|
||||||
|
// and not in this file
|
||||||
|
|
||||||
|
const char *BOINC_RCSID_140925f16d = "$Id$";
|
|
@ -0,0 +1,22 @@
|
||||||
|
// stdafx.h : include file for standard system include files,
|
||||||
|
// or project specific include files that are used frequently, but
|
||||||
|
// are changed infrequently
|
||||||
|
//
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Need to specify the smallest version of Windows Installer
|
||||||
|
// that supports file hashing. This is version 2.0.
|
||||||
|
#define _WIN32_MSI 200
|
||||||
|
|
||||||
|
// Exclude rarely-used stuff from Windows headers
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
|
||||||
|
|
||||||
|
// Windows Header Files:
|
||||||
|
#include <windows.h>
|
||||||
|
#include <tchar.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <msiquery.h>
|
||||||
|
#include <ntsecapi.h>
|
Binary file not shown.
Loading…
Reference in New Issue