mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
The !bangs can be now used from command line even if there are no active configs.
Included RainBrowser to the build.
This commit is contained in:
parent
4a5e76ce7b
commit
f7970be6b5
@ -30,7 +30,7 @@
|
||||
BOOL InitApplication(HINSTANCE hInstance, const WCHAR* WinClass);
|
||||
HWND InitInstance(HINSTANCE hInstance, const WCHAR* WinClass, const WCHAR* WinName);
|
||||
LONG APIENTRY MainWndProc(HWND, UINT, UINT, LONG);
|
||||
void Bang(HWND hWnd, const WCHAR* command);
|
||||
void Bang(const WCHAR* command);
|
||||
|
||||
/*
|
||||
** Stuff from the DLL
|
||||
@ -38,7 +38,10 @@ void Bang(HWND hWnd, const WCHAR* command);
|
||||
extern "C" EXPORT_PLUGIN int initModuleEx(HWND ParentWnd, HINSTANCE dllInst, LPCSTR);
|
||||
extern "C" EXPORT_PLUGIN void quitModule(HINSTANCE dllInst);
|
||||
extern "C" EXPORT_PLUGIN void Initialize(bool DummyLS, LPCTSTR CmdLine);
|
||||
extern "C++" CRainmeter* Rainmeter;
|
||||
extern "C" EXPORT_PLUGIN void ExecuteBang(LPCTSTR szBang);
|
||||
|
||||
const WCHAR* WinClass = L"DummyRainWClass";
|
||||
const WCHAR* WinName = L"Rainmeter control window";
|
||||
|
||||
/*
|
||||
** WinMain
|
||||
@ -49,13 +52,18 @@ extern "C++" CRainmeter* Rainmeter;
|
||||
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
|
||||
{
|
||||
MSG msg;
|
||||
WCHAR* WinClass = L"DummyRainWClass";
|
||||
WCHAR* WinName = L"Rainmeter control window";
|
||||
HWND hWnd;
|
||||
|
||||
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
|
||||
// _CrtSetBreakAlloc(5055);
|
||||
|
||||
if (lpCmdLine && lpCmdLine[0] == L'!')
|
||||
{
|
||||
// It's a !bang
|
||||
Bang(lpCmdLine);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(!hPrevInstance)
|
||||
{
|
||||
if (!InitApplication(hInstance, WinClass)) return FALSE;
|
||||
@ -64,13 +72,6 @@ int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmd
|
||||
hWnd=InitInstance(hInstance, WinClass, WinName);
|
||||
if(!hWnd) return FALSE;
|
||||
|
||||
if (lpCmdLine && lpCmdLine[0] == L'!')
|
||||
{
|
||||
// It's a !bang
|
||||
Bang(hWnd, lpCmdLine);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Remove quotes from the commandline
|
||||
WCHAR Path[256];
|
||||
Path[0] = 0;
|
||||
@ -162,20 +163,10 @@ HWND InitInstance(HINSTANCE hInstance, const WCHAR* WinClass, const WCHAR* WinNa
|
||||
** Sends bangs to the DLL
|
||||
**
|
||||
*/
|
||||
void Bang(HWND hWnd, const WCHAR* command)
|
||||
void Bang(const WCHAR* command)
|
||||
{
|
||||
// Check if Rainmeter is running
|
||||
HWND wnd = FindWindow(L"RainmeterMeterWindow", NULL);
|
||||
if (wnd == NULL)
|
||||
{
|
||||
// Check if all windows are "On Desktop"
|
||||
HWND ProgmanHwnd = FindWindow(L"Progman", L"Program Manager");
|
||||
if (ProgmanHwnd)
|
||||
{
|
||||
wnd = FindWindowEx(ProgmanHwnd, NULL, L"RainmeterMeterWindow", NULL);
|
||||
}
|
||||
}
|
||||
|
||||
HWND wnd = FindWindow(WinClass, WinName);
|
||||
if (wnd != NULL)
|
||||
{
|
||||
COPYDATASTRUCT copyData;
|
||||
@ -185,13 +176,13 @@ void Bang(HWND hWnd, const WCHAR* command)
|
||||
copyData.lpData = (void*)command;
|
||||
|
||||
// Send the bang to the Rainmeter window
|
||||
SendMessage(wnd, WM_COPYDATA, (WPARAM)hWnd, (LPARAM)©Data);
|
||||
SendMessage(wnd, WM_COPYDATA, (WPARAM)NULL, (LPARAM)©Data);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (wcsicmp(L"!rainmeterquit", command) != 0)
|
||||
{
|
||||
MessageBox(hWnd, L"Rainmeter is not running.\nUnable to send the !bang to it.", L"Rainmeter", MB_OK);
|
||||
MessageBox(NULL, L"Rainmeter is not running.\nUnable to send the !bang to it.", L"Rainmeter", MB_OK);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -213,6 +204,16 @@ LONG APIENTRY MainWndProc(HWND hWnd, UINT message, UINT wParam, LONG lParam)
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_COPYDATA:
|
||||
{
|
||||
COPYDATASTRUCT* pCopyDataStruct = (COPYDATASTRUCT*) lParam;
|
||||
if (pCopyDataStruct && (pCopyDataStruct->dwData == 1) && (pCopyDataStruct->cbData > 0))
|
||||
{
|
||||
ExecuteBang((const WCHAR*)pCopyDataStruct->lpData);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return (LONG)DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
||||
|
@ -660,6 +660,18 @@ CRainmeter::~CRainmeter()
|
||||
GdiplusShutdown(m_GDIplusToken);
|
||||
}
|
||||
|
||||
/*
|
||||
** ExecuteBang
|
||||
**
|
||||
** Runs a bang command. This is called from the main application
|
||||
** when a command is given as a command line argument.
|
||||
**
|
||||
*/
|
||||
void ExecuteBang(LPCTSTR szBang)
|
||||
{
|
||||
if (Rainmeter) Rainmeter->ExecuteCommand(szBang, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
** Initialize
|
||||
**
|
||||
@ -1958,6 +1970,7 @@ void CRainmeter::ShowContextMenu(POINT pos, CMeterWindow* meterWindow)
|
||||
{
|
||||
AppendMenu(configMenu, MF_SEPARATOR, 0, NULL);
|
||||
AppendMenu(configMenu, 0, ID_CONTEXT_OPENSKINSFOLDER, L"Open Skins\' Folder");
|
||||
AppendMenu(configMenu, 0, ID_CONTEXT_MANAGESKINS, L"Manage Skins...");
|
||||
|
||||
InsertMenu(subMenu, 3, MF_BYPOSITION | MF_POPUP, (UINT_PTR)configMenu, L"Configs");
|
||||
}
|
||||
|
@ -235,6 +235,7 @@ extern "C"
|
||||
EXPORT_PLUGIN int initModuleEx(HWND ParentWnd, HINSTANCE dllInst, LPCSTR szPath);
|
||||
EXPORT_PLUGIN void quitModule(HINSTANCE dllInst);
|
||||
EXPORT_PLUGIN void Initialize(bool DummyLS, LPCTSTR CmdLine);
|
||||
EXPORT_PLUGIN void ExecuteBang(LPCTSTR szBang);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -472,6 +472,12 @@ LRESULT CALLBACK CTrayWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
|
||||
command += L"\\Addons\\RainThemes\\RainThemes.exe\"";
|
||||
LSExecute(tray->GetWindow(), command.c_str(), SW_SHOWNORMAL);
|
||||
}
|
||||
else if(wParam == ID_CONTEXT_MANAGESKINS)
|
||||
{
|
||||
std::wstring command = L"\"" + Rainmeter->GetPath();
|
||||
command += L"\\Addons\\RainBrowser\\RainBrowser.exe\"";
|
||||
LSExecute(tray->GetWindow(), command.c_str(), SW_SHOWNORMAL);
|
||||
}
|
||||
else if(wParam == ID_CONTEXT_QUIT)
|
||||
{
|
||||
if (Rainmeter->GetDummyLitestep()) PostQuitMessage(0);
|
||||
|
@ -55,6 +55,7 @@
|
||||
#define ID_CONTEXT_OPENSKINSFOLDER 4044
|
||||
#define ID_CONTEXT_SKINMENU_OPENSKINSFOLDER 4045
|
||||
#define ID_CONTEXT_MANAGETHEMES 4046
|
||||
#define ID_CONTEXT_MANAGESKINS 4047
|
||||
|
||||
#define ID_CONFIG_EDIT 30000
|
||||
#define ID_CONFIG_FIRST 30001
|
||||
|
Loading…
Reference in New Issue
Block a user