.NET Handle to HWND - PullRequest
       3

.NET Handle to HWND

1 голос
/ 27 сентября 2011

Другая основная проблема - я не могу преобразовать 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 или availableContext.Что на земле?: -S

getJavaProcess () - это просто функция, которая сортирует процессы и возвращает ту, которая соответствует критериям, которые я определил.

Я успешно перехватил обратные вызовы Java Access Bridge,и они возвращаются / запускаются, как и ожидалось, поэтому я знаю, что Мост загружается нормально.Я также могу вызвать getVersionInfo (vmID) из обратного вызова, и он работает как положено.Я так растерялся.

...