Piotr Caban : oleacc: Add GetProcessHandleFromHwnd implementation.

Alexandre Julliard julliard at winehq.org
Mon May 5 15:03:26 CDT 2014


Module: wine
Branch: master
Commit: d8467aee7472d07158258138aa5144557833cf29
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d8467aee7472d07158258138aa5144557833cf29

Author: Piotr Caban <piotr at 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();




More information about the wine-cvs mailing list