diff --git a/docs/synthuse-screenshot.png b/docs/synthuse-screenshot.png deleted file mode 100644 index 45aeda9..0000000 Binary files a/docs/synthuse-screenshot.png and /dev/null differ diff --git a/docs/synthuse-screenshot2.png b/docs/synthuse-screenshot2.png deleted file mode 100644 index 46da5a2..0000000 Binary files a/docs/synthuse-screenshot2.png and /dev/null differ diff --git a/native/MsgHook.sln b/native/MsgHook.sln deleted file mode 100644 index a18befb..0000000 --- a/native/MsgHook.sln +++ /dev/null @@ -1,35 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MsgHook", "MsgHook\MsgHook.vcxproj", "{8E038A94-7D02-49E9-B9F6-5224D9D11225}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SetMsgHook", "SetMsgHook\SetMsgHook.vcxproj", "{34A73B55-8A93-4FB5-83CE-7759C1D23348}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8E038A94-7D02-49E9-B9F6-5224D9D11225}.Debug|Win32.ActiveCfg = Debug|Win32 - {8E038A94-7D02-49E9-B9F6-5224D9D11225}.Debug|Win32.Build.0 = Debug|Win32 - {8E038A94-7D02-49E9-B9F6-5224D9D11225}.Debug|x64.ActiveCfg = Debug|x64 - {8E038A94-7D02-49E9-B9F6-5224D9D11225}.Debug|x64.Build.0 = Debug|x64 - {8E038A94-7D02-49E9-B9F6-5224D9D11225}.Release|Win32.ActiveCfg = Release|Win32 - {8E038A94-7D02-49E9-B9F6-5224D9D11225}.Release|Win32.Build.0 = Release|Win32 - {8E038A94-7D02-49E9-B9F6-5224D9D11225}.Release|x64.ActiveCfg = Release|x64 - {8E038A94-7D02-49E9-B9F6-5224D9D11225}.Release|x64.Build.0 = Release|x64 - {34A73B55-8A93-4FB5-83CE-7759C1D23348}.Debug|Win32.ActiveCfg = Debug|Win32 - {34A73B55-8A93-4FB5-83CE-7759C1D23348}.Debug|Win32.Build.0 = Debug|Win32 - {34A73B55-8A93-4FB5-83CE-7759C1D23348}.Debug|x64.ActiveCfg = Debug|Win32 - {34A73B55-8A93-4FB5-83CE-7759C1D23348}.Release|Win32.ActiveCfg = Release|Win32 - {34A73B55-8A93-4FB5-83CE-7759C1D23348}.Release|Win32.Build.0 = Release|Win32 - {34A73B55-8A93-4FB5-83CE-7759C1D23348}.Release|x64.ActiveCfg = Release|Win32 - {34A73B55-8A93-4FB5-83CE-7759C1D23348}.Release|x64.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/native/MsgHook.suo b/native/MsgHook.suo deleted file mode 100644 index 122cf7b..0000000 Binary files a/native/MsgHook.suo and /dev/null differ diff --git a/native/MsgHook/MsgHook.cpp b/native/MsgHook/MsgHook.cpp deleted file mode 100644 index f383607..0000000 --- a/native/MsgHook/MsgHook.cpp +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright 2014, Synthuse.org - * Released under the Apache Version 2.0 License. - * - * last modified by ejakubowski7@gmail.com -*/ - - -// MsgHook.cpp : Defines the exported functions for the DLL application. -// -#include "stdafx.h" - -//to fix export declaration had to add .def file -LRESULT CALLBACK CwpHookProc(int nCode, WPARAM wParam, LPARAM lParam) -{ - COPYDATASTRUCT CDS; - HEVENT Event; - - CDS.dwData = 0; - CDS.cbData = sizeof(Event); - CDS.lpData = &Event; - - //if (nCode == HC_ACTION) - { - //For WH_CALLWNDPROC hook a pointer to a CWPSTRUCT structure that contains details about the message. - CWPSTRUCT *cwps = (CWPSTRUCT *)lParam; - Event.hWnd = cwps->hwnd; - Event.lParam = cwps->lParam; - Event.wParam = cwps->wParam; - Event.nCode = cwps->message; - Event.dwHookType = WH_CALLWNDPROC; - memset((void *)&Event.wParamStr, '\0', sizeof(TCHAR) * 25); - memset((void *)&Event.lParamStr, '\0', sizeof(TCHAR) * 25); - bool errorFlg = false; - if (cwps->message == WM_SETTEXT && cwps->lParam != 0 && cwps->wParam == 0) - { - if (IsWindowUnicode(Event.hWnd)) - { - _tcsncpy_s(Event.lParamStr, 25, (const wchar_t*)Event.lParam, _TRUNCATE); - } - else - { - int asciiSize = (int)strlen((const char*)Event.lParam); - int unicodeSize = (int)_tcslen((const wchar_t*)Event.lParam); - if (unicodeSize > asciiSize) - _tcsncpy_s(Event.lParamStr, 25, (const wchar_t*)Event.lParam, _TRUNCATE); - else - { - int tstrLen = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)cwps->lParam, (int)strlen((LPCSTR)cwps->lParam), NULL, 0); //get t len - if (tstrLen > 24) - tstrLen = 24; - MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)cwps->lParam, (int)strlen((LPCSTR)cwps->lParam), Event.lParamStr, tstrLen); // convert char to tchar - } - } - } - - //printf("debug: sending to hwnd (%ld) msg %d, wParam %ld, lParam %ld\n", pData->g_hWnd, Event.nCode, Event.wParam, Event.lParam); - if (cwps->hwnd != pData->g_hWnd) - { - BOOL bRes = (BOOL)SendMessage(pData->g_hWnd, WM_COPYDATA, 0, (LPARAM)(VOID*)&CDS); // ask the controlling program if the hook should be passed - } - } - return CallNextHookEx(pData->g_CwpHook, nCode, wParam, lParam); // pass hook to next handler - //return bRes; // Don't tell the other hooks about this message. -} - -LRESULT CALLBACK MsgHookProc(int nCode, WPARAM wParam, LPARAM lParam) -{ - COPYDATASTRUCT CDS; - HEVENT Event; - - CDS.dwData = 0; - CDS.cbData = sizeof(Event); - CDS.lpData = &Event; - - if (nCode >=0 && nCode == HC_ACTION) - { - //For WH_GETMESSAGE hook a pointer to a MSG structure that contains details about the message. - MSG *msg = (MSG *)lParam; - Event.hWnd = msg->hwnd; - Event.lParam = msg->lParam; - Event.wParam = msg->wParam; - Event.nCode = msg->message; - Event.dwHookType = WH_GETMESSAGE; - memset((void *)&Event.wParamStr, '\0', sizeof(TCHAR) * 25); - memset((void *)&Event.lParamStr, '\0', sizeof(TCHAR) * 25); - //if (msg->message == WM_SETTEXT && msg->lParam != 0) - // _tcscpy_s(Event.lParamStr, 25, (const wchar_t*)Event.lParam); - //if (msg->message == WM_COMMAND || msg->message == WM_MENUCOMMAND) //infinite loop? - if (msg->hwnd != pData->g_hWnd) - { - BOOL bRes = (BOOL)SendMessage(pData->g_hWnd, WM_COPYDATA, 0, (LPARAM)(VOID*)&CDS); // ask the controlling program if the hook should be passed - } - } - - return CallNextHookEx(pData->g_MsgHook, nCode, wParam, lParam); // pass hook to next handler - //return bRes; // Don't tell the other hooks about this message. -} - -//support for 32-bit/64-bit apps means the dll might be different to match the process we want to see -extern "C" __declspec(dllexport) BOOL SetCustomMsgHookDll(const TCHAR * hookDll, const char * hookDllProcName) -{ - HMODULE dll = LoadLibrary(hookDll); //should provide full dll path and filename - if (dll == NULL) - { - TCHAR errorStr[200]; - _stprintf_s(errorStr, _T("Error loading hook library %s"), hookDll); - MessageBox(0, errorStr, _T("Set Hook Dll Error"), 0); - return false; - } - HOOKPROC addr = (HOOKPROC)GetProcAddress(dll, hookDllProcName); //should provide the 'CwpHookProc' - if (addr == NULL) - { - char errorStr[200]; - sprintf_s(errorStr, "Error loading hook library procedure %s", hookDllProcName); - MessageBoxA(0, errorStr, "Set Hook Dll Error", 0); - return false; - } - pData->g_hInstance = dll; - pData->g_CwpHookProc = addr; - return true; -} - -extern "C" __declspec(dllexport) BOOL SetMsgHook(HWND callerHWnd, DWORD threadId) -{ -// if(bStartingProcess) // if we're just starting the DLL for the first time, - { - pData->g_hWnd = callerHWnd; // remember the windows and hook handle for further instances - if (pData->g_CwpHookProc == NULL) - pData->g_CwpHookProc = (HOOKPROC)CwpHookProc; - pData->g_CwpHook = SetWindowsHookEx(WH_CALLWNDPROC, pData->g_CwpHookProc, (HINSTANCE)pData->g_hInstance, threadId); - //pData->g_MsgHook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)MsgHookProc, (HINSTANCE)pData->g_hInstance, threadId); - if (pData->g_CwpHook == NULL) { - TCHAR tmp[100]; - _stprintf_s(tmp, _T("Last Error # %ld on threadId %ld"), GetLastError(), threadId); - MessageBox(0, tmp, _T("Set Hook Error"), 0); - } - - return (pData->g_CwpHook != NULL); //pData->g_CwpHook != NULL && - } - /*else - { - //MessageBox(0, _T("Error: Not starting process"), _T("Set Hook Error"), 0); - return false; - }*/ -} - -extern "C" __declspec(dllexport) HHOOK GetCurrentHookHandle() -{ - return pData->g_CwpHook; //if NULL hook isn't running -} - -extern "C" __declspec(dllexport) void SetGlobalDLLInstance(HANDLE dllInstance) -{ - pData->g_hInstance = dllInstance; -} - -extern "C" __declspec(dllexport) BOOL RemoveHook() -{ - if (pData == NULL) - return false; - if(pData->g_MsgHook) // if the hook is defined - { - UnhookWindowsHookEx(pData->g_MsgHook); - pData->g_MsgHook = NULL; - } - if(pData->g_CwpHook) // if the hook is defined - { - BOOL ret = UnhookWindowsHookEx(pData->g_CwpHook); - pData->g_hWnd = NULL; // reset data - pData->g_CwpHook = NULL; - pData->g_CwpHookProc = NULL; - return ret; - } - return false; -} - - -//testing if process 64 bit, needed to verify this dll can hook & attach to target process -typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); -LPFN_ISWOW64PROCESS fnIsWow64Process; - -extern "C" __declspec(dllexport) BOOL IsCurrentProcess64Bit() -{ - return IsProcess64Bit(_getpid()); -} - -extern "C" __declspec(dllexport) BOOL IsProcess64Bit(DWORD procId) -{ - SYSTEM_INFO stInfo; - GetNativeSystemInfo(&stInfo); // if native system is x86 skip wow64 test - if (stInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL) - return false; //printf( "Processor Architecture: Intel x86\n"); - - BOOL bIsWow64 = FALSE; - //IsWow64Process is not available on all supported versions of Windows. - //Use GetModuleHandle to get a handle to the DLL that contains the function - //and GetProcAddress to get a pointer to the function if available. - - fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle(TEXT("kernel32")),"IsWow64Process"); - if(fnIsWow64Process != NULL) - { - HANDLE procHandle = NULL;//GetCurrentProcess(); - procHandle = OpenProcess(PROCESS_QUERY_INFORMATION, false, procId); - if (!fnIsWow64Process(procHandle, &bIsWow64)) - { - //handle error - } - CloseHandle(procHandle); - if (bIsWow64) // NOT a native 64bit process - return false; - return true;// is a native 64bit process - } - return false; //some error finding function "IsWow64Process" assume not 64-bit -} - -extern "C" __declspec(dllexport) DWORD GetProcessMainThreadId(DWORD procId) -{ - -#ifndef MAKEULONGLONG - #define MAKEULONGLONG(ldw, hdw) ((ULONGLONG(hdw) << 32) | ((ldw) & 0xFFFFFFFF)) -#endif -#ifndef MAXULONGLONG - #define MAXULONGLONG ((ULONGLONG)~((ULONGLONG)0)) -#endif - - DWORD dwMainThreadID = 0; - ULONGLONG ullMinCreateTime = MAXULONGLONG; - //includes all threads in the system - HANDLE hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); - if (hThreadSnap != INVALID_HANDLE_VALUE) { - THREADENTRY32 th32; - th32.dwSize = sizeof(THREADENTRY32); - BOOL bOK = TRUE; - //Enumerate all threads in the system and filter on th32OwnerProcessID = pid - for (bOK = Thread32First(hThreadSnap, &th32); bOK ; bOK = Thread32Next(hThreadSnap, &th32)) { - //if (th32.dwSize >= FIELD_OFFSET(THREADENTRY32, th32OwnerProcessID) + sizeof(th32.th32OwnerProcessID)) { - if (th32.th32OwnerProcessID == procId && (th32.dwSize >= FIELD_OFFSET(THREADENTRY32, th32OwnerProcessID) + sizeof(th32.th32OwnerProcessID))) { - //_tprintf(_T("DEBUG Enumerate Process (%ld) Thread Id: %ld\n"), procId, th32.th32ThreadID); - HANDLE hThread = OpenThread(THREAD_QUERY_INFORMATION, TRUE, th32.th32ThreadID); - if (hThread) { - FILETIME afTimes[4] = {0}; - if (GetThreadTimes(hThread, &afTimes[0], &afTimes[1], &afTimes[2], &afTimes[3])) { - ULONGLONG ullTest = MAKEULONGLONG(afTimes[0].dwLowDateTime, afTimes[0].dwHighDateTime); - if (ullTest && ullTest < ullMinCreateTime) { //check each thread's creation time - ullMinCreateTime = ullTest; - dwMainThreadID = th32.th32ThreadID; // let it be main thread - } - } - CloseHandle(hThread); //must close opened thread - } - } - } -#ifndef UNDER_CE - CloseHandle(hThreadSnap); //close thread snapshot -#else - CloseToolhelp32Snapshot(hThreadSnap); //close thread snapshot -#endif - } - return dwMainThreadID; //returns main thread id or returns 0 if can't find it -} \ No newline at end of file diff --git a/native/MsgHook/MsgHook.def b/native/MsgHook/MsgHook.def deleted file mode 100644 index 0176c73..0000000 --- a/native/MsgHook/MsgHook.def +++ /dev/null @@ -1,5 +0,0 @@ -LIBRARY MsgHook - -EXPORTS - CwpHookProc @1 - MsgHookProc @2 \ No newline at end of file diff --git a/native/MsgHook/MsgHook.vcxproj b/native/MsgHook/MsgHook.vcxproj deleted file mode 100644 index 5f6a80f..0000000 --- a/native/MsgHook/MsgHook.vcxproj +++ /dev/null @@ -1,196 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {8E038A94-7D02-49E9-B9F6-5224D9D11225} - Win32Proj - MsgHook - - - - DynamicLibrary - true - Unicode - - - DynamicLibrary - true - Unicode - - - DynamicLibrary - false - true - Unicode - - - DynamicLibrary - false - true - Unicode - - - - - - - - - - - - - - - - - - - true - $(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(IncludePath) - - - true - - - false - $(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(IncludePath) - - - false - $(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(IncludePath) - - - - Use - Level3 - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;MSGHOOK_EXPORTS;%(PreprocessorDefinitions) - - - Windows - true - MsgHook.def - - - - - Use - Level3 - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;MSGHOOK_EXPORTS;%(PreprocessorDefinitions) - - - Windows - true - MsgHook.def - - - - - Level3 - Use - MaxSpeed - true - true - WIN32;NDEBUG;_WINDOWS;_USRDLL;MSGHOOK_EXPORTS;%(PreprocessorDefinitions) - - - Windows - true - true - true - MsgHook.def - - - mkdir "$(ProjectDir)bin" -copy /Y "$(TargetPath)" "$(ProjectDir)bin\MsgHook$(PlatformArchitecture)$(TargetExt)" - - - - - Level3 - Use - MaxSpeed - true - true - WIN32;NDEBUG;_WINDOWS;_USRDLL;MSGHOOK_EXPORTS;%(PreprocessorDefinitions) - - - Windows - true - true - true - MsgHook.def - - - mkdir "$(ProjectDir)bin" -copy /Y "$(TargetPath)" "$(ProjectDir)bin\MsgHook$(PlatformArchitecture)$(TargetExt)" - - - - - - - - - - - - - - - - - - - - - - false - false - - - - - false - false - - - - - - - - - - Create - Create - Create - Create - - - - - - - - - \ No newline at end of file diff --git a/native/MsgHook/MsgHook.vcxproj.filters b/native/MsgHook/MsgHook.vcxproj.filters deleted file mode 100644 index 8a2e05b..0000000 --- a/native/MsgHook/MsgHook.vcxproj.filters +++ /dev/null @@ -1,76 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - - Resource Files - - - Resource Files - - - Source Files - - - Resource Files - - - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Resource Files - - - \ No newline at end of file diff --git a/native/MsgHook/MsgHook.vcxproj.user b/native/MsgHook/MsgHook.vcxproj.user deleted file mode 100644 index ace9a86..0000000 --- a/native/MsgHook/MsgHook.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/native/MsgHook/MsgHookTest.aps b/native/MsgHook/MsgHookTest.aps deleted file mode 100644 index 0f73f84..0000000 Binary files a/native/MsgHook/MsgHookTest.aps and /dev/null differ diff --git a/native/MsgHook/MsgHookTest.ico b/native/MsgHook/MsgHookTest.ico deleted file mode 100644 index d551aa3..0000000 Binary files a/native/MsgHook/MsgHookTest.ico and /dev/null differ diff --git a/native/MsgHook/MsgHookTest.rc b/native/MsgHook/MsgHookTest.rc deleted file mode 100644 index 5857274..0000000 Binary files a/native/MsgHook/MsgHookTest.rc and /dev/null differ diff --git a/native/MsgHook/MsgHookWindow.cpp b/native/MsgHook/MsgHookWindow.cpp deleted file mode 100644 index 9c443be..0000000 --- a/native/MsgHook/MsgHookWindow.cpp +++ /dev/null @@ -1,635 +0,0 @@ -/* - * Copyright 2014, Synthuse.org - * Released under the Apache Version 2.0 License. - * - * last modified by ejakubowski7@gmail.com -*/ - -// MsgHookTest.cpp : Defines the entry point for the application. -// - -#include "stdafx.h" -#include "resource.h" -#include "MsgLookup.h" -#include "ResExtract.h" -//#include "MsgHookTest.h" -//#include "MsgHook.h" - -#define MAX_LOADSTRING 100 - -// Global Variables: -HINSTANCE hInst; // current instance -TCHAR szTitle[MAX_LOADSTRING]; // The title bar text -TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name -HWND mainHwnd = NULL; -HMENU mainMenu = NULL; -#define TXTBOX_LIMIT 700000 -HWND txtbox = NULL; -HWND targetHwnd = NULL; -DWORD targetPid = 0; -const int txtboxSpacing = 2; - -long msgCount = 0; - -//message filters flags -bool filterWmCommand = false; -bool filterWmNotify = false; -bool filterCustom = false; -bool filterAbove = false; - -TCHAR dll32bitName[500] = _T(""); -TCHAR dll64bitName[500] = _T(""); -char dllProcName[500] = "CwpHookProc"; - -//#define MAX_TEST_SIZE 100 -//TCHAR targetClassname[MAX_TEST_SIZE] = _T("Notepad"); -TCHAR targetProcessId[MAX_TEST_SIZE] = _T(""); -TCHAR targetClassname[MAX_TEST_SIZE] = _T(""); -TCHAR targetHwndStr[MAX_TEST_SIZE] = _T(""); -TCHAR testWmSettextL[MAX_TEST_SIZE] = _T("This is a test"); -TCHAR testWmSettextW[MAX_TEST_SIZE] = _T("0"); -TCHAR testWmCommandL[MAX_TEST_SIZE] = _T("0"); -TCHAR testWmCommandW[MAX_TEST_SIZE] = _T("1"); - -TCHAR customMsgStr[MAX_TEST_SIZE] = _T("WM_SETTEXT"); - -const int hotkeyIdOffset = 0; -const int pauseHotKey = 'P'; //P -bool isPaused = false; - -// Forward declarations of functions included in this code module: -int APIENTRY StartWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow); -ATOM MyRegisterClass(HINSTANCE hInstance); -BOOL InitInstance(HINSTANCE, int); -LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); -INT_PTR CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM); - -void AppendText(HWND txtHwnd, LPCTSTR newText) -{ - if (isPaused) - return; - DWORD len = GetWindowTextLength(txtHwnd); - if (len > (TXTBOX_LIMIT - 500)) - {//need to truncate the beginning so the text doesn't go past it's limit - SendMessage(txtHwnd, EM_SETSEL, 0, 20000); - SendMessage(txtHwnd, EM_REPLACESEL, 0, (LPARAM)_T("")); - len = GetWindowTextLength(txtHwnd); - } - //DWORD l,r; - //SendMessage(txtHwnd, EM_GETSEL,(WPARAM)&l,(LPARAM)&r); - SendMessage(txtHwnd, EM_SETSEL, len, len); - SendMessage(txtHwnd, EM_REPLACESEL, 0, (LPARAM)newText); - len = GetWindowTextLength(txtHwnd); - SendMessage(txtHwnd, EM_SETSEL, len, len); - //SendMessage(txtHwnd, EM_SETSEL,l,r); -} - -void InitMsgFiltersAndLookup() -{ - if (!filterWmCommand && !filterAbove && !filterWmNotify && !filterCustom) - InitializeMsgLookup(); - else - { - int allowList[4]; - for (int i = 0; i < 4; i ++) - allowList[i] = -1; - - if (filterWmCommand) { - AppendText(txtbox, _T("filtering on WM_COMMAND & WM_MENUCOMMAND\r\n")); - allowList[0] = WM_COMMAND; - allowList[1] = WM_MENUCOMMAND; - } - if (filterWmNotify) - { - AppendText(txtbox, _T("filtering on WM_NOTIFY\r\n")); - allowList[2] = WM_NOTIFY; - } - //if (filterAbove) - // allowList[0] = WM_COMMAND; - if (filterCustom && _tcslen(customMsgStr) > 0) - { - InitializeMsgLookup(); //initialize full msg list and do reverse lookup based on custom filter string - for (int x = 0; x < MAX_MSG_LOOKUP; x++) - { - if (_tcscmp(customMsgStr, MSG_LOOKUP[x]) == 0) { - TCHAR tmp[100]; - _stprintf_s(tmp, _T("filtering on %s (%d)\r\n"), customMsgStr, x); - AppendText(txtbox, tmp); - allowList[3] = x; - } - } - } - InitializeMsgLookup(allowList, 4); - } -} - -void StartMessageHook() -{ - AppendText(txtbox, _T("Starting Message Hook\r\n")); - //targetHwnd = FindWindow(targetClassname, NULL); - - TCHAR tmp[500]; - - DWORD tid = 0; - if (_tcscmp(targetHwndStr, _T("")) != 0) //if target HWND was used - { - TCHAR *stopStr; - targetHwnd = (HWND)_tcstol(targetHwndStr, &stopStr, 10); - tid = GetWindowThreadProcessId(targetHwnd, NULL); - _stprintf_s(tmp, _T("Target Handle: %ld, and Thread Id: %ld\r\n"), targetHwnd, tid); - } - - targetPid = 0; - if (_tcscmp(targetProcessId, _T("")) != 0) //if target pid was used - { - TCHAR *stopStr; - targetPid = (DWORD)_tcstol(targetProcessId, &stopStr, 10); - tid = GetProcessMainThreadId(targetPid); - _stprintf_s(tmp, _T("Target PId: %ld, and Thread Id: %ld\r\n"), targetPid, tid); - } - - InitMsgFiltersAndLookup(); - //InitializeMsgLookup(); - - AppendText(txtbox, tmp); - - //block self/global msg hook - if (tid == 0) { - AppendText(txtbox, _T("Target thread not found\r\n")); - return; - } - - if (targetPid != 0) // handle various types of bit matching - { - BOOL current64bit = IsCurrentProcess64Bit(); - if (IsProcess64Bit(targetPid) && current64bit) - { - _stprintf_s(tmp, _T("Target PId (%ld) is a matching 64 bit process\r\n"), targetPid); - SetCustomMsgHookDll(dll64bitName, dllProcName); - } - else if(!IsProcess64Bit(targetPid) && !current64bit) - { - _stprintf_s(tmp, _T("Target PId (%ld) is a matching 32 bit process\r\n"), targetPid); - SetCustomMsgHookDll(dll32bitName, dllProcName); - } - else - { - if (current64bit) - _stprintf_s(tmp, _T("Target PId (%ld) is a not matching 64 bit process.\r\n"), targetPid); - else - _stprintf_s(tmp, _T("Target PId (%ld) is a not matching 32 bit process.\r\n"), targetPid); - AppendText(txtbox, tmp); - TCHAR *dllname = dll32bitName; - TCHAR *exename = _T("SetMsgHook32.exe"); - int setMsgHookRes = IDR_SETMH32; - if (IsProcess64Bit(targetPid)) - { - dllname = dll64bitName; - exename = _T("SetMsgHook64.exe"); - setMsgHookRes = IDR_SETMH64; - } - _tcscat_s(tmp, 500, _T("Do you wish to open a new matching Message Hook Window?")); - int mbResult = MessageBox(mainHwnd, tmp, _T("Message Hook"), MB_ICONQUESTION | MB_YESNO); - if (mbResult == IDNO) - return ; - _stprintf_s(tmp, _T("%s %s 0 %d"), exename, dllname, targetPid); - RunResource(setMsgHookRes, tmp); - //EnableMenuItem(mainMenu, ID_FILE_STOPHOOK, MF_ENABLED); - //EnableMenuItem(mainMenu, ID_FILE_STARTHOOK, MF_DISABLED | MF_GRAYED); - _tcscat_s(tmp, 500, _T("\r\n")); - AppendText(txtbox, tmp); - PostQuitMessage(2); - return; - } - AppendText(txtbox, tmp); - } - if (SetMsgHook(mainHwnd, tid)) - { - EnableMenuItem(mainMenu, ID_FILE_STOPHOOK, MF_ENABLED); - EnableMenuItem(mainMenu, ID_FILE_STARTHOOK, MF_DISABLED | MF_GRAYED); - AppendText(txtbox, _T("Hook successfully initialized\r\n")); - } - else - AppendText(txtbox, _T("Hook failed to initialize\r\n")); -} - -void StopMessageHook() -{ - EnableMenuItem(mainMenu, ID_FILE_STOPHOOK, MF_DISABLED | MF_GRAYED); - EnableMenuItem(mainMenu, ID_FILE_STARTHOOK, MF_ENABLED); - AppendText(txtbox, TEXT("Stopping Message Hook\r\n")); - //KillHook(); - RemoveHook(); - msgCount = 0; -} - -bool OnCopyData(COPYDATASTRUCT* pCopyDataStruct) // WM_COPYDATA lParam will have this struct -{ - if( pCopyDataStruct->cbData!=sizeof(HEVENT)) - return false; - HEVENT Event; - memcpy(&Event, (HEVENT*)pCopyDataStruct->lpData, sizeof(HEVENT)); // transfer data to internal variable - if (Event.dwHookType == WH_KEYBOARD) - { - //KBDLLHOOKSTRUCT* pkh = (KBDLLHOOKSTRUCT*) Event.lParam; - //char tmp[50]; - //return wkvn->KeyboardData(pkh->vkCode,Event.wParam); - } - else if (Event.dwHookType == WH_MOUSE) - { - //MSLLHOOKSTRUCT* pmh = (MSLLHOOKSTRUCT*) Event.lParam; - //char tmp[50]; - //if (Event.wParam == WM_LBUTTONDOWN) - // return wkvn->MouseClickData(1,true); - // else - // return wkvn->MouseMoveData(pmh->pt.x,pmh->pt.y); - } - else if (Event.dwHookType == WH_CALLWNDPROC) - { - TCHAR *msgName = _T("unknown"); - if (Event.nCode < MAX_MSG_LOOKUP) - msgName = MSG_LOOKUP[Event.nCode]; - else - { - if (!filterAbove) - return false; - } - if (_tcscmp(msgName, _T("")) != 0) - { - ++msgCount; - TCHAR msgHwndClassname[20]; - GetClassName(Event.hWnd, msgHwndClassname, 20); - TCHAR tmp[200]; - _stprintf_s(tmp, _T("<%07ld> hwnd: %ld (%s), msg: %s (%ld), wparam: '%s'[%ld], lparam: '%s'{%ld}\r\n"), msgCount, Event.hWnd, msgHwndClassname, msgName, Event.nCode, Event.wParamStr, Event.wParam, Event.lParamStr,Event.lParam); - AppendText(txtbox, tmp); - } - } - return false; -} - -void SendWmSettext() //ID_TESTMSGS_WM -{ - //SetWindowText(targetHwnd, _T("This is a test")); - //TCHAR txt[] = _T("This is a test"); - TCHAR *stopStr; - long wparam = _tcstol(testWmSettextW, &stopStr, 10); - SendMessage(targetHwnd, WM_SETTEXT, wparam, (LPARAM)testWmSettextL); - //PostMessage(targetHwnd, WM_SETTEXT, 0 , (LPARAM)txt); -} - - -void SendWmCommand() //ID_TESTMSGS_WM -{ - TCHAR *stopStr; - HWND sendHwnd = targetHwnd; - if (_tcscmp(targetHwndStr, _T("")) != 0) - { - sendHwnd = (HWND)_tcstol(targetHwndStr, &stopStr, 10); - } - long wparam = _tcstol(testWmCommandW, &stopStr, 10); - long lparam = _tcstol(testWmCommandL, &stopStr, 10); - SendMessage(sendHwnd, WM_COMMAND, wparam, lparam); - - /* - TCHAR tmp[500]; - _stprintf_s(tmp, _T("hook handle %ld\r\n"), (long)GetCurrentHookHandle()); - AppendText(txtbox, tmp); */ -} - -void HotKeyPressed(WPARAM wParam) -{ - //AppendText(txtbox, _T("hotkey test")); - if (wParam == (pauseHotKey + hotkeyIdOffset)) - { - if (!isPaused) - { - AppendText(txtbox, _T("Paused\r\n")); - isPaused = true; - } - else - { - isPaused = false; - AppendText(txtbox, _T("Unpaused\r\n")); - } - } -} - -extern "C" __declspec(dllexport) void CreateMsgHookWindow(LPTSTR lpCmdLine) -{ - //StartWinMain(GetModuleHandle(NULL), NULL, lpCmdLine, SW_SHOW); - StartWinMain((HINSTANCE)pData->g_hInstance, NULL, lpCmdLine, SW_SHOW); - -} - -int APIENTRY StartWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) -{ - // get this Dlls path, by default set both 32 and 64 bit names the same - if (_tcscmp(dll32bitName, _T("")) == 0 && _tcscmp(dll64bitName, _T("")) == 0) - { - HMODULE hm = NULL; - if (!GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,(LPCWSTR) &StartWinMain, &hm)) - { - int ret = GetLastError(); - fprintf(stderr, "GetModuleHandle returned %d\n", ret); - } - GetModuleFileName(hm, dll32bitName, sizeof(dll32bitName)); - GetModuleFileName(hm, dll64bitName, sizeof(dll64bitName)); - //MessageBox(0, dll32bitname, dll64bitname, 0); - } - - UNREFERENCED_PARAMETER(hPrevInstance); - UNREFERENCED_PARAMETER(lpCmdLine); - - // TODO: Place code here. - MSG msg; - HACCEL hAccelTable; - - // Initialize global strings - LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); - LoadString(hInstance, IDC_MSGHOOKTEST, szWindowClass, MAX_LOADSTRING); - MyRegisterClass(hInstance); - - // Perform application initialization: - if (!InitInstance (hInstance, nCmdShow)) - { - return FALSE; - } - - hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MSGHOOKTEST)); - - if (lpCmdLine != NULL) //process command line args - { - if (_tcslen(lpCmdLine) > 0) - { - TCHAR *stopStr; - targetPid = (DWORD)_tcstol(lpCmdLine, &stopStr, 10); - _stprintf_s(targetProcessId, _T("%ld"), (long)targetPid); - StartMessageHook(); - } - } - - // Main message loop: - while (GetMessage(&msg, NULL, 0, 0)) - { - //if (msg.message == WM_HOTKEY) - // HotKeyPressed(msg.wParam); - if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } - UnregisterHotKey(mainHwnd, pauseHotKey + hotkeyIdOffset); - - return (int) msg.wParam; -} - -// -// FUNCTION: MyRegisterClass() -// -// PURPOSE: Registers the window class. -// -// COMMENTS: -// -// This function and its usage are only necessary if you want this code -// to be compatible with Win32 systems prior to the 'RegisterClassEx' -// function that was added to Windows 95. It is important to call this function -// so that the application will get 'well formed' small icons associated -// with it. -// -ATOM MyRegisterClass(HINSTANCE hInstance) -{ - WNDCLASSEX wcex; - - wcex.cbSize = sizeof(WNDCLASSEX); - - wcex.style = CS_HREDRAW | CS_VREDRAW; - wcex.lpfnWndProc = WndProc; - wcex.cbClsExtra = 0; - wcex.cbWndExtra = 0; - wcex.hInstance = hInstance; - wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MSGHOOKICO)); - wcex.hCursor = LoadCursor(NULL, IDC_ARROW); - wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); - wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MSGHOOKTEST); - wcex.lpszClassName = szWindowClass; - wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); - - return RegisterClassEx(&wcex); -} - -// -// FUNCTION: InitInstance(HINSTANCE, int) -// -// PURPOSE: Saves instance handle and creates main window -// -// COMMENTS: -// -// In this function, we save the instance handle in a global variable and -// create and display the main program window. -// -BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) -{ - HWND hWnd; - - hInst = hInstance; // Store instance handle in our global variable - - hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, 0, 700, 300, NULL, NULL, hInstance, NULL); - - if (!hWnd) { - DWORD lastErr = GetLastError(); - printf("Error Creating Window %d\n", lastErr); - _tprintf(_T("Window Class Name: %s, Instance: %ld\n"), szWindowClass, (long)hInstance); - return FALSE; - } - mainHwnd = hWnd; - - RECT rect; - GetClientRect(hWnd, &rect); - // make the txtbox edit control almost the same size as the parent window - //WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL - txtbox = CreateWindow(TEXT("Edit"),TEXT(""), WS_CHILD | WS_VISIBLE | ES_MULTILINE | WS_VSCROLL | ES_AUTOVSCROLL | ES_READONLY, - txtboxSpacing, txtboxSpacing,rect.right-(txtboxSpacing*2), rect.bottom-(txtboxSpacing*2), hWnd, NULL, NULL, NULL); - SendMessage(txtbox, EM_SETLIMITTEXT, (WPARAM)TXTBOX_LIMIT, 0); - - HFONT hFont = CreateFont(14, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET, - OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, - DEFAULT_PITCH | FF_DONTCARE, TEXT("Arial")); - SendMessage(txtbox, WM_SETFONT, (WPARAM)hFont, TRUE); - - mainMenu = GetMenu(mainHwnd); - EnableMenuItem(mainMenu, ID_FILE_STOPHOOK, MF_DISABLED | MF_GRAYED); - - RegisterHotKey(mainHwnd, pauseHotKey + hotkeyIdOffset, MOD_NOREPEAT | MOD_SHIFT | MOD_CONTROL, pauseHotKey); - - ShowWindow(hWnd, nCmdShow); - UpdateWindow(hWnd); - - //set always on top - SetWindowPos(mainHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE| SWP_NOMOVE); - - return TRUE; -} - -// -// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) -// -// PURPOSE: Processes messages for the main window. -// -// WM_COMMAND - process the application menu -// WM_PAINT - Paint the main window -// WM_DESTROY - post a quit message and return -// -// -LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - int wmId, wmEvent; - PAINTSTRUCT ps; - HDC hdc; - - switch (message) - { - case WM_CREATE: - //appendText(txtbox, TEXT("test\r\n")); - break; - case WM_COPYDATA: - return (OnCopyData((COPYDATASTRUCT *) lParam)); - break; - case WM_COMMAND: - wmId = LOWORD(wParam); - wmEvent = HIWORD(wParam); - // Parse the menu selections: - switch (wmId) - { - case ID_FILE_STARTHOOK: - StartMessageHook(); - break; - case ID_FILE_STOPHOOK: - StopMessageHook(); - break; - case ID_TESTMSGS_WM: - SendWmSettext(); - break; - case ID_TESTMSGS_WMCOM: - SendWmCommand(); - break; - case ID_PROC64TEST: - if (_tcscmp(targetProcessId, _T("")) != 0) //if target pid was used - { - TCHAR tmp[500]; - TCHAR *stopStr; - targetPid = (DWORD)_tcstol(targetProcessId, &stopStr, 10); - BOOL current64bit = IsCurrentProcess64Bit(); - if (IsProcess64Bit(targetPid) && current64bit) - _stprintf_s(tmp, _T("Target pid (%ld) is a matching 64 bit process\r\n"), targetPid); - else if(!IsProcess64Bit(targetPid) && !current64bit) - _stprintf_s(tmp, _T("Target pid (%ld) is a matching 32 bit process\r\n"), targetPid); - else if (IsProcess64Bit(targetPid)) - _stprintf_s(tmp, _T("Target pid (%ld) is 64 bit process\r\n"), targetPid); - else - _stprintf_s(tmp, _T("Target pid (%ld) is 32 bit process\r\n"), targetPid); - AppendText(txtbox, tmp); - //ExtractResource(IDR_SETMH32, _T("SetMsgHook32.exe")); - //_stprintf_s(tmp, _T(" %s %ld %d"), dll32bitName, (long)mainHwnd, targetPid); - //RunResource(IDR_SETMH32, tmp); - - //MessageBox(0, , _T("64 bit Test"), 0); - } - break; - case ID_FILE_SETTINGS: - DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, DlgProc); - break; - case IDM_ABOUT: - DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, DlgProc); - break; - case ID_FILE_CLEAR: - SetWindowText(txtbox, _T("")); - break; - case IDM_EXIT: - DestroyWindow(hWnd); - break; - default: - return DefWindowProc(hWnd, message, wParam, lParam); - } - break; - case WM_HOTKEY: - HotKeyPressed(wParam); - break; - case WM_PAINT: - hdc = BeginPaint(hWnd, &ps); - // TODO: Add any drawing code here... - EndPaint(hWnd, &ps); - break; - case WM_SIZE: - { //resize the txtbox when the parent window size changes - int nWidth = LOWORD(lParam); - int nHeight = HIWORD(lParam); - SetWindowPos(txtbox, HWND_NOTOPMOST, txtboxSpacing, txtboxSpacing, nWidth-(txtboxSpacing*2), nHeight-(txtboxSpacing*2), SWP_NOZORDER|SWP_NOMOVE); - } - break; - case WM_DESTROY: - PostQuitMessage(0); - break; - default: - return DefWindowProc(hWnd, message, wParam, lParam); - } - return 0; -} - -// Message handler for about box. -INT_PTR CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) -{ - UNREFERENCED_PARAMETER(lParam); - switch (message) - { - case WM_INITDIALOG: - { - //IDC_EDIT1 - //SendDlgItemMessage(hDlg, IDC_EDIT1, WM_SETTEXT, 0 , (LPARAM)targetClassname); - SendDlgItemMessage(hDlg, IDC_TARGETPID, WM_SETTEXT, 0 , (LPARAM)targetProcessId); - if (filterWmCommand) - SendDlgItemMessage(hDlg, IDC_CHECK_CMD, BM_SETCHECK, BST_CHECKED, 0); - if (filterWmNotify) - SendDlgItemMessage(hDlg, IDC_CHECK_NOT, BM_SETCHECK, BST_CHECKED, 0); - if (filterAbove) - SendDlgItemMessage(hDlg, IDC_CHECK_ABO, BM_SETCHECK, BST_CHECKED, 0); - if (filterCustom) - SendDlgItemMessage(hDlg, IDC_CUSTOMCHK, BM_SETCHECK, BST_CHECKED, 0); - SendDlgItemMessage(hDlg, IDC_WMCOMW, WM_SETTEXT, 0 , (LPARAM)testWmCommandW); - SendDlgItemMessage(hDlg, IDC_WMCOML, WM_SETTEXT, 0 , (LPARAM)testWmCommandL); - SendDlgItemMessage(hDlg, IDC_WMSETW, WM_SETTEXT, 0 , (LPARAM)testWmSettextW); - SendDlgItemMessage(hDlg, IDC_WMSETL, WM_SETTEXT, 0 , (LPARAM)testWmSettextL); - SendDlgItemMessage(hDlg, IDC_HWND, WM_SETTEXT, 0 , (LPARAM)targetHwndStr); - SendDlgItemMessage(hDlg, IDC_CUSTOMMSG, WM_SETTEXT, 0 , (LPARAM)customMsgStr); - } - return (INT_PTR)TRUE; - - case WM_COMMAND: - if (LOWORD(wParam) == IDOK) //only save on OK - { - //GetDlgItemText(hDlg, IDC_EDIT1, targetClassname, MAX_TEST_SIZE); - GetDlgItemText(hDlg, IDC_TARGETPID, targetProcessId, MAX_TEST_SIZE); - GetDlgItemText(hDlg, IDC_WMCOMW, testWmCommandW, MAX_TEST_SIZE); - GetDlgItemText(hDlg, IDC_WMCOML, testWmCommandL, MAX_TEST_SIZE); - GetDlgItemText(hDlg, IDC_WMSETW, testWmSettextW, MAX_TEST_SIZE); - GetDlgItemText(hDlg, IDC_WMSETL, testWmSettextL, MAX_TEST_SIZE); - GetDlgItemText(hDlg, IDC_HWND, targetHwndStr, MAX_TEST_SIZE); - GetDlgItemText(hDlg, IDC_CUSTOMMSG, customMsgStr, MAX_TEST_SIZE); - // check filter options - filterWmCommand = (SendDlgItemMessage(hDlg, IDC_CHECK_CMD, BM_GETCHECK, 0, 0) == BST_CHECKED); // the hard way - filterWmNotify = (IsDlgButtonChecked(hDlg, IDC_CHECK_NOT) == BST_CHECKED);// the easy way - filterAbove = (IsDlgButtonChecked(hDlg, IDC_CHECK_ABO) == BST_CHECKED); - filterCustom = (IsDlgButtonChecked(hDlg, IDC_CUSTOMCHK) == BST_CHECKED); - - InitMsgFiltersAndLookup(); - } - if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) - { - EndDialog(hDlg, LOWORD(wParam)); - return (INT_PTR)TRUE; - } - break; - } - return (INT_PTR)FALSE; -} diff --git a/native/MsgHook/MsgLookup.h b/native/MsgHook/MsgLookup.h deleted file mode 100644 index e432123..0000000 --- a/native/MsgHook/MsgLookup.h +++ /dev/null @@ -1,250 +0,0 @@ - -#include "stdafx.h" - -// MSG Array LOOKUP -const int MAX_MSG_LOOKUP = 1024; -const int MAX_MSG_NAME = 21; -TCHAR MSG_LOOKUP[MAX_MSG_LOOKUP][MAX_MSG_NAME] = { -}; - - -//void InitializeMsgLookup() below -void InitializeMsgLookup(int allowList[], int allowSize) -{ - for (int i = 0 ; i < MAX_MSG_LOOKUP ; i++) - { - bool allowFlg = true; - if (allowSize > 0) - allowFlg = false; - for (int a = 0 ; a < allowSize ; a++) - if (allowList[a] == i) - allowFlg = true; - if (!allowFlg) - { - memset((void *)&MSG_LOOKUP[i], '\0', sizeof(TCHAR) * MAX_MSG_NAME); //blank it - continue; - } - switch (i) - { - case WM_NULL: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NULL")); break; - case WM_CREATE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CREATE")); break; - case WM_DESTROY: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DESTROY")); break; - case WM_MOVE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MOVE")); break; - case WM_SIZE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SIZE")); break; - case WM_ACTIVATE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_ACTIVATE")); break; - case WM_SETFOCUS: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SETFOCUS")); break; - case WM_KILLFOCUS: _tcscpy_s(MSG_LOOKUP[i], _T("WM_KILLFOCUS")); break; - case WM_ENABLE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_ENABLE")); break; - case WM_SETREDRAW: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SETREDRAW")); break; - case WM_SETTEXT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SETTEXT")); break; - case WM_GETTEXT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_GETTEXT")); break; - case WM_GETTEXTLENGTH: _tcscpy_s(MSG_LOOKUP[i], _T("WM_GETTEXTLENGTH")); break; - case WM_PAINT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_PAINT")); break; - case WM_CLOSE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CLOSE")); break; - case WM_QUERYENDSESSION: _tcscpy_s(MSG_LOOKUP[i], _T("WM_QUERYENDSESSION")); break; - case WM_QUIT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_QUIT")); break; - case WM_QUERYOPEN: _tcscpy_s(MSG_LOOKUP[i], _T("WM_QUERYOPEN")); break; - case WM_ERASEBKGND: _tcscpy_s(MSG_LOOKUP[i], _T("WM_ERASEBKGND")); break; - case WM_SYSCOLORCHANGE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SYSCOLORCHANGE")); break; - case WM_ENDSESSION: _tcscpy_s(MSG_LOOKUP[i], _T("WM_ENDSESSION")); break; - case 0x17: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SYSTEMERROR")); break; - case WM_SHOWWINDOW: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SHOWWINDOW")); break; - case 0x19: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CTLCOLOR")); break; - case WM_WININICHANGE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_WININICHANGE")); break; - //case WM_SETTINGCHANGE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SETTINGCHANGE")); break; - case WM_DEVMODECHANGE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DEVMODECHANGE")); break; - case WM_ACTIVATEAPP: _tcscpy_s(MSG_LOOKUP[i], _T("WM_ACTIVATEAPP")); break; - case WM_FONTCHANGE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_FONTCHANGE")); break; - case WM_TIMECHANGE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_TIMECHANGE")); break; - case WM_CANCELMODE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CANCELMODE")); break; - case WM_SETCURSOR: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SETCURSOR")); break; - case WM_MOUSEACTIVATE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MOUSEACTIVATE")); break; - case WM_CHILDACTIVATE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CHILDACTIVATE")); break; - case WM_QUEUESYNC: _tcscpy_s(MSG_LOOKUP[i], _T("WM_QUEUESYNC")); break; - case WM_GETMINMAXINFO: _tcscpy_s(MSG_LOOKUP[i], _T("WM_GETMINMAXINFO")); break; - case WM_PAINTICON: _tcscpy_s(MSG_LOOKUP[i], _T("WM_PAINTICON")); break; - case WM_ICONERASEBKGND: _tcscpy_s(MSG_LOOKUP[i], _T("WM_ICONERASEBKGND")); break; - case WM_NEXTDLGCTL: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NEXTDLGCTL")); break; - case WM_SPOOLERSTATUS: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SPOOLERSTATUS")); break; - case WM_DRAWITEM: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DRAWITEM")); break; - case WM_MEASUREITEM: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MEASUREITEM")); break; - case WM_DELETEITEM: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DELETEITEM")); break; - case WM_VKEYTOITEM: _tcscpy_s(MSG_LOOKUP[i], _T("WM_VKEYTOITEM")); break; - case WM_CHARTOITEM: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CHARTOITEM")); break; - case WM_SETFONT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SETFONT")); break; - case WM_GETFONT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_GETFONT")); break; - case WM_SETHOTKEY: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SETHOTKEY")); break; - case WM_GETHOTKEY: _tcscpy_s(MSG_LOOKUP[i], _T("WM_GETHOTKEY")); break; - case WM_QUERYDRAGICON: _tcscpy_s(MSG_LOOKUP[i], _T("WM_QUERYDRAGICON")); break; - case WM_COMPAREITEM: _tcscpy_s(MSG_LOOKUP[i], _T("WM_COMPAREITEM")); break; - case WM_COMPACTING: _tcscpy_s(MSG_LOOKUP[i], _T("WM_COMPACTING")); break; - case WM_WINDOWPOSCHANGING: _tcscpy_s(MSG_LOOKUP[i], _T("WM_WINDOWPOSCHANGING")); break; - case WM_WINDOWPOSCHANGED: _tcscpy_s(MSG_LOOKUP[i], _T("WM_WINDOWPOSCHANGED")); break; - case WM_POWER: _tcscpy_s(MSG_LOOKUP[i], _T("WM_POWER")); break; - case WM_COPYDATA: _tcscpy_s(MSG_LOOKUP[i], _T("WM_COPYDATA")); break; - case WM_CANCELJOURNAL: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CANCELJOURNAL")); break; - case WM_NOTIFY: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NOTIFY")); break; - case WM_INPUTLANGCHANGEREQUEST: _tcscpy_s(MSG_LOOKUP[i], _T("WM_INPUTLANGCHANGERE")); break; - case WM_INPUTLANGCHANGE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_INPUTLANGCHANGE")); break; - case WM_TCARD: _tcscpy_s(MSG_LOOKUP[i], _T("WM_TCARD")); break; - case WM_HELP: _tcscpy_s(MSG_LOOKUP[i], _T("WM_HELP")); break; - case WM_USERCHANGED: _tcscpy_s(MSG_LOOKUP[i], _T("WM_USERCHANGED")); break; - case WM_NOTIFYFORMAT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NOTIFYFORMAT")); break; - case WM_CONTEXTMENU: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CONTEXTMENU")); break; - case WM_STYLECHANGING: _tcscpy_s(MSG_LOOKUP[i], _T("WM_STYLECHANGING")); break; - case WM_STYLECHANGED: _tcscpy_s(MSG_LOOKUP[i], _T("WM_STYLECHANGED")); break; - case WM_DISPLAYCHANGE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DISPLAYCHANGE")); break; - case WM_GETICON: _tcscpy_s(MSG_LOOKUP[i], _T("WM_GETICON")); break; - case WM_SETICON: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SETICON")); break; - case WM_NCCREATE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCCREATE")); break; - case WM_NCDESTROY: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCDESTROY")); break; - case WM_NCCALCSIZE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCCALCSIZE")); break; - case WM_NCHITTEST: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCHITTEST")); break; - case WM_NCPAINT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCPAINT")); break; - case WM_NCACTIVATE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCACTIVATE")); break; - case WM_GETDLGCODE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_GETDLGCODE")); break; - case WM_NCMOUSEMOVE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCMOUSEMOVE")); break; - case WM_NCLBUTTONDOWN: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCLBUTTONDOWN")); break; - case WM_NCLBUTTONUP: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCLBUTTONUP")); break; - case WM_NCLBUTTONDBLCLK: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCLBUTTONDBLCLK")); break; - case WM_NCRBUTTONDOWN: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCRBUTTONDOWN")); break; - case WM_NCRBUTTONUP: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCRBUTTONUP")); break; - case WM_NCRBUTTONDBLCLK: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCRBUTTONDBLCLK")); break; - case WM_NCMBUTTONDOWN: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCMBUTTONDOWN")); break; - case WM_NCMBUTTONUP: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCMBUTTONUP")); break; - case WM_NCMBUTTONDBLCLK: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCMBUTTONDBLCLK")); break; - //case WM_KEYFIRST: _tcscpy_s(MSG_LOOKUP[i], _T("WM_KEYFIRST")); break; - case WM_KEYDOWN: _tcscpy_s(MSG_LOOKUP[i], _T("WM_KEYDOWN")); break; - case WM_KEYUP: _tcscpy_s(MSG_LOOKUP[i], _T("WM_KEYUP")); break; - case WM_CHAR: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CHAR")); break; - case WM_DEADCHAR: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DEADCHAR")); break; - case WM_SYSKEYDOWN: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SYSKEYDOWN")); break; - case WM_SYSKEYUP: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SYSKEYUP")); break; - case WM_SYSCHAR: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SYSCHAR")); break; - case WM_SYSDEADCHAR: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SYSDEADCHAR")); break; - case WM_KEYLAST: _tcscpy_s(MSG_LOOKUP[i], _T("WM_KEYLAST")); break; - case WM_IME_STARTCOMPOSITION: _tcscpy_s(MSG_LOOKUP[i], _T("WM_IME_STARTCOMPOSIT")); break; - case WM_IME_ENDCOMPOSITION: _tcscpy_s(MSG_LOOKUP[i], _T("WM_IME_ENDCOMPOSITIO")); break; - case WM_IME_COMPOSITION: _tcscpy_s(MSG_LOOKUP[i], _T("WM_IME_COMPOSITION")); break; - //case WM_IME_KEYLAST: _tcscpy_s(MSG_LOOKUP[i], _T("WM_IME_KEYLAST")); break; - case WM_INITDIALOG: _tcscpy_s(MSG_LOOKUP[i], _T("WM_INITDIALOG")); break; - case WM_COMMAND: _tcscpy_s(MSG_LOOKUP[i], _T("WM_COMMAND")); break; - case WM_SYSCOMMAND: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SYSCOMMAND")); break; - case WM_TIMER: _tcscpy_s(MSG_LOOKUP[i], _T("WM_TIMER")); break; - case WM_HSCROLL: _tcscpy_s(MSG_LOOKUP[i], _T("WM_HSCROLL")); break; - case WM_VSCROLL: _tcscpy_s(MSG_LOOKUP[i], _T("WM_VSCROLL")); break; - case WM_INITMENU: _tcscpy_s(MSG_LOOKUP[i], _T("WM_INITMENU")); break; - case WM_INITMENUPOPUP: _tcscpy_s(MSG_LOOKUP[i], _T("WM_INITMENUPOPUP")); break; - case WM_MENUSELECT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MENUSELECT")); break; - case WM_MENUCHAR: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MENUCHAR")); break; - case WM_ENTERIDLE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_ENTERIDLE")); break; - case WM_CTLCOLORMSGBOX: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CTLCOLORMSGBOX")); break; - case WM_CTLCOLOREDIT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CTLCOLOREDIT")); break; - case WM_CTLCOLORLISTBOX: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CTLCOLORLISTBOX")); break; - case WM_CTLCOLORBTN: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CTLCOLORBTN")); break; - case WM_CTLCOLORDLG: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CTLCOLORDLG")); break; - case WM_CTLCOLORSCROLLBAR: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CTLCOLORSCROLLBAR")); break; - case WM_CTLCOLORSTATIC: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CTLCOLORSTATIC")); break; - //case WM_MOUSEFIRST: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MOUSEFIRST")); break; - case WM_MOUSEMOVE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MOUSEMOVE")); break; - case WM_LBUTTONDOWN: _tcscpy_s(MSG_LOOKUP[i], _T("WM_LBUTTONDOWN")); break; - case WM_LBUTTONUP: _tcscpy_s(MSG_LOOKUP[i], _T("WM_LBUTTONUP")); break; - case WM_LBUTTONDBLCLK: _tcscpy_s(MSG_LOOKUP[i], _T("WM_LBUTTONDBLCLK")); break; - case WM_RBUTTONDOWN: _tcscpy_s(MSG_LOOKUP[i], _T("WM_RBUTTONDOWN")); break; - case WM_RBUTTONUP: _tcscpy_s(MSG_LOOKUP[i], _T("WM_RBUTTONUP")); break; - case WM_RBUTTONDBLCLK: _tcscpy_s(MSG_LOOKUP[i], _T("WM_RBUTTONDBLCLK")); break; - case WM_MBUTTONDOWN: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MBUTTONDOWN")); break; - case WM_MBUTTONUP: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MBUTTONUP")); break; - case WM_MBUTTONDBLCLK: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MBUTTONDBLCLK")); break; - case WM_MOUSEWHEEL: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MOUSEWHEEL")); break; - case WM_MOUSEHWHEEL: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MOUSEHWHEEL")); break; - case WM_PARENTNOTIFY: _tcscpy_s(MSG_LOOKUP[i], _T("WM_PARENTNOTIFY")); break; - case WM_ENTERMENULOOP: _tcscpy_s(MSG_LOOKUP[i], _T("WM_ENTERMENULOOP")); break; - case WM_EXITMENULOOP: _tcscpy_s(MSG_LOOKUP[i], _T("WM_EXITMENULOOP")); break; - case WM_NEXTMENU: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NEXTMENU")); break; - case WM_SIZING: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SIZING")); break; - case WM_CAPTURECHANGED: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CAPTURECHANGED")); break; - case WM_MOVING: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MOVING")); break; - case WM_POWERBROADCAST: _tcscpy_s(MSG_LOOKUP[i], _T("WM_POWERBROADCAST")); break; - case WM_DEVICECHANGE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DEVICECHANGE")); break; - case WM_MDICREATE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MDICREATE")); break; - case WM_MDIDESTROY: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MDIDESTROY")); break; - case WM_MDIACTIVATE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MDIACTIVATE")); break; - case WM_MDIRESTORE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MDIRESTORE")); break; - case WM_MDINEXT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MDINEXT")); break; - case WM_MDIMAXIMIZE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MDIMAXIMIZE")); break; - case WM_MDITILE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MDITILE")); break; - case WM_MDICASCADE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MDICASCADE")); break; - case WM_MDIICONARRANGE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MDIICONARRANGE")); break; - case WM_MDIGETACTIVE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MDIGETACTIVE")); break; - case WM_MDISETMENU: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MDISETMENU")); break; - case WM_ENTERSIZEMOVE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_ENTERSIZEMOVE")); break; - case WM_EXITSIZEMOVE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_EXITSIZEMOVE")); break; - case WM_DROPFILES: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DROPFILES")); break; - case WM_MDIREFRESHMENU: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MDIREFRESHMENU")); break; - case WM_IME_SETCONTEXT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_IME_SETCONTEXT")); break; - case WM_IME_NOTIFY: _tcscpy_s(MSG_LOOKUP[i], _T("WM_IME_NOTIFY")); break; - case WM_IME_CONTROL: _tcscpy_s(MSG_LOOKUP[i], _T("WM_IME_CONTROL")); break; - case WM_IME_COMPOSITIONFULL: _tcscpy_s(MSG_LOOKUP[i], _T("WM_IME_COMPOSITIONFU")); break; - case WM_IME_SELECT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_IME_SELECT")); break; - case WM_IME_CHAR: _tcscpy_s(MSG_LOOKUP[i], _T("WM_IME_CHAR")); break; - case WM_IME_KEYDOWN: _tcscpy_s(MSG_LOOKUP[i], _T("WM_IME_KEYDOWN")); break; - case WM_IME_KEYUP: _tcscpy_s(MSG_LOOKUP[i], _T("WM_IME_KEYUP")); break; - case WM_MOUSEHOVER: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MOUSEHOVER")); break; - case WM_NCMOUSELEAVE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_NCMOUSELEAVE")); break; - case WM_MOUSELEAVE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_MOUSELEAVE")); break; - case WM_CUT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CUT")); break; - case WM_COPY: _tcscpy_s(MSG_LOOKUP[i], _T("WM_COPY")); break; - case WM_PASTE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_PASTE")); break; - case WM_CLEAR: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CLEAR")); break; - case WM_UNDO: _tcscpy_s(MSG_LOOKUP[i], _T("WM_UNDO")); break; - case WM_RENDERFORMAT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_RENDERFORMAT")); break; - case WM_RENDERALLFORMATS: _tcscpy_s(MSG_LOOKUP[i], _T("WM_RENDERALLFORMATS")); break; - case WM_DESTROYCLIPBOARD: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DESTROYCLIPBOARD")); break; - case WM_DRAWCLIPBOARD: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DRAWCLIPBOARD")); break; - case WM_PAINTCLIPBOARD: _tcscpy_s(MSG_LOOKUP[i], _T("WM_PAINTCLIPBOARD")); break; - case WM_VSCROLLCLIPBOARD: _tcscpy_s(MSG_LOOKUP[i], _T("WM_VSCROLLCLIPBOARD")); break; - case WM_SIZECLIPBOARD: _tcscpy_s(MSG_LOOKUP[i], _T("WM_SIZECLIPBOARD")); break; - case WM_ASKCBFORMATNAME: _tcscpy_s(MSG_LOOKUP[i], _T("WM_ASKCBFORMATNAME")); break; - case WM_CHANGECBCHAIN: _tcscpy_s(MSG_LOOKUP[i], _T("WM_CHANGECBCHAIN")); break; - case WM_HSCROLLCLIPBOARD: _tcscpy_s(MSG_LOOKUP[i], _T("WM_HSCROLLCLIPBOARD")); break; - case WM_QUERYNEWPALETTE: _tcscpy_s(MSG_LOOKUP[i], _T("WM_QUERYNEWPALETTE")); break; - case WM_PALETTEISCHANGING: _tcscpy_s(MSG_LOOKUP[i], _T("WM_PALETTEISCHANGING")); break; - case WM_PALETTECHANGED: _tcscpy_s(MSG_LOOKUP[i], _T("WM_PALETTECHANGED")); break; - case WM_HOTKEY: _tcscpy_s(MSG_LOOKUP[i], _T("WM_HOTKEY")); break; - case WM_PRINT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_PRINT")); break; - case WM_PRINTCLIENT: _tcscpy_s(MSG_LOOKUP[i], _T("WM_PRINTCLIENT")); break; - case WM_HANDHELDFIRST: _tcscpy_s(MSG_LOOKUP[i], _T("WM_HANDHELDFIRST")); break; - case WM_HANDHELDLAST: _tcscpy_s(MSG_LOOKUP[i], _T("WM_HANDHELDLAST")); break; - case WM_PENWINFIRST: _tcscpy_s(MSG_LOOKUP[i], _T("WM_PENWINFIRST")); break; - case WM_PENWINLAST: _tcscpy_s(MSG_LOOKUP[i], _T("WM_PENWINLAST")); break; - case 0x390: _tcscpy_s(MSG_LOOKUP[i], _T("WM_COALESCE_FIRST")); break; - case 0x39F: _tcscpy_s(MSG_LOOKUP[i], _T("WM_COALESCE_LAST")); break; - case 0x3E0: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DDE_FIRST")); break; - //case 0x3E0: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DDE_INITIATE")); break; - case 0x3E1: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DDE_TERMINATE")); break; - case 0x3E2: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DDE_ADVISE")); break; - case 0x3E3: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DDE_UNADVISE")); break; - case 0x3E4: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DDE_ACK")); break; - case 0x3E5: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DDE_DATA")); break; - case 0x3E6: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DDE_REQUEST")); break; - case 0x3E7: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DDE_POKE")); break; - case 0x3E8: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DDE_EXECUTE")); break; - //case 0x3E8: _tcscpy_s(MSG_LOOKUP[i], _T("WM_DDE_LAST")); break; - - //case : _tcscpy_s(MSG_LOOKUP[i], _T("")); break; - default: - memset((void *)&MSG_LOOKUP[i], '\0', sizeof(TCHAR) * MAX_MSG_NAME); - //_tcscpy_s(MSG_LOOKUP[i], 20, _T("")); - break; - } - } -} - -void InitializeMsgLookup() -{ - int allowList[1]; - allowList[0] = -1; - InitializeMsgLookup(allowList, 0); -} - diff --git a/native/MsgHook/ReadMe.txt b/native/MsgHook/ReadMe.txt deleted file mode 100644 index 4420318..0000000 --- a/native/MsgHook/ReadMe.txt +++ /dev/null @@ -1,48 +0,0 @@ -======================================================================== - DYNAMIC LINK LIBRARY : MsgHook Project Overview -======================================================================== - -AppWizard has created this MsgHook DLL for you. - -This file contains a summary of what you will find in each of the files that -make up your MsgHook application. - - -MsgHook.vcxproj - This is the main project file for VC++ projects generated using an Application Wizard. - It contains information about the version of Visual C++ that generated the file, and - information about the platforms, configurations, and project features selected with the - Application Wizard. - -MsgHook.vcxproj.filters - This is the filters file for VC++ projects generated using an Application Wizard. - It contains information about the association between the files in your project - and the filters. This association is used in the IDE to show grouping of files with - similar extensions under a specific node (for e.g. ".cpp" files are associated with the - "Source Files" filter). - -MsgHook.cpp - This is the main DLL source file. - - When created, this DLL does not export any symbols. As a result, it - will not produce a .lib file when it is built. If you wish this project - to be a project dependency of some other project, you will either need to - add code to export some symbols from the DLL so that an export library - will be produced, or you can set the Ignore Input Library property to Yes - on the General propert page of the Linker folder in the project's Property - Pages dialog box. - -///////////////////////////////////////////////////////////////////////////// -Other standard files: - -StdAfx.h, StdAfx.cpp - These files are used to build a precompiled header (PCH) file - named MsgHook.pch and a precompiled types file named StdAfx.obj. - -///////////////////////////////////////////////////////////////////////////// -Other notes: - -AppWizard uses "TODO:" comments to indicate parts of the source code you -should add to or customize. - -///////////////////////////////////////////////////////////////////////////// diff --git a/native/MsgHook/ResExtract.h b/native/MsgHook/ResExtract.h deleted file mode 100644 index e7662ce..0000000 --- a/native/MsgHook/ResExtract.h +++ /dev/null @@ -1,86 +0,0 @@ -//This function will extract a binary resource. -// -//IDR_SETMH64 BINARY MOVEABLE PURE "..\\SetMsgHook\\bin\\SetMsgHook64.exe" -//IDR_SETMH32 BINARY MOVEABLE PURE "..\\SetMsgHook\\bin\\SetMsgHook32.exe" - -#include "stdafx.h" - -void ExtractResource(const WORD nID, LPCTSTR szFilename) -{ - const HINSTANCE hInstance = (HINSTANCE)pData->g_hInstance;//GetModuleHandle(NULL); - HRSRC hResource = FindResource(hInstance, MAKEINTRESOURCE(nID), _T("BINARY"));// _ASSERTE(hResource); - if (hResource == NULL) // no resource found. - { - //MessageBoxA(0, "error, no resource found", "error", 0); - printf("error, resource %d not found\n", nID); - return; - } - HGLOBAL hFileResource = LoadResource(hInstance, hResource);// _ASSERTE(hFileResource); - LPVOID lpFile = LockResource(hFileResource); - - DWORD dwSize = SizeofResource(hInstance, hResource); - - // Open the file and filemap - HANDLE hFile = CreateFile(szFilename, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - HANDLE hFilemap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, dwSize, NULL); - - // Get a pointer to write to - LPVOID lpBaseAddress = MapViewOfFile(hFilemap, FILE_MAP_WRITE, 0, 0, 0); - - // Write the file - CopyMemory(lpBaseAddress, lpFile, dwSize); - - // Unmap the file and close the handles - UnmapViewOfFile(lpBaseAddress); - CloseHandle(hFilemap); - CloseHandle(hFile); - -} - -void RunResource(const WORD nID, LPWSTR params) -{ - TCHAR tmpFilename[500]; - TCHAR tmpPath[500]; - GetTempPath(500, tmpPath); - if (GetTempFileName(tmpPath, _T(""), 0, tmpFilename) == 0) - { - MessageBox(0,_T("Error getting temp file name"), _T("Error"), 0); - return; - } - - ExtractResource(nID, tmpFilename); - //MessageBox(0, tmpFilename, _T("tmp file2"), 0); - - STARTUPINFO si; - ZeroMemory( &si, sizeof(si) ); - si.cb = sizeof(si); - - PROCESS_INFORMATION pi; - ZeroMemory( &pi, sizeof(pi) ); - - si.wShowWindow = SW_MINIMIZE; - - // Start the child process. - if(!CreateProcess(tmpFilename, // No module name (use command line) - params, // Command line - NULL, // Process handle not inheritable - NULL, // Thread handle not inheritable - FALSE, // Set handle inheritance to FALSE - 0, // No creation flags - NULL, // Use parent's environment block - NULL, // Use parent's starting directory - &si, // Pointer to STARTUPINFO structure - &pi )) // Pointer to PROCESS_INFORMATION structure - { - MessageBox(0, _T("CreateProcess failed"), _T("error"), 0); - printf( "CreateProcess failed (%d).\n", GetLastError() ); - return; - } - //MessageBox(0, tmpFilename, _T("tmp file3"), 0); - - // Wait until child process exits. - //WaitForSingleObject( pi.hProcess, INFINITE ); - // Close process and thread handles. - //CloseHandle( pi.hProcess ); - //CloseHandle( pi.hThread ); -} \ No newline at end of file diff --git a/native/MsgHook/bin/MsgHook32.dll b/native/MsgHook/bin/MsgHook32.dll deleted file mode 100644 index e459504..0000000 Binary files a/native/MsgHook/bin/MsgHook32.dll and /dev/null differ diff --git a/native/MsgHook/bin/MsgHook64.dll b/native/MsgHook/bin/MsgHook64.dll deleted file mode 100644 index c97476e..0000000 Binary files a/native/MsgHook/bin/MsgHook64.dll and /dev/null differ diff --git a/native/MsgHook/build.bat b/native/MsgHook/build.bat deleted file mode 100644 index 626076c..0000000 --- a/native/MsgHook/build.bat +++ /dev/null @@ -1,6 +0,0 @@ -REM set path=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin;%path% - -%WinDir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /p:configuration=release /p:platform=x64 %* -%WinDir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /p:configuration=release /p:platform=win32 %* - -pause \ No newline at end of file diff --git a/native/MsgHook/dllmain.cpp b/native/MsgHook/dllmain.cpp deleted file mode 100644 index f9560c6..0000000 --- a/native/MsgHook/dllmain.cpp +++ /dev/null @@ -1,61 +0,0 @@ -// dllmain.cpp : Defines the entry point for the DLL application. -#include "stdafx.h" - -HANDLE hMappedFile; -GLOBALDATA* pData; -bool bStartingProcess = false; - - -BOOL APIENTRY DllMain( HMODULE hModule, - DWORD ul_reason_for_call, - LPVOID lpReserved - ) -{ - switch (ul_reason_for_call) - { - case DLL_PROCESS_ATTACH: - { - //printf("debug DLL_PROCESS_ATTACH hModule: %ld\n", (long)hModule); - TCHAR szBaseName[_MAX_FNAME], szTmp[_MAX_FNAME]; - memset((void *)&szBaseName, '\0', sizeof(TCHAR) * _MAX_FNAME); - - if (GetModuleBaseName(GetCurrentProcess(), (HMODULE)hModule, szTmp, sizeof(szTmp)))// compute MMF-filename from current module base name, uses Psapi - _wsplitpath_s(szTmp, NULL, NULL, szBaseName, _MAX_FNAME, NULL, NULL, NULL, NULL); - //_wsplitpath(szTmp, NULL, NULL, szBaseName, NULL); - - wcscat_s(szBaseName, TEXT("MsgHookSharedMem")); // add specifier string - if (IsCurrentProcess64Bit()) - wcscat_s(szBaseName, TEXT("64")); // add bit specifier - else - wcscat_s(szBaseName, TEXT("32")); // add bit specifier - - hMappedFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(GLOBALDATA), szBaseName); - pData = (GLOBALDATA*)MapViewOfFile(hMappedFile, FILE_MAP_WRITE, 0, 0, 0); - bStartingProcess = (hMappedFile != NULL) && (GetLastError() != ERROR_ALREADY_EXISTS); - - if(bStartingProcess) // if the MMF doesn't exist, we have the first instance - { - pData->g_hInstance = hModule; // so set the instance handle - pData->g_hWnd = NULL; // and initialize the other handles - pData->g_CwpHook = NULL; - pData->g_MsgHook = NULL; - pData->g_CwpHookProc = NULL; - } - else - { - //open - hMappedFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, szBaseName); - pData = (GLOBALDATA*)MapViewOfFile(hMappedFile, FILE_MAP_ALL_ACCESS, 0, 0, 0); - } - DisableThreadLibraryCalls((HMODULE)hModule); - } - break; - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - case DLL_PROCESS_DETACH: - CloseHandle(hMappedFile); // on detaching the DLL, close the MMF - break; - } - return TRUE; -} - diff --git a/native/MsgHook/org_synthuse_MsgHook.cpp b/native/MsgHook/org_synthuse_MsgHook.cpp deleted file mode 100644 index b851c18..0000000 --- a/native/MsgHook/org_synthuse_MsgHook.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright 2014, Synthuse.org - * Released under the Apache Version 2.0 License. - * - * last modified by ejakubowski7@gmail.com -*/ - -#include "stdafx.h" -#include "org_synthuse_MsgHook.h" - -/* - * Class: org_synthuse_MsgHook - * Method: initialize - * Signature: (Ljava/lang/String;Ljava/lang/String;)Z - */ -JNIEXPORT jboolean JNICALL Java_org_synthuse_MsgHook_initialize(JNIEnv *env, jobject obj, jstring jdll32bitname, jstring jdll64bitname) -{ - const char *tdll32bitname = env->GetStringUTFChars(jdll32bitname, 0);//convert string - - memset((void *)&dll32bitName, '\0', sizeof(TCHAR) * MAX_TEST_SIZE); // set TCHAR array to all 0 - int tstrLen = MultiByteToWideChar(CP_UTF8, 0, tdll32bitname, (int)strlen(tdll32bitname), NULL, 0); //get t len - MultiByteToWideChar(CP_UTF8, 0, tdll32bitname, (int)strlen(tdll32bitname), dll32bitName, tstrLen); // convert char to tchar - - env->ReleaseStringUTFChars(jdll32bitname, tdll32bitname); //release string - - const char *tdll64bitname = env->GetStringUTFChars(jdll64bitname, 0);//convert string - - memset((void *)&dll64bitName, '\0', sizeof(TCHAR) * MAX_TEST_SIZE); // set TCHAR array to all 0 - tstrLen = MultiByteToWideChar(CP_UTF8, 0, tdll64bitname, (int)strlen(tdll64bitname), NULL, 0); //get t len - MultiByteToWideChar(CP_UTF8, 0, tdll64bitname, (int)strlen(tdll64bitname), dll64bitName, tstrLen); // convert char to tchar - - env->ReleaseStringUTFChars(jdll64bitname, tdll64bitname); //release string - return true; -} - -/* - * Class: org_synthuse_MsgHook - * Method: createMsgHookWindow - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_org_synthuse_MsgHook_createMsgHookWindow(JNIEnv *env, jobject obj) -{ - CreateMsgHookWindow(NULL); - return true; -} - -/* - * Class: org_synthuse_MsgHook - * Method: setMsgHookWindowTargetHwnd - * Signature: (I)Z - */ -JNIEXPORT jboolean JNICALL Java_org_synthuse_MsgHook_setMsgHookWindowTargetHwnd(JNIEnv *env, jobject obj, jint jhwnd) -{ - _stprintf_s(targetHwndStr, _T("%ld"), (long)jhwnd); - return true; -} - -/* - * Class: org_synthuse_MsgHook - * Method: setMsgHookWindowTargetClass - * Signature: (Ljava/lang/String;)Z - */ -JNIEXPORT jboolean JNICALL Java_org_synthuse_MsgHook_setMsgHookWindowTargetClass(JNIEnv *env, jobject obj, jstring jclassname) -{ - const char *classname = env->GetStringUTFChars(jclassname, 0);//convert string - - memset((void *)&targetClassname, '\0', sizeof(TCHAR) * MAX_TEST_SIZE); // set TCHAR array to all 0 - int tstrLen = MultiByteToWideChar(CP_UTF8, 0, classname, (int)strlen(classname), NULL, 0); //get t len - MultiByteToWideChar(CP_UTF8, 0, classname, (int)strlen(classname), targetClassname, tstrLen); // convert char to tchar - - env->ReleaseStringUTFChars(jclassname, classname); //release string - return true; -} - -JNIEXPORT jboolean JNICALL Java_org_synthuse_MsgHook_setMsgHookWindowTargetPid(JNIEnv *env, jobject obj, jint jpid) -{ - _stprintf_s(targetProcessId, _T("%ld"), (long)jpid); - return true; -} - -/* - * Class: org_synthuse_MsgHook - * Method: setMessageHook - * Signature: (JJ)Z - */ -//JNIEXPORT jboolean JNICALL Java_org_synthuse_MsgHook_setMessageHook(JNIEnv *env, jobject obj, jlong jhWnd, jlong jthreadId) -JNIEXPORT jboolean JNICALL Java_org_synthuse_MsgHook_setMessageHook(JNIEnv *env, jobject obj, jint jhWnd, jint jthreadId) -{ - return SetMsgHook((HWND)jhWnd, (DWORD)jthreadId); -} - -/* - * Class: org_synthuse_MsgHook - * Method: removeMessageHook - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_org_synthuse_MsgHook_removeMessageHook(JNIEnv *env, jobject obj) -{ - return RemoveHook(); -} \ No newline at end of file diff --git a/native/MsgHook/org_synthuse_MsgHook.h b/native/MsgHook/org_synthuse_MsgHook.h deleted file mode 100644 index 5bd9535..0000000 --- a/native/MsgHook/org_synthuse_MsgHook.h +++ /dev/null @@ -1,61 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class org_synthuse_MsgHook */ - -#ifndef _Included_org_synthuse_MsgHook -#define _Included_org_synthuse_MsgHook -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: org_synthuse_MsgHook - * Method: initialize - * Signature: (Ljava/lang/String;Ljava/lang/String;)Z - */ -JNIEXPORT jboolean JNICALL Java_org_synthuse_MsgHook_initialize - (JNIEnv *, jobject, jstring, jstring); - -/* - * Class: org_synthuse_MsgHook - * Method: createMsgHookWindow - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_org_synthuse_MsgHook_createMsgHookWindow - (JNIEnv *, jobject); - -/* - * Class: org_synthuse_MsgHook - * Method: setMsgHookWindowTargetHwnd - * Signature: (I)Z - */ -JNIEXPORT jboolean JNICALL Java_org_synthuse_MsgHook_setMsgHookWindowTargetHwnd - (JNIEnv *, jobject, jint); - -/* - * Class: org_synthuse_MsgHook - * Method: setMsgHookWindowTargetPid - * Signature: (I)Z - */ -JNIEXPORT jboolean JNICALL Java_org_synthuse_MsgHook_setMsgHookWindowTargetPid - (JNIEnv *, jobject, jint); - -/* - * Class: org_synthuse_MsgHook - * Method: setMessageHook - * Signature: (II)Z - */ -JNIEXPORT jboolean JNICALL Java_org_synthuse_MsgHook_setMessageHook - (JNIEnv *, jobject, jint, jint); - -/* - * Class: org_synthuse_MsgHook - * Method: removeMessageHook - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_org_synthuse_MsgHook_removeMessageHook - (JNIEnv *, jobject); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/native/MsgHook/resource.h b/native/MsgHook/resource.h deleted file mode 100644 index 24aed16..0000000 Binary files a/native/MsgHook/resource.h and /dev/null differ diff --git a/native/MsgHook/small.ico b/native/MsgHook/small.ico deleted file mode 100644 index d551aa3..0000000 Binary files a/native/MsgHook/small.ico and /dev/null differ diff --git a/native/MsgHook/stdafx.cpp b/native/MsgHook/stdafx.cpp deleted file mode 100644 index 2d8db73..0000000 --- a/native/MsgHook/stdafx.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// stdafx.cpp : source file that includes just the standard includes -// MsgHook.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 \ No newline at end of file diff --git a/native/MsgHook/stdafx.h b/native/MsgHook/stdafx.h deleted file mode 100644 index 055ffbf..0000000 --- a/native/MsgHook/stdafx.h +++ /dev/null @@ -1,74 +0,0 @@ -// stdafx.h : include file for standard system include files, -// or project specific include files that are used frequently, but -// are changed infrequently -// - -#pragma once - -#include "targetver.h" - -#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers -// Windows Header Files: -#include -#include -#include -#include -#include -#include -#include //CreateToolhelp32Snapshot - -#pragma comment( lib, "psapi.lib" ) -//#pragma comment( lib, "kernel32.lib" ) - -// TODO: reference additional headers your program requires here - -typedef struct -{ - HWND hWnd; - int nCode; - DWORD dwHookType; - WPARAM wParam; - LPARAM lParam; - TCHAR wParamStr[25]; - TCHAR lParamStr[25]; -}HEVENT; - -typedef struct -{ - HHOOK g_CwpHook; - HHOOK g_MsgHook; - //HHOOK g_hHook; - HWND g_hWnd; - HANDLE g_hInstance; - HOOKPROC g_CwpHookProc; -}GLOBALDATA; - -#ifndef GLOBAL_VARS_H // header guards -#define GLOBAL_VARS_H - -extern "C" __declspec(dllexport) void CreateMsgHookWindow(LPTSTR lpCmdLine); -extern "C" __declspec(dllexport) BOOL SetCustomMsgHookDll(const TCHAR * hookDll, const char * hookDllProcName); -extern "C" __declspec(dllexport) BOOL SetMsgHook(HWND callerHWnd, DWORD threadId); -extern "C" __declspec(dllexport) HHOOK GetCurrentHookHandle(); -extern "C" __declspec(dllexport) void SetGlobalDLLInstance(HANDLE dllInstance); -extern "C" __declspec(dllexport) BOOL RemoveHook(); -extern "C" __declspec(dllexport) BOOL IsCurrentProcess64Bit(); -extern "C" __declspec(dllexport) BOOL IsProcess64Bit(DWORD procId); -extern "C" __declspec(dllexport) DWORD GetProcessMainThreadId(DWORD procId); - -//void ExtractResource(const WORD nID, LPCTSTR szFilename); - -//Global variables , remember not to initialize here -extern HANDLE hMappedFile; -extern GLOBALDATA* pData; -extern bool bStartingProcess; - -#define MAX_TEST_SIZE 100 -extern TCHAR targetHwndStr[MAX_TEST_SIZE]; -extern TCHAR targetProcessId[MAX_TEST_SIZE]; -extern TCHAR targetClassname[MAX_TEST_SIZE]; -extern TCHAR dll32bitName[500]; -extern TCHAR dll64bitName[500]; -extern char dllProcName[500]; - -#endif \ No newline at end of file diff --git a/native/MsgHook/targetver.h b/native/MsgHook/targetver.h deleted file mode 100644 index 87c0086..0000000 --- a/native/MsgHook/targetver.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -// Including SDKDDKVer.h defines the highest available Windows platform. - -// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and -// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. - -#include diff --git a/native/SetMsgHook/MsgHook.h b/native/SetMsgHook/MsgHook.h deleted file mode 100644 index 6a33d5c..0000000 --- a/native/SetMsgHook/MsgHook.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright 2014, Synthuse.org - * Released under the Apache Version 2.0 License. - * - * last modified by ejakubowski7@gmail.com -*/ - -#include - -typedef struct -{ - HHOOK g_CwpHook; - HHOOK g_MsgHook; - //HHOOK g_hHook; - HWND g_hWnd; - HANDLE g_hInstance; - HOOKPROC g_CwpHookProc; -}GLOBALDATA; - -//#define MSGHOOKER_FILE TEXT("MsgHook.dll") -TCHAR MSGHOOK_DLL_NAME[MAX_NAME_SIZE] = _T("MsgHook.dll"); - -HINSTANCE msgHookDll; - -//void CreateMsgHookWindow(LPTSTR lpCmdLine) -typedef VOID (* CREATEMSGHOOKWINDOW)(LPTSTR); -CREATEMSGHOOKWINDOW CreateMsgHookWindow; - -//BOOL SetCustomMsgHookDll(const TCHAR * hookDll, const char * hookDllProcName) -typedef BOOL (* SETCUSTOMMSGHOOKDLL)(LPCTSTR, LPCSTR); -SETCUSTOMMSGHOOKDLL SetCustomMsgHookDll; - -//BOOL SetMsgHook(HWND callerHWnd, DWORD threadId) -typedef BOOL (* SETMSGHOOK)(HWND, DWORD); -SETMSGHOOK SetMsgHook; - -//HHOOK GetCurrentHookHandle() -typedef HHOOK (* GETCURRENTHOOKHANDLE)(VOID); -GETCURRENTHOOKHANDLE GetCurrentHookHandle; - -//void SetGlobalDLLInstance(HANDLE dllInstance) -typedef VOID (* SETGLOBALDLLINSTANCE)(HANDLE); -SETGLOBALDLLINSTANCE SetGlobalDLLInstance; - -//BOOL RemoveHook() -typedef BOOL (* REMOVEHOOK)(VOID); -REMOVEHOOK RemoveHook; - -// DWORD GetProcessMainThreadId(DWORD procId) -typedef DWORD (* GETPROCESSMAINTHREADID)(DWORD); -GETPROCESSMAINTHREADID GetProcessMainThreadId; - - -typedef struct -{ - HWND hWnd; - int nCode; - DWORD dwHookType; - WPARAM wParam; - LPARAM lParam; - TCHAR wParamStr[25]; - TCHAR lParamStr[25]; -}HEVENT; - -/* -typedef struct { - DWORD vkCode; - DWORD scanCode; - DWORD flags; - DWORD time; - ULONG_PTR dwExtraInfo; -} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT; -*/ - -void MsgHook_CreateMsgHookWindow(LPTSTR args) -{ - msgHookDll = LoadLibrary(MSGHOOK_DLL_NAME); - if (msgHookDll != NULL) - { - CreateMsgHookWindow = (CREATEMSGHOOKWINDOW)GetProcAddress(msgHookDll, "CreateMsgHookWindow"); - SetGlobalDLLInstance = (SETGLOBALDLLINSTANCE)GetProcAddress(msgHookDll, "SetGlobalDLLInstance"); - if (CreateMsgHookWindow) - { - SetGlobalDLLInstance(msgHookDll); - CreateMsgHookWindow(args); - } - } - if (msgHookDll != NULL) - FreeLibrary(msgHookDll); -} - -BOOL MsgHook_SetMsgHook(HWND hw, int threadId) -{ - msgHookDll = LoadLibrary(MSGHOOK_DLL_NAME); - if (msgHookDll != NULL) - { - SetMsgHook = (SETMSGHOOK)GetProcAddress(msgHookDll, "SetMsgHook"); - GetCurrentHookHandle = (GETCURRENTHOOKHANDLE)GetProcAddress(msgHookDll, "GetCurrentHookHandle"); - SetGlobalDLLInstance = (SETGLOBALDLLINSTANCE)GetProcAddress(msgHookDll, "SetGlobalDLLInstance"); - RemoveHook = (REMOVEHOOK)GetProcAddress(msgHookDll, "RemoveHook"); - if (SetMsgHook) - { - //printf("LoadLibrary MSGHOOK %ld\n", (long)msgHookDll); - SetGlobalDLLInstance(msgHookDll); - return SetMsgHook(hw, threadId); - } - } - return false; -} - -void MsgHook_RemoveHook() -{ - if (RemoveHook) - RemoveHook(); - - if (msgHookDll != NULL) - FreeLibrary(msgHookDll); -} - -DWORD MsgHook_GetProcessMainThreadId(DWORD procId) -{ - msgHookDll = LoadLibrary(MSGHOOK_DLL_NAME); - if (msgHookDll != NULL) - { - GetProcessMainThreadId = (GETPROCESSMAINTHREADID)GetProcAddress(msgHookDll, "GetProcessMainThreadId"); - if (GetProcessMainThreadId) - { - return GetProcessMainThreadId(procId); - } - } - printf("error, failed loading library"); - return 0; -} diff --git a/native/SetMsgHook/ReadMe.txt b/native/SetMsgHook/ReadMe.txt deleted file mode 100644 index 48ecfa9..0000000 --- a/native/SetMsgHook/ReadMe.txt +++ /dev/null @@ -1,40 +0,0 @@ -======================================================================== - CONSOLE APPLICATION : SetMsgHook Project Overview -======================================================================== - -AppWizard has created this SetMsgHook application for you. - -This file contains a summary of what you will find in each of the files that -make up your SetMsgHook application. - - -SetMsgHook.vcxproj - This is the main project file for VC++ projects generated using an Application Wizard. - It contains information about the version of Visual C++ that generated the file, and - information about the platforms, configurations, and project features selected with the - Application Wizard. - -SetMsgHook.vcxproj.filters - This is the filters file for VC++ projects generated using an Application Wizard. - It contains information about the association between the files in your project - and the filters. This association is used in the IDE to show grouping of files with - similar extensions under a specific node (for e.g. ".cpp" files are associated with the - "Source Files" filter). - -SetMsgHook.cpp - This is the main application source file. - -///////////////////////////////////////////////////////////////////////////// -Other standard files: - -StdAfx.h, StdAfx.cpp - These files are used to build a precompiled header (PCH) file - named SetMsgHook.pch and a precompiled types file named StdAfx.obj. - -///////////////////////////////////////////////////////////////////////////// -Other notes: - -AppWizard uses "TODO:" comments to indicate parts of the source code you -should add to or customize. - -///////////////////////////////////////////////////////////////////////////// diff --git a/native/SetMsgHook/SetMsgHook.cpp b/native/SetMsgHook/SetMsgHook.cpp deleted file mode 100644 index bcb9f57..0000000 --- a/native/SetMsgHook/SetMsgHook.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2014, Synthuse.org - * Released under the Apache Version 2.0 License. - * - * last modified by ejakubowski7@gmail.com -*/ -// SetMsgHook.cpp : Defines the entry point for the console application. -// - -#include "stdafx.h" -#include "MsgHook.h" - - -int _tmain(int argc, _TCHAR* argv[]) -{ - if (argc == 1) //no args passed, show MsgHook Viewer gui - { - MsgHook_CreateMsgHookWindow(NULL); - return 0; - } - - HWND hookHwnd = NULL; - long procId = 0; - TCHAR *stopStr; - - for (int i = 1 ; i < argc ; i++) - { - if (_tcscmp(argv[i], _T("?")) == 0 || _tcscmp(argv[i], _T("-?")) == 0 || argc == 3 || argc > 4) - { - printf("SetMsgHook version 1.0 by Edward Jakubowski \n\n"); - printf("Usage: SetMsgHook.exe [(MSG_HOOK_DLL) (MSG_HOOK_HWND_OR_ZERO) (TARGET_PID)] [MSG_HOOK_DLL] [?] \n\n"); - printf(" Additional Notes:\n"); - printf(" Message Hook Viewer Gui - To open the gui you must provide the path to the msg hook dll as the "); - printf("only argument when running SetMsgHook.exe. Also setting the (MSG_HOOK_HWND) argument to 0 (zero) "); - printf("will start the gui and message hook on the given Process Id.\n\n"); - HWND currentHwnd = FindWindow(_T("MSGHOOKVIEW"), NULL); - printf(" Current MSG_HOOK_HWND: %ld\n", (long)currentHwnd); - return 0; - } - if (i == 1) - _tcsncpy_s(MSGHOOK_DLL_NAME, MAX_NAME_SIZE, argv[i], _TRUNCATE); - if (i == 2) - hookHwnd = (HWND)_tcstol(argv[i], &stopStr, 10); - if (i == 3) - procId = (long)_tcstol(argv[i], &stopStr, 10); - } - - if (argc == 2) //one arg passed (dll), show MsgHook Viewer gui - { - printf("Starting msg hook viewer..."); - MsgHook_CreateMsgHookWindow(NULL); - return 0; - } - if (argc == 4 && hookHwnd == 0) - { - printf("Starting msg hook viewer on pid %ld...", (long)procId); - TCHAR tmp[100]; - _stprintf_s(tmp, _T("%ld"), (long)procId); - MsgHook_CreateMsgHookWindow(tmp); - //_getch(); - return 0; - } - - char tmp[MAX_NAME_SIZE]; - size_t convertedCnt = 0; - wcstombs_s(&convertedCnt, tmp, MAX_NAME_SIZE, MSGHOOK_DLL_NAME, _TRUNCATE); - printf("MsgHook DLL: %s, HWND: %ld, PID: %ld", tmp, (long)hookHwnd, procId); - DWORD threadId = MsgHook_GetProcessMainThreadId(procId); - printf(", ThreadId: %ld\n", (long)threadId); - - if (MsgHook_SetMsgHook(hookHwnd, threadId)) - printf("Hook successfully initialized\n"); - else - { - printf("Hook failed to initialize\n"); - return -1; - } - - //don't exit SetMsgHook until hooked process exits - HANDLE process = OpenProcess(SYNCHRONIZE, FALSE, procId); - while(WaitForSingleObject(process, 0) == WAIT_TIMEOUT) - { - Sleep(1000); //check once per second - if (GetCurrentHookHandle() == NULL) - { - printf("unhooked."); - break; - } - } - CloseHandle(process); - MsgHook_RemoveHook(); - - //_getch(); - printf("done."); - return 0; -} - diff --git a/native/SetMsgHook/SetMsgHook.vcxproj b/native/SetMsgHook/SetMsgHook.vcxproj deleted file mode 100644 index d9ee930..0000000 --- a/native/SetMsgHook/SetMsgHook.vcxproj +++ /dev/null @@ -1,169 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {34A73B55-8A93-4FB5-83CE-7759C1D23348} - Win32Proj - SetMsgHook - - - - Application - true - Unicode - - - Application - true - Unicode - - - Application - false - true - Unicode - - - Application - false - true - Unicode - - - - - - - - - - - - - - - - - - - true - - - true - - - false - - - false - - - - Use - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - - - Console - true - - - mkdir "$(ProjectDir)bin" -copy /Y "$(TargetPath)" "$(ProjectDir)bin\SetMsgHook$(PlatformArchitecture)$(TargetExt)" - - - - - Use - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - - - Console - true - - - mkdir "$(ProjectDir)bin" -copy /Y "$(TargetPath)" "$(ProjectDir)bin\SetMsgHook$(PlatformArchitecture)$(TargetExt)" - - - - - Level3 - Use - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - - - Console - true - true - true - - - mkdir "$(ProjectDir)bin" -copy /Y "$(TargetPath)" "$(ProjectDir)bin\SetMsgHook$(PlatformArchitecture)$(TargetExt)" - - - - - Level3 - Use - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - - - Console - true - true - true - - - mkdir "$(ProjectDir)bin" -copy /Y "$(TargetPath)" "$(ProjectDir)bin\SetMsgHook$(PlatformArchitecture)$(TargetExt)" - - - - - - - - - - - - - - Create - Create - Create - Create - - - - - - \ No newline at end of file diff --git a/native/SetMsgHook/SetMsgHook.vcxproj.filters b/native/SetMsgHook/SetMsgHook.vcxproj.filters deleted file mode 100644 index ff22488..0000000 --- a/native/SetMsgHook/SetMsgHook.vcxproj.filters +++ /dev/null @@ -1,39 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/native/SetMsgHook/SetMsgHook.vcxproj.user b/native/SetMsgHook/SetMsgHook.vcxproj.user deleted file mode 100644 index ace9a86..0000000 --- a/native/SetMsgHook/SetMsgHook.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/native/SetMsgHook/bin/SetMsgHook32.exe b/native/SetMsgHook/bin/SetMsgHook32.exe deleted file mode 100644 index 9cf45b1..0000000 Binary files a/native/SetMsgHook/bin/SetMsgHook32.exe and /dev/null differ diff --git a/native/SetMsgHook/bin/SetMsgHook64.exe b/native/SetMsgHook/bin/SetMsgHook64.exe deleted file mode 100644 index aa0b553..0000000 Binary files a/native/SetMsgHook/bin/SetMsgHook64.exe and /dev/null differ diff --git a/native/SetMsgHook/build.bat b/native/SetMsgHook/build.bat deleted file mode 100644 index 626076c..0000000 --- a/native/SetMsgHook/build.bat +++ /dev/null @@ -1,6 +0,0 @@ -REM set path=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin;%path% - -%WinDir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /p:configuration=release /p:platform=x64 %* -%WinDir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /p:configuration=release /p:platform=win32 %* - -pause \ No newline at end of file diff --git a/native/SetMsgHook/stdafx.cpp b/native/SetMsgHook/stdafx.cpp deleted file mode 100644 index 77e5e87..0000000 --- a/native/SetMsgHook/stdafx.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// stdafx.cpp : source file that includes just the standard includes -// SetMsgHook.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 diff --git a/native/SetMsgHook/stdafx.h b/native/SetMsgHook/stdafx.h deleted file mode 100644 index fe28c4b..0000000 --- a/native/SetMsgHook/stdafx.h +++ /dev/null @@ -1,23 +0,0 @@ -// stdafx.h : include file for standard system include files, -// or project specific include files that are used frequently, but -// are changed infrequently -// - -#pragma once - -#include "targetver.h" - -#include -#include -#include - - -// TODO: reference additional headers your program requires here - -#ifndef GLOBAL_VARS_H // header guards -#define GLOBAL_VARS_H - -#define MAX_NAME_SIZE 500 -extern TCHAR MSGHOOK_DLL_NAME[MAX_NAME_SIZE]; - -#endif \ No newline at end of file diff --git a/native/SetMsgHook/targetver.h b/native/SetMsgHook/targetver.h deleted file mode 100644 index 87c0086..0000000 --- a/native/SetMsgHook/targetver.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -// Including SDKDDKVer.h defines the highest available Windows platform. - -// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and -// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. - -#include diff --git a/native/uiabridge.sln b/native/uiabridge.sln deleted file mode 100644 index 88b543c..0000000 --- a/native/uiabridge.sln +++ /dev/null @@ -1,36 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "uiabridge", "uiabridge\uiabridge.vcxproj", "{BAC1B079-7B87-4396-B17F-91A86DF1AE29}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "uiabtest", "uiabtest\uiabtest.vcxproj", "{7958D1B7-F169-40FA-A7A0-10E8E0F90CDA}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {BAC1B079-7B87-4396-B17F-91A86DF1AE29}.Debug|Win32.ActiveCfg = Debug|Win32 - {BAC1B079-7B87-4396-B17F-91A86DF1AE29}.Debug|Win32.Build.0 = Debug|Win32 - {BAC1B079-7B87-4396-B17F-91A86DF1AE29}.Debug|x64.ActiveCfg = Debug|x64 - {BAC1B079-7B87-4396-B17F-91A86DF1AE29}.Debug|x64.Build.0 = Debug|x64 - {BAC1B079-7B87-4396-B17F-91A86DF1AE29}.Release|Win32.ActiveCfg = Release|Win32 - {BAC1B079-7B87-4396-B17F-91A86DF1AE29}.Release|Win32.Build.0 = Release|Win32 - {BAC1B079-7B87-4396-B17F-91A86DF1AE29}.Release|x64.ActiveCfg = Release|x64 - {BAC1B079-7B87-4396-B17F-91A86DF1AE29}.Release|x64.Build.0 = Release|x64 - {7958D1B7-F169-40FA-A7A0-10E8E0F90CDA}.Debug|Win32.ActiveCfg = Debug|Win32 - {7958D1B7-F169-40FA-A7A0-10E8E0F90CDA}.Debug|Win32.Build.0 = Debug|Win32 - {7958D1B7-F169-40FA-A7A0-10E8E0F90CDA}.Debug|x64.ActiveCfg = Debug|x64 - {7958D1B7-F169-40FA-A7A0-10E8E0F90CDA}.Debug|x64.Build.0 = Debug|x64 - {7958D1B7-F169-40FA-A7A0-10E8E0F90CDA}.Release|Win32.ActiveCfg = Release|Win32 - {7958D1B7-F169-40FA-A7A0-10E8E0F90CDA}.Release|Win32.Build.0 = Release|Win32 - {7958D1B7-F169-40FA-A7A0-10E8E0F90CDA}.Release|x64.ActiveCfg = Release|x64 - {7958D1B7-F169-40FA-A7A0-10E8E0F90CDA}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/native/uiabridge.suo b/native/uiabridge.suo deleted file mode 100644 index 0c2f744..0000000 Binary files a/native/uiabridge.suo and /dev/null differ diff --git a/native/uiabridge/AssemblyInfo.cpp b/native/uiabridge/AssemblyInfo.cpp deleted file mode 100644 index 5ef1b63..0000000 --- a/native/uiabridge/AssemblyInfo.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include "stdafx.h" - -using namespace System; -using namespace System::Reflection; -using namespace System::Runtime::CompilerServices; -using namespace System::Runtime::InteropServices; -using namespace System::Security::Permissions; - -// -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -// -[assembly:AssemblyTitleAttribute("uiabridge")]; -[assembly:AssemblyDescriptionAttribute("")]; -[assembly:AssemblyConfigurationAttribute("")]; -[assembly:AssemblyCompanyAttribute("na")]; -[assembly:AssemblyProductAttribute("uiabridge")]; -[assembly:AssemblyCopyrightAttribute("Copyright (c) na 2014")]; -[assembly:AssemblyTrademarkAttribute("")]; -[assembly:AssemblyCultureAttribute("")]; - -// -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the value or you can default the Revision and Build Numbers -// by using the '*' as shown below: - -[assembly:AssemblyVersionAttribute("1.0.*")]; - -[assembly:ComVisible(false)]; - -[assembly:CLSCompliantAttribute(true)]; - -[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/native/uiabridge/Global.cpp b/native/uiabridge/Global.cpp deleted file mode 100644 index 2523535..0000000 --- a/native/uiabridge/Global.cpp +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2014, Synthuse.org - * Released under the Apache Version 2.0 License. - * - * last modified by ejakubowski7@gmail.com -*/ -#include "stdafx.h" -#include "Global.h" -#include "uiabridge.h" -using namespace uiabridge; diff --git a/native/uiabridge/Global.h b/native/uiabridge/Global.h deleted file mode 100644 index c486cd8..0000000 --- a/native/uiabridge/Global.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2014, Synthuse.org - * Released under the Apache Version 2.0 License. - * - * last modified by ejakubowski7@gmail.com -*/ -#pragma once -#include "uiabridge.h" -using namespace uiabridge; -namespace Globals -{ - using namespace System; - - public ref class Global - { - public: - static AutomationBridge ^AUTO_BRIDGE = nullptr; - }; - -} - diff --git a/native/uiabridge/ReadMe.txt b/native/uiabridge/ReadMe.txt deleted file mode 100644 index bba57e9..0000000 --- a/native/uiabridge/ReadMe.txt +++ /dev/null @@ -1,8 +0,0 @@ -======================================================================== - DYNAMIC LINK LIBRARY : uiabridge Project Overview -======================================================================== -Created By Edward Jakubowski ejakubowski7@gmail.com - -Description: -This is a bridge for java to access .net 4 UI Automation libraries. This -library enables Synthuse to access and automate WinForms, WPF and Silverlight apps. \ No newline at end of file diff --git a/native/uiabridge/Stdafx.cpp b/native/uiabridge/Stdafx.cpp deleted file mode 100644 index c445b97..0000000 --- a/native/uiabridge/Stdafx.cpp +++ /dev/null @@ -1,6 +0,0 @@ -// stdafx.cpp : source file that includes just the standard includes -// uiabridge.pch will be the pre-compiled header -// stdafx.obj will contain the pre-compiled type information - -#include "stdafx.h" -#include \ No newline at end of file diff --git a/native/uiabridge/Stdafx.h b/native/uiabridge/Stdafx.h deleted file mode 100644 index 3cc4c24..0000000 --- a/native/uiabridge/Stdafx.h +++ /dev/null @@ -1,7 +0,0 @@ -// stdafx.h : include file for standard system include files, -// or project specific include files that are used frequently, -// but are changed infrequently - -#pragma once - - diff --git a/native/uiabridge/app.ico b/native/uiabridge/app.ico deleted file mode 100644 index 3a5525f..0000000 Binary files a/native/uiabridge/app.ico and /dev/null differ diff --git a/native/uiabridge/app.rc b/native/uiabridge/app.rc deleted file mode 100644 index eab4306..0000000 Binary files a/native/uiabridge/app.rc and /dev/null differ diff --git a/native/uiabridge/bin/uiabridge32.dll b/native/uiabridge/bin/uiabridge32.dll deleted file mode 100644 index 49b226e..0000000 Binary files a/native/uiabridge/bin/uiabridge32.dll and /dev/null differ diff --git a/native/uiabridge/bin/uiabridge64.dll b/native/uiabridge/bin/uiabridge64.dll deleted file mode 100644 index 629a52e..0000000 Binary files a/native/uiabridge/bin/uiabridge64.dll and /dev/null differ diff --git a/native/uiabridge/build.bat b/native/uiabridge/build.bat deleted file mode 100644 index 626076c..0000000 --- a/native/uiabridge/build.bat +++ /dev/null @@ -1,6 +0,0 @@ -REM set path=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin;%path% - -%WinDir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /p:configuration=release /p:platform=x64 %* -%WinDir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /p:configuration=release /p:platform=win32 %* - -pause \ No newline at end of file diff --git a/native/uiabridge/org_synthuse_UiaBridge.cpp b/native/uiabridge/org_synthuse_UiaBridge.cpp deleted file mode 100644 index edb266f..0000000 --- a/native/uiabridge/org_synthuse_UiaBridge.cpp +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright 2014, Synthuse.org - * Released under the Apache Version 2.0 License. - * - * last modified by ejakubowski7@gmail.com -*/ -#include "stdafx.h" -#include //using namespace msclr::interop; -#include "org_synthuse_UiaBridge.h" -#include "uiabridge.h" -#include "Global.h" - -using namespace System; -using namespace System::Windows::Automation; -using namespace msclr::interop; -using namespace Globals; -using namespace uiabridge; - - -/* - * Class: org_synthuse_UiaBridge - * Method: initialize - * Signature: (Ljava/lang/String;)V - */ -JNIEXPORT void JNICALL Java_org_synthuse_UiaBridge_initialize(JNIEnv *env, jobject obj, jstring jproperties) -{ - const char *properties = env->GetStringUTFChars(jproperties, 0);//convert string - Global::AUTO_BRIDGE = gcnew AutomationBridge(marshal_as(properties)); -} - -/* - * Class: org_synthuse_UiaBridge - * Method: shutdown - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_org_synthuse_UiaBridge_shutdown(JNIEnv *env, jobject obj) -{ -} - -/* - * Class: org_synthuse_UiaBridge - * Method: useCachedRequests - * Signature: (Z)V - */ -JNIEXPORT void JNICALL Java_org_synthuse_UiaBridge_useCachedRequests(JNIEnv *env, jobject obj, jboolean jcacheRequestsFlg) -{ - Global::AUTO_BRIDGE->useCachedRequests((bool)(jcacheRequestsFlg == JNI_TRUE)); -} - -/* - * Class: org_synthuse_UiaBridge - * Method: addEnumFilter - * Signature: (Ljava/lang/String;Ljava/lang/String;)I - */ -JNIEXPORT jint JNICALL Java_org_synthuse_UiaBridge_addEnumFilter(JNIEnv *env, jobject obj, jstring jpropertyName, jstring jpropertyValue) -{ - const char *propertyName = env->GetStringUTFChars(jpropertyValue, 0);//convert string - const char *propertyValue = env->GetStringUTFChars(jpropertyValue, 0);//convert string - return (jint)Global::AUTO_BRIDGE->addEnumFilter(marshal_as(propertyName), marshal_as(propertyValue)); -} - -/* - * Class: org_synthuse_UiaBridge - * Method: clearEnumFilters - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_org_synthuse_UiaBridge_clearEnumFilters(JNIEnv *env, jobject obj) -{ - Global::AUTO_BRIDGE->clearEnumFilters(); -} - -/* - * Class: org_synthuse_UiaBridge - * Method: enumWindowInfo - * Signature: (Ljava/lang/String;)[Ljava/lang/String; - */ -JNIEXPORT jobjectArray JNICALL Java_org_synthuse_UiaBridge_enumWindowInfo__Ljava_lang_String_2(JNIEnv *env, jobject obj, jstring jproperties) -{ - const char *properties = env->GetStringUTFChars(jproperties, 0);//convert string - array ^mwinInfo = Global::AUTO_BRIDGE->enumWindowInfo(marshal_as(properties)); - if (mwinInfo == nullptr) - return NULL; - //create result object array to the same size as the managed children Ids string array - jclass stringClass = env->FindClass("java/lang/String"); - jobjectArray results = env->NewObjectArray(mwinInfo->Length, stringClass, 0); - marshal_context context; //lets you marshal managed classes to unmanaged types - //char **childrenIds = new char *[mchildrenIds->Length]; - for(int i = 0 ; i < mwinInfo->Length ; i++) - { - //childrenIds[i] = (char *)context.marshal_as(mchildrenIds[i]); - //env->SetObjectArrayElement(results, i, env->GetStringUTFChars(childrenIds[i], 0) - env->SetObjectArrayElement(results, i, env->NewStringUTF(context.marshal_as(mwinInfo[i]))); - } - //delete[] childrenIds; - env->ReleaseStringUTFChars(jproperties, properties); //release string - return results; -} - -/* - * Class: org_synthuse_UiaBridge - * Method: enumWindowInfo - * Signature: (ILjava/lang/String;)[Ljava/lang/String; - */ -JNIEXPORT jobjectArray JNICALL Java_org_synthuse_UiaBridge_enumWindowInfo__ILjava_lang_String_2(JNIEnv *env, jobject obj, jint jwindowHandle, jstring jproperties) -{ - const char *properties = env->GetStringUTFChars(jproperties, 0);//convert string - array ^mwinInfo = Global::AUTO_BRIDGE->enumWindowInfo(System::IntPtr(jwindowHandle), marshal_as(properties)); - if (mwinInfo == nullptr) - return NULL; - //create result object array to the same size as the managed children Ids string array - jclass stringClass = env->FindClass("java/lang/String"); - jobjectArray results = env->NewObjectArray(mwinInfo->Length, stringClass, 0); - marshal_context context; //lets you marshal managed classes to unmanaged types - //char **childrenIds = new char *[mchildrenIds->Length]; - for(int i = 0 ; i < mwinInfo->Length ; i++) - { - //childrenIds[i] = (char *)context.marshal_as(mchildrenIds[i]); - //env->SetObjectArrayElement(results, i, env->GetStringUTFChars(childrenIds[i], 0) - env->SetObjectArrayElement(results, i, env->NewStringUTF(context.marshal_as(mwinInfo[i]))); - } - //delete[] childrenIds; - env->ReleaseStringUTFChars(jproperties, properties); //release string - return results; -} - -/* - * Class: org_synthuse_UiaBridge - * Method: getWindowInfo - * Signature: (IILjava/lang/String;)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_org_synthuse_UiaBridge_getWindowInfo__IILjava_lang_String_2(JNIEnv *env, jobject obj, jint jx, jint jy, jstring jproperties) -{ - const char *properties = env->GetStringUTFChars(jproperties, 0);//convert string - System::String ^mwinInfo = Global::AUTO_BRIDGE->getWindowInfo(jx, jy, marshal_as(properties)); - env->ReleaseStringUTFChars(jproperties, properties); //release string - marshal_context context; - return env->NewStringUTF(context.marshal_as(mwinInfo)); -} - -/* - * Class: org_synthuse_UiaBridge - * Method: getWindowInfo - * Signature: (ILjava/lang/String;)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_org_synthuse_UiaBridge_getWindowInfo__ILjava_lang_String_2(JNIEnv *env, jobject obj, jint jwindowHandle, jstring jproperties) -{ - const char *properties = env->GetStringUTFChars(jproperties, 0);//convert string - System::String ^mwinInfo = Global::AUTO_BRIDGE->getWindowInfo(System::IntPtr(jwindowHandle), marshal_as(properties)); - env->ReleaseStringUTFChars(jproperties, properties); //release string - marshal_context context; - return env->NewStringUTF(context.marshal_as(mwinInfo)); -} - -/* - * Class: org_synthuse_UiaBridge - * Method: getWindowInfo - * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_org_synthuse_UiaBridge_getWindowInfo__Ljava_lang_String_2Ljava_lang_String_2(JNIEnv *env, jobject obj, jstring jruntimeIdStr, jstring jproperties) -{ - const char *properties = env->GetStringUTFChars(jproperties, 0);//convert string - const char *runtimeIdStr = env->GetStringUTFChars(jruntimeIdStr, 0);//convert string - System::String ^mwinInfo = Global::AUTO_BRIDGE->getWindowInfo(marshal_as(runtimeIdStr), marshal_as(properties)); - env->ReleaseStringUTFChars(jruntimeIdStr, runtimeIdStr); //release string - env->ReleaseStringUTFChars(jproperties, properties); //release string - marshal_context context; - return env->NewStringUTF(context.marshal_as(mwinInfo)); -} diff --git a/native/uiabridge/org_synthuse_UiaBridge.h b/native/uiabridge/org_synthuse_UiaBridge.h deleted file mode 100644 index 06bb5d7..0000000 --- a/native/uiabridge/org_synthuse_UiaBridge.h +++ /dev/null @@ -1,93 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class org_synthuse_UiaBridge */ - -#ifndef _Included_org_synthuse_UiaBridge -#define _Included_org_synthuse_UiaBridge -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: org_synthuse_UiaBridge - * Method: initialize - * Signature: (Ljava/lang/String;)V - */ -JNIEXPORT void JNICALL Java_org_synthuse_UiaBridge_initialize - (JNIEnv *, jobject, jstring); - -/* - * Class: org_synthuse_UiaBridge - * Method: shutdown - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_org_synthuse_UiaBridge_shutdown - (JNIEnv *, jobject); - -/* - * Class: org_synthuse_UiaBridge - * Method: useCachedRequests - * Signature: (Z)V - */ -JNIEXPORT void JNICALL Java_org_synthuse_UiaBridge_useCachedRequests - (JNIEnv *, jobject, jboolean); - -/* - * Class: org_synthuse_UiaBridge - * Method: addEnumFilter - * Signature: (Ljava/lang/String;Ljava/lang/String;)I - */ -JNIEXPORT jint JNICALL Java_org_synthuse_UiaBridge_addEnumFilter - (JNIEnv *, jobject, jstring, jstring); - -/* - * Class: org_synthuse_UiaBridge - * Method: clearEnumFilters - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_org_synthuse_UiaBridge_clearEnumFilters - (JNIEnv *, jobject); - -/* - * Class: org_synthuse_UiaBridge - * Method: enumWindowInfo - * Signature: (Ljava/lang/String;)[Ljava/lang/String; - */ -JNIEXPORT jobjectArray JNICALL Java_org_synthuse_UiaBridge_enumWindowInfo__Ljava_lang_String_2 - (JNIEnv *, jobject, jstring); - -/* - * Class: org_synthuse_UiaBridge - * Method: enumWindowInfo - * Signature: (ILjava/lang/String;)[Ljava/lang/String; - */ -JNIEXPORT jobjectArray JNICALL Java_org_synthuse_UiaBridge_enumWindowInfo__ILjava_lang_String_2 - (JNIEnv *, jobject, jint, jstring); - -/* - * Class: org_synthuse_UiaBridge - * Method: getWindowInfo - * Signature: (IILjava/lang/String;)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_org_synthuse_UiaBridge_getWindowInfo__IILjava_lang_String_2 - (JNIEnv *, jobject, jint, jint, jstring); - -/* - * Class: org_synthuse_UiaBridge - * Method: getWindowInfo - * Signature: (ILjava/lang/String;)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_org_synthuse_UiaBridge_getWindowInfo__ILjava_lang_String_2 - (JNIEnv *, jobject, jint, jstring); - -/* - * Class: org_synthuse_UiaBridge - * Method: getWindowInfo - * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_org_synthuse_UiaBridge_getWindowInfo__Ljava_lang_String_2Ljava_lang_String_2 - (JNIEnv *, jobject, jstring, jstring); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/native/uiabridge/resource.h b/native/uiabridge/resource.h deleted file mode 100644 index d5ac7c4..0000000 --- a/native/uiabridge/resource.h +++ /dev/null @@ -1,3 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by app.rc diff --git a/native/uiabridge/uiabridge.cpp b/native/uiabridge/uiabridge.cpp deleted file mode 100644 index 8fc5182..0000000 --- a/native/uiabridge/uiabridge.cpp +++ /dev/null @@ -1,497 +0,0 @@ -/* - * Copyright 2014, Synthuse.org - * Released under the Apache Version 2.0 License. - * - * last modified by ejakubowski7@gmail.com -*/ -// This is the main DLL file. - -#include "stdafx.h" -#include "uiabridge.h" - -using namespace System; -using namespace System::Collections::Generic; -using namespace System::Windows::Automation; -using namespace uiabridge; - -AutomationBridge::AutomationBridge() -{ - enumFilters = gcnew Dictionary(); - cacheRequest = nullptr; - useCache = true; - initializeCache(""); -} - -AutomationBridge::AutomationBridge(System::String ^cachedProperties) -{ - enumFilters = gcnew Dictionary(); - cacheRequest = nullptr; - useCache = true; - initializeCache(cachedProperties); -} - -AutomationBridge::~AutomationBridge() -{ - enumFilters->Clear(); - if (cacheRequest != nullptr) - cacheRequest->Pop(); //disable UI Automation Cache - //Console::WriteLine("disposing of AutomationBridge"); -} - -void AutomationBridge::useCachedRequests(System::Boolean cacheRequestsFlg) -{ - useCache = cacheRequestsFlg; -} - -void AutomationBridge::initializeCache(System::String ^cachedProperties) -{ - cacheRequest = gcnew CacheRequest(); - //cacheRequest->AutomationElementMode = AutomationElementMode::Full; - cacheRequest->TreeFilter = Automation::RawViewCondition; - cacheRequest->TreeScope = TreeScope::Element;// | TreeScope::Children; - /* - cacheRequest->Add(AutomationElement::RuntimeIdProperty); - cacheRequest->Add(AutomationElement::ProcessIdProperty); - cacheRequest->Add(AutomationElement::FrameworkIdProperty); - cacheRequest->Add(AutomationElement::LocalizedControlTypeProperty); - cacheRequest->Add(AutomationElement::ControlTypeProperty); - cacheRequest->Add(AutomationElement::ClassNameProperty); - cacheRequest->Add(AutomationElement::NameProperty); - cacheRequest->Add(AutomationElement::BoundingRectangleProperty); - */ - System::String ^cachedPropStr = cachedProperties; - if (cachedPropStr == nullptr) // check if blank/null we need to use DEFAULT_CACHED_PROPS; - cachedPropStr = DEFAULT_CACHED_PROPS; - else if (cachedPropStr->Equals("")) - cachedPropStr = DEFAULT_CACHED_PROPS; - array ^rootProperties = AutomationElement::RootElement->GetSupportedProperties(); - List ^cacheList = gcnew List(); - if (cachedPropStr->Contains(L"NativeWindowHandleProperty")) //special property not in the root property list - { - cacheList->Add(AutomationElement::NativeWindowHandleProperty); - cacheRequest->Add(AutomationElement::NativeWindowHandleProperty); - } - if (cachedPropStr->Contains(L"ValueProperty")) //special property not in the root property list - { - cacheList->Add(ValuePattern::ValueProperty); - cacheRequest->Add(AutomationElement::IsValuePatternAvailableProperty); - cacheRequest->Add(ValuePattern::ValueProperty); - cacheRequest->Add(ValuePattern::Pattern); - } - for each(AutomationProperty ^ap in rootProperties) //loop through all supported Properties for a child - { - System::String ^currentPropertyStr = L""; //current property values - System::String ^shortPropName = L" null "; - if (ap->ProgrammaticName->Contains(L".")) //get short Property name - shortPropName = ap->ProgrammaticName->Substring(ap->ProgrammaticName->IndexOf(L".") + 1); - if (cachedPropStr->Contains(shortPropName) || cachedPropStr->Contains(ap->ProgrammaticName)) - { - cacheList->Add(ap);// add property to cachedRootProperties - cacheRequest->Add(ap); // add property to cacheRequest - //Console::WriteLine("caching property {0}", ap->ProgrammaticName); - } - } - cachedRootProperties = cacheList->ToArray(); - cacheRequest->Push(); //enable UI Automation Cache - //cachedRootProperties = AutomationElement::RootElement->GetSupportedProperties(); -} - -int AutomationBridge::addEnumFilter(System::String ^propertyName, System::String ^propertyValue) -{ - enumFilters->Add(propertyName, propertyValue); - return enumFilters->Count; -} - -void AutomationBridge::clearEnumFilters() -{ - enumFilters->Clear(); -} - -Boolean AutomationBridge::isElementFiltered(System::Windows::Automation::AutomationElement ^element) -{ - return isElementFiltered(element, nullptr); -} - -Boolean AutomationBridge::isElementFiltered(System::Windows::Automation::AutomationElement ^element, List ^filterModifierList) -{ - Boolean result = false; - int filterMatchCount = 0; - if (enumFilters->Count == 0) - return result; - //array ^aps = cachedRootProperties;//element->GetSupportedProperties(); - for each(AutomationProperty ^ap in cachedRootProperties) //loop through all supported Properties for a child - { - System::String ^currentPropertyStr = L""; //current property values - System::String ^shortPropName = L" null "; - if (ap->ProgrammaticName->Contains(L".")) //get short Property name - shortPropName = ap->ProgrammaticName->Substring(ap->ProgrammaticName->IndexOf(L".") + 1); - //System::Console::WriteLine("property: {0}", shortPropName); - for each(System::String ^key in enumFilters->Keys) - { - if (filterModifierList != nullptr) - if (filterModifierList->Contains(key) && key->StartsWith(PARENT_MODIFIER+ "/") ) // modifier has been applied and filters should be ignored - { - ++filterMatchCount; - //System::Console::WriteLine("PARENT_MODIFIER {0}", key); - continue; - } - else if(filterModifierList->Contains(key) && key->StartsWith(FIRST_MODIFIER+ "/")) //first already found stop! - { - //System::Console::WriteLine("FIRST_MODIFIER {0}", key); - return true; - } - System::String ^filterProp = key; - System::String ^modifier = L""; - int pos = key->IndexOf(L"/"); - if (pos != -1)//tree modifier - { - modifier = filterProp->Substring(0, pos); - filterProp = filterProp->Substring(pos+1); - //System::Console::WriteLine("modifier: {0}, {1}, {2}", modifier, filterProp, key); - } - if (shortPropName->Equals(filterProp) || ap->ProgrammaticName->Equals(filterProp)) - {//this element has a matching filter property - //System::Console::WriteLine("matched property: {0}", filterProp); - System::String ^valStr = L""; - if (ap->ProgrammaticName->Equals(L"AutomationElementIdentifiers.RuntimeIdProperty")) - {//runtimeId are int array so need to test it differently - array ^idArray = (array ^)element->GetCurrentPropertyValue(ap); - for each(System::Int32 val in idArray) - { - valStr += System::Convert::ToString(val) + L"-"; - } - valStr = valStr->TrimEnd('-'); - //System::Console::WriteLine("runtimeId: {0}", valStr); - } - else //all other property types that are strings - { - if (useCache) - valStr = element->GetCachedPropertyValue(ap)->ToString(); - else - valStr = element->GetCurrentPropertyValue(ap)->ToString(); - //valStr = element->GetCurrentPropertyValue(ap)->ToString(); - } - //System::Console::WriteLine("test property vals: {0} , {1}", valStr, enumFilters[key]); - - if (valStr->Equals(enumFilters[key])) // value matches filter value - { - //System::Console::WriteLine("matched property vals: {0} , {1}", valStr, enumFilters[key]); - //result = false; - ++filterMatchCount; - if (filterModifierList != nullptr) - if (modifier->Equals(PARENT_MODIFIER)) //if modifier is parent then add to modifier list - { - //System::Console::WriteLine("modifier added1 {0}", key); - filterModifierList->Add(key); - } - else if(modifier->Equals(FIRST_MODIFIER)) { - //System::Console::WriteLine("first modifier added1 {0} {1}", key, filterModifierList->Count); - //for each (System::String ^mod in filterModifierList) - // System::Console::WriteLine("mod {0}", mod); - filterModifierList->Add(key); - return false; - } - } - else// not matched - if (filterModifierList != nullptr) - if (modifier->Equals(ALL_MODIFIER)) //doesn't matter if ALL modifier doesn't match, need to keep searching - { - //System::Console::WriteLine("modifier added2 {0}", key); - filterModifierList->Add(key); - } - else if(modifier->Equals(FIRST_MODIFIER)) - filterModifierList->Add(ALL_MODIFIER + "/" + filterProp); - } - } - - } - //System::Console::WriteLine("filterMatchCount: {0}", filterMatchCount); - if (filterMatchCount > 0) - return false; - else - return true; - //return result; -} - -void AutomationBridge::processFilterModifier(Boolean filtered, Boolean modifierChanged, List ^filterModifierList) -{ - if (!filtered) //not filtered so return element - { - //winInfoList->Add(getWindowInfo(currentElement, properties)); - //winInfoList->AddRange(enumWindowInfo(currentElement, properties, filterModifierList)); - if (modifierChanged && filterModifierList[filterModifierList->Count - 1]->StartsWith(FIRST_MODIFIER) == false) //modifier was added and needs to be removed - {// don't remove First modifier - //System::Console::WriteLine("modifier removed1 {0}", filterModifierList[filterModifierList->Count - 1]); - filterModifierList->RemoveAt(filterModifierList->Count - 1); - } - } - else //filtered, but if modifier used keep searching children - { - if (modifierChanged) //modifier was added and needs to be removed (ALL) - { - //winInfoList->AddRange(enumWindowInfo(currentElement, properties, filterModifierList)); - if (filterModifierList[filterModifierList->Count - 1]->StartsWith(FIRST_MODIFIER) == false)// don't remove First modifier - { - //System::Console::WriteLine("modifier removed2 {0}", filterModifierList[filterModifierList->Count - 1]); - filterModifierList->RemoveAt(filterModifierList->Count - 1); - } - } - } - -} - -System::String ^ AutomationBridge::getRuntimeIdFromElement(System::Windows::Automation::AutomationElement ^element) -{ - System::String ^result = L""; - System::Object ^currentVal = element->GetCurrentPropertyValue(AutomationElement::RuntimeIdProperty); - if (currentVal != nullptr) - { - array ^idArray = (array ^)currentVal; - for each(System::Int32 val in idArray) - { - result += System::Convert::ToString(val) + L"-"; - } - result = result->TrimEnd('-'); - //System::Console::WriteLine("id: {0}", result); - } - return result; -} - -array ^ AutomationBridge::enumWindowInfo(System::String ^properties) -{ - return enumWindowInfo(AutomationElement::RootElement, properties); -} - -array ^ AutomationBridge::enumWindowInfo(System::IntPtr windowHandle, System::String ^properties) -{ - List ^winInfoList = gcnew List(); - AutomationElement ^element = nullptr; - try { - element = AutomationElement::FromHandle(windowHandle); - } catch (Exception ^ex) { - output(ex, ""); - return winInfoList->ToArray(); - } - if (element == nullptr) - return winInfoList->ToArray(); - if (!isElementFiltered(element)) //test parent should be filtered - winInfoList->Add(getWindowInfo(element, properties, nullptr)); - winInfoList->AddRange(enumWindowInfo(element, properties)); - return winInfoList->ToArray(); -} - -array ^ AutomationBridge::enumWindowInfo(AutomationElement ^element, System::String ^properties) -{ - List ^filterModifierList = gcnew List(); //can change descendants filters based on parent's filters - return enumWindowInfo(element, properties, filterModifierList); -} - -array ^ AutomationBridge::enumWindowInfo(AutomationElement ^parentElement, System::String ^properties, List ^filterModifierList) -{ - List ^winInfoList = gcnew List(); - if (parentElement == nullptr) - return winInfoList->ToArray(); - TreeWalker ^tw = TreeWalker::RawViewWalker; - //System::Console::WriteLine("get info: {0}", getWindowInfo(element, properties)); - //AutomationElement ^currentElement = tw->GetFirstChild(element, cacheRequest); - AutomationElement ^currentElement = nullptr; - - if (useCache) - currentElement = tw->GetFirstChild(parentElement, cacheRequest); - else - currentElement = tw->GetFirstChild(parentElement); - - if (currentElement == nullptr) - { - //System::Console::WriteLine("no children {0}", element->CachedChildren->Count); - //System::Console::WriteLine("no children"); - return winInfoList->ToArray(); - } - //else - // System::Console::WriteLine("yes children"); - - while (currentElement != nullptr) - { - try - { - int fmlOriginalSize = filterModifierList->Count; - Boolean filtered = isElementFiltered(currentElement, filterModifierList); - Boolean modifierChanged = fmlOriginalSize != filterModifierList->Count; - if (!filtered) //not filtered so return element - { - winInfoList->Add(getWindowInfo(currentElement, properties, parentElement)); - winInfoList->AddRange(enumWindowInfo(currentElement, properties, filterModifierList)); - } - else //filtered, but if modifier used keep searching children - { - if (modifierChanged) //modifier was added search children - winInfoList->AddRange(enumWindowInfo(currentElement, properties, filterModifierList)); - } - processFilterModifier(filtered, modifierChanged, filterModifierList); //cleans filterModifierList - //System::Console::WriteLine("element: {0}", currentElement); - //currentElement-> - } catch (Exception ^ex) - { - output(ex, ""); - } - if (useCache) - currentElement = tw->GetNextSibling(currentElement, cacheRequest); - else - currentElement = tw->GetNextSibling(currentElement); - } - return winInfoList->ToArray(); -} - -System::String ^ AutomationBridge::getWindowInfo(AutomationElement ^element, System::String ^properties, AutomationElement ^optionalParentElement) -{ - System::String ^resultProperties = L""; - System::String ^propertyNameErrorCheck = L""; - try - { - //when wildcard is enabled it will pull all property names & values - System::Boolean wildcardEnabled = false; - if (properties->Equals(L"*")) - wildcardEnabled = true; - - //setup parentElement - System::String ^parentRuntimeId = L""; - if (wildcardEnabled || properties->Contains(L"ParentRuntimeIdProperty")) - { - if (optionalParentElement == nullptr) - { - TreeWalker ^tw = TreeWalker::ControlViewWalker; - parentRuntimeId = getRuntimeIdFromElement(tw->GetParent(element, cacheRequest)); - } - else - parentRuntimeId = getRuntimeIdFromElement(optionalParentElement); - } - - //create array for keeping order of properties - System::String ^delim = L","; - array ^propSpltArray = properties->Split(delim->ToCharArray()); - System::Int32 count = 0; - //array ^aps = cachedRootProperties;//element->GetSupportedProperties(); - array ^propValues = gcnew array(propSpltArray->Length);//keep order - System::String ^wildcardProperties = L""; - if (wildcardEnabled) { - wildcardProperties += "ParentRuntimeIdProperty:" + parentRuntimeId + ","; - //propValues = gcnew array(aps->Length +1 );//add one for parent property since it doesn't exist - } - for(int i=0 ; i < propValues->Length ; i++) - { - propValues[i] = L""; - if (propSpltArray[i]->Equals("ParentRuntimeIdProperty"))//custom property for getting parent - { - propValues[i] = parentRuntimeId; - } - } - for each(AutomationProperty ^ap in cachedRootProperties) //loop through all supported Properties for a child - { - propertyNameErrorCheck = ap->ProgrammaticName;//debug purposes - System::String ^currentPropertyStr = L""; //current property values - //System::Console::WriteLine("property: {0}", ap->ProgrammaticName); - System::String ^shortPropName = L" null "; - if (ap->ProgrammaticName->Contains(L".")) - shortPropName = ap->ProgrammaticName->Substring(ap->ProgrammaticName->IndexOf(L".") + 1); - if (properties->Contains(shortPropName) || properties->Contains(ap->ProgrammaticName) || ap->ProgrammaticName->Equals(properties) || wildcardEnabled) - { - //System::Console::WriteLine("shortPropName: {0}", shortPropName); - //System::Object ^currentVal = element->GetCurrentPropertyValue(ap); - System::Object ^currentVal = nullptr; - if (shortPropName->Equals("ValueProperty")) //check if Value Pattern is an Available Property - { - if (((Boolean)element->GetCurrentPropertyValue(element->IsValuePatternAvailableProperty)) == false) - continue; - else - currentVal = element->GetCurrentPropertyValue(ap); //cached pattern was having issues; - } - - if (useCache) - currentVal = element->GetCachedPropertyValue(ap); - else - currentVal = element->GetCurrentPropertyValue(ap); - - if (currentVal == nullptr) - continue; - if (ap->ProgrammaticName->Equals(L"AutomationElementIdentifiers.RuntimeIdProperty")) - { - array ^idArray = (array ^)currentVal; - for each(System::Int32 val in idArray) - { - currentPropertyStr += System::Convert::ToString(val) + L"-"; - } - currentPropertyStr = currentPropertyStr->TrimEnd('-'); - //System::Console::WriteLine("id: {0}", result); - } - else//not runtimeId which is an Int32[] - { - currentPropertyStr = currentVal->ToString(); - currentPropertyStr = currentPropertyStr->Replace(",",","); - } - } - if (currentPropertyStr->Equals(L"")) //if there isn't a value skip - continue; - if (wildcardEnabled) { - wildcardProperties += shortPropName + ":" +currentPropertyStr + ","; - continue; - } - //System::Console::WriteLine("currentPropertyStr: {0}", currentPropertyStr); - //find the correct order to return this property - for(int i=0 ; i < propSpltArray->Length ; i++) - { - if (propSpltArray[i]->Equals(shortPropName) || propSpltArray[i]->Equals(ap->ProgrammaticName)) - propValues[i] = currentPropertyStr; - } - } - //output properties in the correct order - for(int i=0 ; i < propSpltArray->Length ; i++) - resultProperties += propValues[i] + L","; - if (wildcardEnabled) - resultProperties += wildcardProperties; - } catch (Exception ^ex) //when some elements close during enumeration it might cause valid exceptions - { - output(ex, " getWindowInfo on " + propertyNameErrorCheck + ", results: " + resultProperties); - } - return resultProperties; - -} - -System::String ^ AutomationBridge::getWindowInfo(System::Int32 x, System::Int32 y, System::String ^properties) -{ - AutomationElement ^element = AutomationElement::FromPoint(System::Windows::Point(x, y)); - if (element == nullptr) - return ""; - return getWindowInfo(element, properties, nullptr); -} - -System::String ^ AutomationBridge::getWindowInfo(System::IntPtr windowHandle, System::String ^properties) -{ - AutomationElement ^element = nullptr; - try { - AutomationElement ^element = AutomationElement::FromHandle(windowHandle); - } catch (Exception ^ex) { - output(ex, ""); - return ""; - } - if (element == nullptr) - return ""; - return getWindowInfo(element, properties, nullptr); -} - -System::String ^ AutomationBridge::getWindowInfo(System::String ^runtimeIdStr, System::String ^properties) -{ - System::String ^filter = L"First/RuntimeIdProperty"; //get first matching runtimeIdProperty - enumFilters->Add(filter, runtimeIdStr); - array ^props = enumWindowInfo(properties); - enumFilters->Remove(filter); - if (props->Length > 0) //if result array has a match return first result - return props[0]; - else - return ""; - //return getWindowInfo(element, properties); -} - -void AutomationBridge::output(Exception ^ex, System::String ^message) -{ - System::Console::WriteLine("Exception ({0}): {1} \n{2}", message, ex->Message, ex->StackTrace); -} diff --git a/native/uiabridge/uiabridge.h b/native/uiabridge/uiabridge.h deleted file mode 100644 index d7b2a01..0000000 --- a/native/uiabridge/uiabridge.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2014, Synthuse.org - * Released under the Apache Version 2.0 License. - * - * last modified by ejakubowski7@gmail.com -*/ -// uiabridge.h - -#pragma once - -using namespace System; -using namespace System::Collections::Generic; -using namespace System::Windows::Automation; - -namespace uiabridge { - - public ref class AutomationBridge - { - public: - AutomationBridge(void); - AutomationBridge(System::String ^cachedProperties); - ~AutomationBridge(); - void useCachedRequests(System::Boolean cacheRequestsFlg); - int addEnumFilter(System::String ^propertyName, System::String ^propertyValue); - void clearEnumFilters(); - Boolean isElementFiltered(System::Windows::Automation::AutomationElement ^element); - Boolean isElementFiltered(System::Windows::Automation::AutomationElement ^element, List ^filterModifierList); - System::String ^ getRuntimeIdFromElement(System::Windows::Automation::AutomationElement ^element); - array ^ enumWindowInfo(System::String ^properties); - array ^ enumWindowInfo(System::IntPtr windowHandle, System::String ^properties); - array ^ enumWindowInfo(AutomationElement ^element, System::String ^properties); - array ^ enumWindowInfo(AutomationElement ^element, System::String ^properties, List ^filterModifierList); - System::String ^ getWindowInfo(AutomationElement ^element, System::String ^properties, AutomationElement ^optionalParentElement); - System::String ^ getWindowInfo(System::Int32 x, System::Int32 y, System::String ^properties); - System::String ^ getWindowInfo(System::IntPtr windowHandle, System::String ^properties); - System::String ^ getWindowInfo(System::String ^runtimeIdStr, System::String ^properties); - - static System::String ^ALL_MODIFIER = L"All";// find all matching elements of this filter - static System::String ^PARENT_MODIFIER = L"Parent";//find all children of this matching parent filter - static System::String ^FIRST_MODIFIER = L"First"; //find first element matching this filter then stop - static System::String ^DEFAULT_CACHED_PROPS = L"RuntimeIdProperty,ParentRuntimeIdProperty,NativeWindowHandleProperty,ProcessIdProperty,FrameworkIdProperty,LocalizedControlTypeProperty,ControlTypeProperty,ClassNameProperty,NameProperty,BoundingRectangleProperty,ValueProperty"; - - private: - void initializeCache(System::String ^cachedProperties); - void output(Exception ^ex, System::String ^message); - Dictionary ^enumFilters; - void AutomationBridge::processFilterModifier(Boolean filtered, Boolean modifierChanged, List ^filterModifierList); - CacheRequest ^cacheRequest; - System::Boolean useCache; - array ^cachedRootProperties; - }; -} diff --git a/native/uiabridge/uiabridge.vcxproj b/native/uiabridge/uiabridge.vcxproj deleted file mode 100644 index c26c978..0000000 --- a/native/uiabridge/uiabridge.vcxproj +++ /dev/null @@ -1,182 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {BAC1B079-7B87-4396-B17F-91A86DF1AE29} - v4.0 - ManagedCProj - uiabridge - - - - DynamicLibrary - true - true - Unicode - - - DynamicLibrary - true - true - Unicode - - - DynamicLibrary - false - true - Unicode - - - DynamicLibrary - false - true - Unicode - - - - - - - - - - - - - - - - - - - true - $(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(IncludePath) - - - true - $(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(IncludePath) - - - false - $(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(IncludePath) - - - false - $(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(IncludePath) - - - - Level3 - Disabled - WIN32;_DEBUG;%(PreprocessorDefinitions) - Use - - - true - - - - - - - Level3 - Disabled - WIN32;_DEBUG;%(PreprocessorDefinitions) - Use - - - true - - - - - - - Level3 - WIN32;NDEBUG;%(PreprocessorDefinitions) - Use - MultiThreadedDLL - - - true - - - - - mkdir "$(ProjectDir)bin" -copy /Y "$(TargetPath)" "$(ProjectDir)bin\uiabridge$(PlatformArchitecture)$(TargetExt)" - - - - - Level3 - WIN32;NDEBUG;%(PreprocessorDefinitions) - Use - - - true - - - - - mkdir "$(ProjectDir)bin" -copy /Y "$(TargetPath)" "$(ProjectDir)bin\uiabridge$(PlatformArchitecture)$(TargetExt)" - - - - - - - - - - - - - - - - - - - - - - - - - Create - Create - Create - Create - - - - - - - - - - - - - - \ No newline at end of file diff --git a/native/uiabridge/uiabridge.vcxproj.filters b/native/uiabridge/uiabridge.vcxproj.filters deleted file mode 100644 index f0a71a3..0000000 --- a/native/uiabridge/uiabridge.vcxproj.filters +++ /dev/null @@ -1,62 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - Resource Files - - - - - Resource Files - - - \ No newline at end of file diff --git a/native/uiabridge/uiabridge.vcxproj.user b/native/uiabridge/uiabridge.vcxproj.user deleted file mode 100644 index ace9a86..0000000 --- a/native/uiabridge/uiabridge.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/native/uiabtest/AssemblyInfo.cpp b/native/uiabtest/AssemblyInfo.cpp deleted file mode 100644 index 8c84297..0000000 --- a/native/uiabtest/AssemblyInfo.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include "stdafx.h" - -using namespace System; -using namespace System::Reflection; -using namespace System::Runtime::CompilerServices; -using namespace System::Runtime::InteropServices; -using namespace System::Security::Permissions; - -// -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -// -[assembly:AssemblyTitleAttribute("uiabtest")]; -[assembly:AssemblyDescriptionAttribute("")]; -[assembly:AssemblyConfigurationAttribute("")]; -[assembly:AssemblyCompanyAttribute("na")]; -[assembly:AssemblyProductAttribute("uiabtest")]; -[assembly:AssemblyCopyrightAttribute("Copyright (c) na 2014")]; -[assembly:AssemblyTrademarkAttribute("")]; -[assembly:AssemblyCultureAttribute("")]; - -// -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the value or you can default the Revision and Build Numbers -// by using the '*' as shown below: - -[assembly:AssemblyVersionAttribute("1.0.*")]; - -[assembly:ComVisible(false)]; - -[assembly:CLSCompliantAttribute(true)]; - -[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/native/uiabtest/ReadMe.txt b/native/uiabtest/ReadMe.txt deleted file mode 100644 index 0002f31..0000000 --- a/native/uiabtest/ReadMe.txt +++ /dev/null @@ -1,35 +0,0 @@ -======================================================================== - APPLICATION : uiabtest Project Overview -======================================================================== - -AppWizard has created this uiabtest Application for you. - -This file contains a summary of what you will find in each of the files that -make up your uiabtest application. - -uiabtest.vcxproj - This is the main project file for VC++ projects generated using an Application Wizard. - It contains information about the version of Visual C++ that generated the file, and - information about the platforms, configurations, and project features selected with the - Application Wizard. - -uiabtest.vcxproj.filters - This is the filters file for VC++ projects generated using an Application Wizard. - It contains information about the association between the files in your project - and the filters. This association is used in the IDE to show grouping of files with - similar extensions under a specific node (for e.g. ".cpp" files are associated with the - "Source Files" filter). - -uiabtest.cpp - This is the main application source file. - -AssemblyInfo.cpp - Contains custom attributes for modifying assembly metadata. - -///////////////////////////////////////////////////////////////////////////// -Other notes: - -AppWizard uses "TODO:" to indicate parts of the source code you -should add to or customize. - -///////////////////////////////////////////////////////////////////////////// diff --git a/native/uiabtest/Release/uiabridge.dll b/native/uiabtest/Release/uiabridge.dll deleted file mode 100644 index b0bda67..0000000 Binary files a/native/uiabtest/Release/uiabridge.dll and /dev/null differ diff --git a/native/uiabtest/Release/uiabtest.exe b/native/uiabtest/Release/uiabtest.exe deleted file mode 100644 index 568d214..0000000 Binary files a/native/uiabtest/Release/uiabtest.exe and /dev/null differ diff --git a/native/uiabtest/app.ico b/native/uiabtest/app.ico deleted file mode 100644 index 3a5525f..0000000 Binary files a/native/uiabtest/app.ico and /dev/null differ diff --git a/native/uiabtest/app.rc b/native/uiabtest/app.rc deleted file mode 100644 index eab4306..0000000 Binary files a/native/uiabtest/app.rc and /dev/null differ diff --git a/native/uiabtest/build.bat b/native/uiabtest/build.bat deleted file mode 100644 index 31816b9..0000000 --- a/native/uiabtest/build.bat +++ /dev/null @@ -1,5 +0,0 @@ -REM set path=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin;%path% - -%WinDir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /p:configuration=release /p:platform=win32 %* - -pause \ No newline at end of file diff --git a/native/uiabtest/resource.h b/native/uiabtest/resource.h deleted file mode 100644 index d5ac7c4..0000000 --- a/native/uiabtest/resource.h +++ /dev/null @@ -1,3 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by app.rc diff --git a/native/uiabtest/stdafx.cpp b/native/uiabtest/stdafx.cpp deleted file mode 100644 index b0e7c23..0000000 --- a/native/uiabtest/stdafx.cpp +++ /dev/null @@ -1,7 +0,0 @@ -// stdafx.cpp : source file that includes just the standard includes -// uiabtest.pch will be the pre-compiled header -// stdafx.obj will contain the pre-compiled type information - -#include "stdafx.h" - - diff --git a/native/uiabtest/stdafx.h b/native/uiabtest/stdafx.h deleted file mode 100644 index 347bb4c..0000000 --- a/native/uiabtest/stdafx.h +++ /dev/null @@ -1,11 +0,0 @@ -// stdafx.h : include file for standard system include files, -// or project specific include files that are used frequently, but -// are changed infrequently -// - -#pragma once - -// TODO: reference additional headers your program requires here -#include -#include -#include \ No newline at end of file diff --git a/native/uiabtest/uiabtest.cpp b/native/uiabtest/uiabtest.cpp deleted file mode 100644 index 41541e6..0000000 --- a/native/uiabtest/uiabtest.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2014, Synthuse.org - * Released under the Apache Version 2.0 License. - * - * last modified by ejakubowski7@gmail.com -*/ -// uiabtest.cpp : main project file. - -#include "stdafx.h" - -using namespace System; -using namespace System::Windows::Automation; -using namespace uiabridge; - -void outputResults(array ^winInfo) -{ - System::IO::StreamWriter ^file = gcnew System::IO::StreamWriter("c:\\temp.txt"); - for each(System::String ^prop in winInfo) - { - Console::WriteLine(prop); - file->WriteLine(prop); - } - file->Flush(); - file->Close(); - -} - -void runBasicTests(AutomationBridge ^ab, System::String ^propList) -{ - array ^winInfo = nullptr; - System::DateTime start; - System::Double seconds = 0; - - start = System::DateTime::Now; - ab->clearEnumFilters(); - ab->addEnumFilter("Parent/FrameworkIdProperty", "WinForm"); - winInfo = ab->enumWindowInfo(propList); - //outputResults(winInfo); - seconds = System::Math::Round(System::DateTime::Now.Subtract(start).TotalSeconds, 4); - Console::WriteLine(L"Total WinForm Elements: {0} in {1} seconds", winInfo->Length, seconds); - - start = System::DateTime::Now; - ab->clearEnumFilters(); - ab->addEnumFilter("Parent/FrameworkIdProperty", "WPF"); - winInfo = ab->enumWindowInfo(propList); - //outputResults(winInfo); - seconds = System::Math::Round(System::DateTime::Now.Subtract(start).TotalSeconds, 4); - Console::WriteLine(L"Total WPF Elements: {0} in {1} seconds", winInfo->Length, seconds); - - start = System::DateTime::Now; - ab->clearEnumFilters(); - winInfo = ab->enumWindowInfo(propList); - //outputResults(winInfo); - seconds = System::Math::Round(System::DateTime::Now.Subtract(start).TotalSeconds, 4); - Console::WriteLine(L"Total All Elements: {0} in {1} seconds", winInfo->Length, seconds); - Console::WriteLine(L"---------------------------------------"); -} - -int main(array ^args) -{ - Console::WriteLine(L"UI Automation Bridge Test"); - //System::String ^propList = L"RuntimeIdProperty,ProcessIdProperty,FrameworkIdProperty,LocalizedControlTypeProperty,ClassNameProperty,NameProperty"; - System::String ^propList = L"RuntimeIdProperty,ParentRuntimeIdProperty,NativeWindowHandleProperty,ProcessIdProperty,FrameworkIdProperty,LocalizedControlTypeProperty,ControlTypeProperty,ClassNameProperty,NameProperty,ValueProperty,BoundingRectangleProperty"; - AutomationBridge ^ab = gcnew AutomationBridge(propList); - //System::String ^propList = L"RuntimeIdProperty,BoundingRectangleProperty"; - Console::WriteLine(propList); - Console::WriteLine(L"\nCached Requests Enabled"); - ab->useCachedRequests(true);//disable cache - runBasicTests(ab, propList); - runBasicTests(ab, propList); - runBasicTests(ab, propList); - - Console::WriteLine(L"Cached Requests Disabled"); - ab->useCachedRequests(false);//disable cache - runBasicTests(ab, propList); - runBasicTests(ab, propList); - runBasicTests(ab, propList); - - //System::String ^winInfo1 = ab->getWindowInfo(System::IntPtr(3409618), propList); - //ab->addEnumFilter("Parent/ClassNameProperty", "Notepad"); - //ab->addEnumFilter("First/RuntimeIdProperty", "42-4784952"); - //ab->addEnumFilter("ClassNameProperty", "Notepad"); - //ab->addEnumFilter("All/ClassNameProperty", "Edit"); - //ab->addEnumFilter("All/LocalizedControlTypeProperty", "menu item"); - //ab->addEnumFilter("Parent/FrameworkIdProperty", "WinForm"); - //ab->addEnumFilter("Parent/FrameworkIdProperty", "WPF"); - //ab->addEnumFilter("Parent/ClassNameProperty", "WindowsForms10.Window.8.app.0.2bf8098_r13_ad1"); - //array ^winInfo = ab->enumWindowInfo(propList); //L"*" - //ab->clearEnumFilters(); - //ab->addEnumFilter("Parent/FrameworkIdProperty", "WinForm"); - //array ^winInfo = ab->enumWindowInfo(System::IntPtr(3409618), propList); //L"*" - //array ^winInfo = ab->enumWindowInfo(System::IntPtr(12977932), propList); //L"*" - //Console::WriteLine("enumWindowInfo x,y: {0}", ab->getWindowInfo(100,100, propList); //L"*" - - //outputResults(winInfo); - //Globals::Global::AUTO_BRIDGE->clearEnumFilters(); - //winInfo = nullptr; - //winInfo = Globals::Global::AUTO_BRIDGE->enumWindowInfo(System::IntPtr(7603636), propList); - //Console::WriteLine("winInfo length: {0}", winInfo->Length); - //winInfo = Globals::Global::AUTO_BRIDGE->enumWindowInfo(System::IntPtr(7603636), propList); - //Console::WriteLine("winInfo length: {0}", winInfo->Length); - - //Console::WriteLine("getWindowInfo RuntimeIdProperty: {0}", ab->getWindowInfo("42-4784952", propList)); - - //System::Threading::Thread::Sleep(10000); //10 seconds sleep - //array ^winInfo2 = ab->enumWindowInfo(propList); //L"*" - //outputResults(winInfo2); - - //System::Double seconds = System::Math::Round(System::DateTime::Now.Subtract(start).TotalSeconds, 4); - //Console::WriteLine(L"Total Elements: {0} in {1} seconds", winInfo->Length, seconds); - Console::WriteLine(L"press any key to exit"); - _getch();//wait for user input - return 0; -} diff --git a/native/uiabtest/uiabtest.vcxproj b/native/uiabtest/uiabtest.vcxproj deleted file mode 100644 index 1f42b2a..0000000 --- a/native/uiabtest/uiabtest.vcxproj +++ /dev/null @@ -1,169 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {7958D1B7-F169-40FA-A7A0-10E8E0F90CDA} - v4.0 - ManagedCProj - uiabtest - - - - Application - true - true - Unicode - - - Application - true - true - Unicode - - - Application - false - true - Unicode - - - Application - false - true - Unicode - - - - - - - - - - - - - - - - - - - true - - - true - - - false - - - false - - - - Level3 - Disabled - WIN32;_DEBUG;%(PreprocessorDefinitions) - Use - - - true - - - - - - - Level3 - Disabled - WIN32;_DEBUG;%(PreprocessorDefinitions) - Use - - - true - - - - - - - Level3 - WIN32;NDEBUG;%(PreprocessorDefinitions) - Use - - - true - - - - - - - Level3 - WIN32;NDEBUG;%(PreprocessorDefinitions) - Use - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Create - Create - Create - Create - - - - - - {bac1b079-7b87-4396-b17f-91a86df1ae29} - - - - - - \ No newline at end of file diff --git a/native/uiabtest/uiabtest.vcxproj.filters b/native/uiabtest/uiabtest.vcxproj.filters deleted file mode 100644 index 7f6715d..0000000 --- a/native/uiabtest/uiabtest.vcxproj.filters +++ /dev/null @@ -1,47 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - - Resource Files - - - - - Header Files - - - Header Files - - - - - Resource Files - - - - - Source Files - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/native/uiabtest/uiabtest.vcxproj.user b/native/uiabtest/uiabtest.vcxproj.user deleted file mode 100644 index ace9a86..0000000 --- a/native/uiabtest/uiabtest.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file