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