From c9fd071177c8ecb9d17211b1b78a2c7a576afb74 Mon Sep 17 00:00:00 2001 From: spx Date: Thu, 4 Feb 2010 07:16:22 +0000 Subject: [PATCH] Changed behavior so as not to indicate the error message box when DynamicVariables is 1 and FontSize is 0. (issue 126) FIXED: Virtual Bytes usage for an x64 process with perfmon plugin does not display value greater than 4 GB (issue 113) The numerical value greater than 32bit can be now displayed when NumOfDecimals is 0 in Meter=STRING. Fixed the broken compatibility in Windows 2000. (AboutDialog, SysInfo) --- Library/AboutDialog.cpp | 9 +++++++++ Library/Measure.cpp | 2 +- Library/MeterString.cpp | 26 +++++++++++++++++++------- Plugins/PluginPerfMon/PerfData.cpp | 8 ++++---- Plugins/PluginPerfMon/PerfData.h | 2 +- Plugins/PluginSysInfo/SysInfo.cpp | 12 +++++++++++- 6 files changed, 45 insertions(+), 14 deletions(-) diff --git a/Library/AboutDialog.cpp b/Library/AboutDialog.cpp index 4a043613..eb96a015 100644 --- a/Library/AboutDialog.cpp +++ b/Library/AboutDialog.cpp @@ -216,7 +216,12 @@ void ScanPlugins() // Try to get the version and author std::wstring tmpSz = Rainmeter->GetPluginPath() + fileData.cFileName; + UINT oldMode = SetErrorMode(0); + SetErrorMode(oldMode | SEM_FAILCRITICALERRORS); // Prevent the system from displaying message box + SetLastError(ERROR_SUCCESS); HMODULE dll = LoadLibrary(tmpSz.c_str()); + DWORD err = GetLastError(); + SetErrorMode(oldMode); // Reset if (dll) { GETPLUGINAUTHOR GetAuthorFunc = (GETPLUGINAUTHOR)GetProcAddress(dll, "GetPluginAuthor"); @@ -236,6 +241,10 @@ void ScanPlugins() } FreeLibrary(dll); } + else + { + DebugLog(L"Unable to load library: \"%s\", ErrorCode=%i", tmpSz.c_str(), err); + } g_Plugins.push_back(info); } diff --git a/Library/Measure.cpp b/Library/Measure.cpp index ff77fd5c..a0c24036 100644 --- a/Library/Measure.cpp +++ b/Library/Measure.cpp @@ -481,7 +481,7 @@ const WCHAR* CMeasure::GetStringValue(bool autoScale, double scale, int decimals { double val = theValue * (1.0 / scale); val = (val + ( (val >= 0) ? 0.5 : -0.5 ) ); - swprintf(buffer, L"%i", (UINT)val); + swprintf(buffer, L"%lli", (LONGLONG)val); } else { diff --git a/Library/MeterString.cpp b/Library/MeterString.cpp index a0bba4e0..27348537 100644 --- a/Library/MeterString.cpp +++ b/Library/MeterString.cpp @@ -137,7 +137,10 @@ void CMeterString::Initialize() } - c_FontFamilies[m_FontFace] = m_FontFamily; + if(m_FontFamily) + { + c_FontFamilies[m_FontFace] = m_FontFamily; + } } FontStyle style = FontStyleRegular; @@ -180,12 +183,21 @@ void CMeterString::Initialize() { m_Font = new Gdiplus::Font(FontFamily::GenericSansSerif(), size, style); } - c_Fonts[properties] = m_Font; Status status = m_Font->GetLastStatus(); - if(Ok != status) + if (Ok == status) { - throw CError(std::wstring(L"Unable to create font: ") + m_FontFace, __LINE__, __FILE__); + c_Fonts[properties] = m_Font; + } + else + { + delete m_Font; + m_Font = NULL; + + if (!m_DynamicVariables || m_FontSize != 0) + { + throw CError(std::wstring(L"Unable to create font: ") + m_FontFace, __LINE__, __FILE__); + } } } } @@ -241,7 +253,7 @@ void CMeterString::ReadConfig(const WCHAR* section) m_AutoScale = 0!=parser.ReadInt(section, L"AutoScale", 0); m_ClipString = 0!=parser.ReadInt(section, L"ClipString", 0); - m_FontSize = parser.ReadFormula(section, L"FontSize", 10); + m_FontSize = (int)parser.ReadFormula(section, L"FontSize", 10); m_NumOfDecimals = parser.ReadInt(section, L"NumOfDecimals", -1); m_Angle = (Gdiplus::REAL)parser.ReadFloat(section, L"Angle", 0.0); @@ -347,7 +359,7 @@ void CMeterString::ReadConfig(const WCHAR* section) */ bool CMeterString::Update() { - if (CMeter::Update()) + if (CMeter::Update() && m_Font) { std::vector stringValues; @@ -422,7 +434,7 @@ bool CMeterString::Update() */ bool CMeterString::Draw(Graphics& graphics) { - if(!CMeter::Draw(graphics)) return false; + if(!CMeter::Draw(graphics) || m_Font == NULL) return false; return DrawString(graphics, NULL); } diff --git a/Plugins/PluginPerfMon/PerfData.cpp b/Plugins/PluginPerfMon/PerfData.cpp index 062108ee..977f6721 100644 --- a/Plugins/PluginPerfMon/PerfData.cpp +++ b/Plugins/PluginPerfMon/PerfData.cpp @@ -100,9 +100,9 @@ UINT Initialize(HMODULE instance, LPCTSTR iniFile, LPCTSTR section, UINT id) This function is called when new value should be measured. The function returns the new value. */ -UINT Update(UINT id) +double Update2(UINT id) { - UINT value = 0; + double value = 0; std::map::iterator i = g_Measures.find(id); if(i != g_Measures.end()) @@ -127,14 +127,14 @@ UINT Update(UINT id) // Compare with the old value if(!measure->FirstTime) { - value = (UINT)(longvalue - measure->OldValue); + value = (double)(longvalue - measure->OldValue); } measure->OldValue = longvalue; measure->FirstTime = false; } else { - value = (UINT)longvalue; + value = (double)longvalue; } } else diff --git a/Plugins/PluginPerfMon/PerfData.h b/Plugins/PluginPerfMon/PerfData.h index 40fce41b..b3896fd4 100644 --- a/Plugins/PluginPerfMon/PerfData.h +++ b/Plugins/PluginPerfMon/PerfData.h @@ -15,7 +15,7 @@ extern "C" { __declspec( dllexport ) UINT Initialize(HMODULE instance, LPCTSTR iniFile, LPCTSTR section, UINT id); __declspec( dllexport ) void Finalize(HMODULE instance, UINT id); -__declspec( dllexport ) UINT Update(UINT id); +__declspec( dllexport ) double Update2(UINT id); __declspec( dllexport ) UINT GetPluginVersion(); __declspec( dllexport ) LPCTSTR GetPluginAuthor(); } diff --git a/Plugins/PluginSysInfo/SysInfo.cpp b/Plugins/PluginSysInfo/SysInfo.cpp index e881868a..072b4293 100644 --- a/Plugins/PluginSysInfo/SysInfo.cpp +++ b/Plugins/PluginSysInfo/SysInfo.cpp @@ -609,7 +609,17 @@ void GetOSVersion(WCHAR* buffer) void GetOSBits(WCHAR* buffer) { SYSTEM_INFO systemInfo = {0}; - GetNativeSystemInfo(&systemInfo); + + typedef void (WINAPI *FPGETNATIVESYSTEMINFO)(LPSYSTEM_INFO lpSystemInfo); + FPGETNATIVESYSTEMINFO GetNativeSystemInfo = (FPGETNATIVESYSTEMINFO)GetProcAddress(GetModuleHandle(L"kernel32"), "GetNativeSystemInfo"); + if (GetNativeSystemInfo != NULL) + { + GetNativeSystemInfo(&systemInfo); + } + else + { + GetSystemInfo(&systemInfo); + } if (systemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || systemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64)