Module: wine Branch: master Commit: d8467aee7472d07158258138aa5144557833cf29 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d8467aee7472d07158258138aa...
Author: Piotr Caban piotr@codeweavers.com Date: Sat May 3 14:27:35 2014 +0200
oleacc: Add GetProcessHandleFromHwnd implementation.
---
dlls/oleacc/main.c | 12 ++++++++++++ dlls/oleacc/oleacc.spec | 1 + dlls/oleacc/tests/main.c | 27 +++++++++++++++++++++++++++ 3 files changed, 40 insertions(+)
diff --git a/dlls/oleacc/main.c b/dlls/oleacc/main.c index 2777a38..a80d6b4 100644 --- a/dlls/oleacc/main.c +++ b/dlls/oleacc/main.c @@ -332,6 +332,18 @@ void WINAPI GetOleaccVersionInfo(DWORD* pVersion, DWORD* pBuild) *pBuild = MAKELONG(0,0); }
+HANDLE WINAPI GetProcessHandleFromHwnd(HWND hwnd) +{ + DWORD proc_id; + + TRACE("%p\n", hwnd); + + if(!GetWindowThreadProcessId(hwnd, &proc_id)) + return NULL; + return OpenProcess(PROCESS_DUP_HANDLE | PROCESS_VM_OPERATION | + PROCESS_VM_READ | PROCESS_VM_WRITE | SYNCHRONIZE, TRUE, proc_id); +} + UINT WINAPI GetRoleTextW(DWORD role, LPWSTR lpRole, UINT rolemax) { INT ret; diff --git a/dlls/oleacc/oleacc.spec b/dlls/oleacc/oleacc.spec index 6851454..dc92172 100644 --- a/dlls/oleacc/oleacc.spec +++ b/dlls/oleacc/oleacc.spec @@ -9,6 +9,7 @@ @ stdcall -private DllRegisterServer() @ stdcall -private DllUnregisterServer() @ stdcall GetOleaccVersionInfo(ptr ptr) +@ stdcall GetProcessHandleFromHwnd(ptr) @ stdcall GetRoleTextA(long ptr long) @ stdcall GetRoleTextW(long ptr long) @ stub GetStateTextA diff --git a/dlls/oleacc/tests/main.c b/dlls/oleacc/tests/main.c index 0162d72..186a71b 100644 --- a/dlls/oleacc/tests/main.c +++ b/dlls/oleacc/tests/main.c @@ -279,6 +279,32 @@ static void test_AccessibleObjectFromWindow(void) DestroyWindow(hwnd); }
+static void test_GetProcessHandleFromHwnd(void) +{ + HANDLE (WINAPI *pGetProcessHandleFromHwnd)(HWND); + HANDLE proc; + HWND hwnd; + + pGetProcessHandleFromHwnd = (void*)GetProcAddress( + GetModuleHandleA("oleacc.dll"), "GetProcessHandleFromHwnd"); + if(!pGetProcessHandleFromHwnd) { + win_skip("GetProcessHandleFromHwnd not available\n"); + return; + } + + proc = pGetProcessHandleFromHwnd(NULL); + ok(!proc, "proc = %p\n", proc); + + hwnd = CreateWindowA("static", "", 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL); + ok(hwnd != NULL, "CreateWindow failed\n"); + + proc = pGetProcessHandleFromHwnd(hwnd); + ok(proc != NULL, "proc == NULL\n"); + CloseHandle(proc); + + DestroyWindow(hwnd); +} + static void test_default_client_accessible_object(void) { static const WCHAR testW[] = {'t','e','s','t',' ','t',' ','&','j','u','n','k',0}; @@ -417,6 +443,7 @@ START_TEST(main) test_getroletext(); test_LresultFromObject(argv[0]); test_AccessibleObjectFromWindow(); + test_GetProcessHandleFromHwnd(); test_default_client_accessible_object();
unregister_window_class();