.NET处理HWND

时间:2011-09-27 03:36:45

标签: .net c++ hwnd

另一个基本问题 - 我无法将Process.MainWindowHandle转换为HWND。我尝试过使用Process-> MainWindowHandle.ToPointer()并传递它,但仍然没有爱。

这是一个从Point获取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),它按预期工作。我很困惑。

0 个答案:

没有答案