另一个基本问题 - 我无法将 Process.MainWindowHandle 转换为 HWND。我试过使用 Process->MainWindowHandle.ToPointer() 并通过它,但仍然没有爱。
这是一个从一个点获取 HWND 的函数,然后通过它,它完美地工作。
void echoMouseObject() {
long vmID;
AccessibleContext acParent;
AccessibleContext ac;
POINT p;
HWND hwnd;
RECT windowRect;
GetCursorPos(&p);
hwnd = WindowFromPoint(p);
if (GetAccessibleContextFromHWND(hwnd, &vmID, &acParent)) {
GetWindowRect(hwnd, &windowRect);
// send the point in global coordinates; Java will handle it!
if (GetAccessibleContextAt(vmID, acParent, (jint) p.x, (jint) p.y, &ac)) {
displayAccessibleInfo(vmID, ac, p.x, p.y); // can handle null
ReleaseJavaObject(vmID, ac);
}
}
但是,当我以以下方式传递 GetAccessibleContextFromHWND() 时,win_handle 以这种方式声明:
HWND win_handle;
并通过以下方式为其赋值:
Process^ p = gcnew Process();
p = getJavaProcess();
JA->setWindow((HWND)p->MainWindowHandle.ToPointer());
JA->test();
void JavaAccess::test(void)
{
long vm=0;
AccessibleContext* ac = new AccessibleContext();
BOOL t = GetAccessibleContextFromHWND(win_handle, &vm, ac);
AccessibleContextInfo* aci = new AccessibleContextInfo();
GetAccessibleContextInfo(vm, *ac, aci);
}
我得到一个假的!该函数无法返回有效的 vmID 或accessibleContext。到底怎么回事?:-S
getJavaProcess() 只是一个对进程进行排序并返回与我定义的条件匹配的函数。
我已成功挂钩 Java Access Bridge 回调,它们按预期返回/触发,所以我知道 Bridge 加载正常。我也可以从回调中调用 getVersionInfo(vmID),它按预期工作。我很混乱。