summary refs log tree commit diff stats
path: root/plugins/winsys
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/winsys')
-rw-r--r--plugins/winsys/winsys.cpp78
1 files changed, 64 insertions, 14 deletions
diff --git a/plugins/winsys/winsys.cpp b/plugins/winsys/winsys.cpp
index b6d27f45..08e5d809 100644
--- a/plugins/winsys/winsys.cpp
+++ b/plugins/winsys/winsys.cpp
@@ -29,6 +29,29 @@
 
 static xchat_plugin *ph;   /* plugin handle */
 
+static int
+getCpuArch (void)
+{
+	OSVERSIONINFOEX osvi;
+	SYSTEM_INFO si;
+
+	osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
+	GetVersionEx ((LPOSVERSIONINFOW) &osvi);
+
+	GetSystemInfo (&si);
+
+	if (si.wProcessorArchitecture == 9)
+	{
+		return 64;
+	}
+	else
+	{
+		return 86;
+	}
+}
+
+#if 0
+/* use WMI instead, wProcessorArchitecture displays current binary arch instead OS arch anyway */
 static char *
 getOsName (void)
 {
@@ -120,7 +143,7 @@ getOsName (void)
 	return winver;
 }
 
-#if 0 /* x86-only, SDK-only, use WMI instead */
+/* x86-only, SDK-only, use WMI instead */
 static char *
 getCpuName (void)
 {
@@ -264,13 +287,18 @@ getWmiInfo (int mode)
 		return buffer;
 	}
 
-	if (mode)
-	{
-		hres = pSvc->ExecQuery (_bstr_t ("WQL"), _bstr_t ("SELECT * FROM Win32_VideoController"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);
-	}
-	else
+	switch (mode)
 	{
-		hres = pSvc->ExecQuery (_bstr_t ("WQL"), _bstr_t ("SELECT * FROM Win32_Processor"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);
+		case 0:
+			hres = pSvc->ExecQuery (_bstr_t ("WQL"), _bstr_t ("SELECT * FROM Win32_OperatingSystem"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);
+			break;
+		case 1:
+			hres = pSvc->ExecQuery (_bstr_t ("WQL"), _bstr_t ("SELECT * FROM Win32_Processor"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);
+			break;
+		case 2:
+			hres = pSvc->ExecQuery (_bstr_t ("WQL"), _bstr_t ("SELECT * FROM Win32_VideoController"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);
+			break;
+
 	}
 
 	if (FAILED (hres))
@@ -290,7 +318,18 @@ getWmiInfo (int mode)
 			break;
 		}
 		VARIANT vtProp;
-		hr = pclsObj->Get (L"Name", 0, &vtProp, 0, 0);
+		switch (mode)
+		{
+			case 0:
+				hr = pclsObj->Get (L"Caption", 0, &vtProp, 0, 0);
+				break;
+			case 1:
+				hr = pclsObj->Get (L"Name", 0, &vtProp, 0, 0);
+				break;
+			case 2:
+				hr = pclsObj->Get (L"Name", 0, &vtProp, 0, 0);
+				break;
+		}
 		WideCharToMultiByte (CP_ACP, 0, vtProp.bstrVal, -1, buffer, SysStringLen (vtProp.bstrVal)+1, NULL, NULL);
 		VariantClear (&vtProp);
     }
@@ -306,12 +345,23 @@ getWmiInfo (int mode)
 static int
 printInfo (char *word[], char *word_eol[], void *user_data)
 {
-	xchat_printf (ph, "OS:\t%s\n", getOsName ());
-	xchat_printf (ph, "CPU:\t%s (%s)\n", getWmiInfo (0), getCpuMhz ());
-	xchat_printf (ph, "RAM:\t%s\n", getMemoryInfo ());
-	xchat_printf (ph, "VGA:\t%s\n", getWmiInfo (1));
-	/* will work correctly for up to 50 days, should be enough */
-	xchat_printf (ph, "Uptime:\t%.2f Hours\n", (float) GetTickCount() / 1000 / 60 / 60);
+	if (xchat_list_int (ph, NULL, "type") >= 2)
+	{
+		/* xchat_commandf (ph, "ME * WinSys - system details *");
+		xchat_commandf (ph, "ME ***************************"); */
+		xchat_commandf (ph, "ME * Client:  XChat-WDK %s (x%d)", xchat_get_info (ph, "wdk_version"), getCpuArch ());
+		xchat_commandf (ph, "ME * OS:      %s", getWmiInfo (0));
+		xchat_commandf (ph, "ME * CPU:     %s (%s)", getWmiInfo (1), getCpuMhz ());
+		xchat_commandf (ph, "ME * RAM:     %s", getMemoryInfo ());
+		xchat_commandf (ph, "ME * VGA:     %s", getWmiInfo (2));
+		/* will work correctly for up to 50 days, should be enough */
+		xchat_commandf (ph, "ME * Uptime:  %.2f Hours", (float) GetTickCount() / 1000 / 60 / 60);
+	}
+	else
+	{
+		/* print standard error message */
+		xchat_printf (ph, "No channel joined. Try /join #<channel>");
+	}
 	return XCHAT_EAT_XCHAT;
 }