summaryrefslogtreecommitdiff
path: root/src/videodrivercheck.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/videodrivercheck.cpp')
-rw-r--r--src/videodrivercheck.cpp154
1 files changed, 154 insertions, 0 deletions
diff --git a/src/videodrivercheck.cpp b/src/videodrivercheck.cpp
new file mode 100644
index 0000000..93a407f
--- /dev/null
+++ b/src/videodrivercheck.cpp
@@ -0,0 +1,154 @@
+#include <windows.h>
+#include <stdlib.h>
+//#include "vncOSVersion.h"
+
+typedef BOOL (WINAPI* pEnumDisplayDevices)(PVOID,DWORD,PVOID,DWORD);
+
+/*bool CheckDriver2(void)
+{
+ SC_HANDLE schMaster;
+ SC_HANDLE schSlave;
+
+ schMaster = OpenSCManager (NULL, NULL, SC_MANAGER_ALL_ACCESS);
+
+ schSlave = OpenService (schMaster, "vnccom", SERVICE_ALL_ACCESS);
+
+ if (schSlave == NULL)
+ {
+ CloseServiceHandle(schMaster);
+ return false;
+ }
+ else
+ {
+ CloseServiceHandle (schSlave);
+ CloseServiceHandle(schMaster);
+ return true;
+ }
+}*/
+
+
+///////////////////////////////////////////////////////////////////
+BOOL GetDllProductVersion(char* dllName, char *vBuffer, int size)
+{
+ char *versionInfo;
+ void *lpBuffer;
+ unsigned int cBytes;
+ DWORD rBuffer;
+
+ if( !dllName || !vBuffer )
+ return(FALSE);
+
+// DWORD sName = GetModuleFileName(NULL, fileName, sizeof(fileName));
+// FYI only
+ DWORD sVersion = GetFileVersionInfoSize(dllName, &rBuffer);
+ if (sVersion==0) return (FALSE);
+ versionInfo = new char[sVersion];
+
+ BOOL resultVersion = GetFileVersionInfo(dllName,
+ NULL,
+ sVersion,
+ versionInfo);
+
+ BOOL resultValue = VerQueryValue(versionInfo,
+
+TEXT("\\StringFileInfo\\040904b0\\ProductVersion"),
+ &lpBuffer,
+ &cBytes);
+
+ if( !resultValue )
+ {
+ resultValue = VerQueryValue(versionInfo,TEXT("\\StringFileInfo\\000004b0\\ProductVersion"),
+ &lpBuffer,
+ &cBytes);
+
+ }
+
+ if( resultValue )
+ {
+ strncpy(vBuffer, (char *) lpBuffer, size);
+ delete versionInfo;
+ return(TRUE);
+ }
+ else
+ {
+ *vBuffer = '\0';
+ delete versionInfo;
+ return(FALSE);
+ }
+}
+
+///////////////////////////////////////////////////////////////////
+
+bool
+CheckVideoDriver(bool Box)
+{
+ typedef BOOL (WINAPI* pEnumDisplayDevices)(PVOID,DWORD,PVOID,DWORD);
+ HDC m_hrootdc=NULL;
+ pEnumDisplayDevices pd;
+ static const char* driverName = "mv video hook driver2";
+ BOOL DriverFound;
+ DEVMODE devmode;
+ FillMemory(&devmode, sizeof(DEVMODE), 0);
+ devmode.dmSize = sizeof(DEVMODE);
+ devmode.dmDriverExtra = 0;
+ BOOL change = EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&devmode);
+ devmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
+ HMODULE hUser32=LoadLibrary("USER32");
+ pd = (pEnumDisplayDevices)GetProcAddress( hUser32, "EnumDisplayDevicesA");
+ if (pd)
+ {
+ LPSTR deviceName=NULL;
+ DISPLAY_DEVICE dd;
+ ZeroMemory(&dd, sizeof(dd));
+ dd.cb = sizeof(dd);
+ devmode.dmDeviceName[0] = '\0';
+ INT devNum = 0;
+ BOOL result;
+ DriverFound=false;
+ while (result = (*pd)(NULL,devNum, &dd,0))
+ {
+ if (strcmp((const char *)&dd.DeviceString[0], driverName) == 0)
+ {
+ DriverFound=true;
+ break;
+ }
+ devNum++;
+ }
+ if (DriverFound)
+ {
+ if (hUser32) FreeLibrary(hUser32);
+ if(Box)
+ {
+ char buf[512];
+ GetDllProductVersion((char*)"mv2.dll",buf,512);
+ if (dd.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)
+ {
+ strcat(buf," driver Active");
+ HDC testdc=NULL;
+ deviceName = (LPSTR)&dd.DeviceName[0];
+ testdc = CreateDC("DISPLAY",deviceName,NULL,NULL);
+ if (testdc)
+ {
+ DeleteDC(testdc);
+ strcat(buf," access ok");
+ }
+ else
+ {
+ strcat(buf," access denied, permission problem");
+ }
+ }
+ else
+ strcat(buf," driver Not Active");
+
+ MessageBox(NULL,buf,"driver info: required version 1.22",0);
+ }
+ return true;
+ //deviceName = (LPSTR)&dd.DeviceName[0];
+ //m_hrootdc = CreateDC("DISPLAY",deviceName,NULL,NULL);
+ //if (m_hrootdc) DeleteDC(m_hrootdc);
+ }
+ else if(Box) MessageBox(NULL,"Driver not found: Perhaps you need to reboot after install","driver info: required version 1.22",0);
+ }
+ if (hUser32) FreeLibrary(hUser32);
+ return false;
+}