예제 #1
0
파일: main.c 프로젝트: Moteesh/reactos
static void test_LresultFromObject(const char *name)
{
    PROCESS_INFORMATION proc;
    STARTUPINFOA startup;
    char cmdline[MAX_PATH];
    IUnknown *unk;
    HRESULT hres;
    LRESULT lres;

    lres = LresultFromObject(NULL, 0, 0);
    ok(lres == E_INVALIDARG, "got %lx\n", lres);

    hres = ObjectFromLresult(0, &IID_IUnknown, 0, (void**)&unk);
    ok(hres == E_FAIL, "got %x\n", hres);
    hres = ObjectFromLresult(0x10000, &IID_IUnknown, 0, (void**)&unk);
    ok(hres == E_FAIL, "got %x\n", hres);

    ok(Object_ref == 1, "Object_ref = %d\n", Object_ref);
    lres = LresultFromObject(&IID_IUnknown, 0, &Object);
    ok(SUCCEEDED(lres), "got %lx\n", lres);
    ok(Object_ref > 1, "Object_ref = %d\n", Object_ref);

    hres = ObjectFromLresult(lres, &IID_IUnknown, 0, (void**)&unk);
    ok(hres == S_OK, "hres = %x\n", hres);
    ok(unk == &Object, "unk != &Object\n");
    IUnknown_Release(unk);
    ok(Object_ref == 1, "Object_ref = %d\n", Object_ref);

    lres = LresultFromObject(&IID_IUnknown, 0, &Object);
    ok(SUCCEEDED(lres), "got %lx\n", lres);
    ok(Object_ref > 1, "Object_ref = %d\n", Object_ref);

    sprintf(cmdline, "\"%s\" main ObjectFromLresult %lx", name, lres);
    memset(&startup, 0, sizeof(startup));
    startup.cb = sizeof(startup);
    CreateProcessA(NULL, cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &startup, &proc);
    winetest_wait_child_process(proc.hProcess);
    ok(Object_ref == 1, "Object_ref = %d\n", Object_ref);
}
예제 #2
0
static
IDispatch *get_ie_target(HWND hwnd, int x, int y)
{
    IDispatch *top_doc, *elem, *target;
    UINT getobj_msg;
    LRESULT lres, res;
    HRESULT hres;

    getobj_msg = RegisterWindowMessageW(L"WM_HTML_GETOBJECT");
    if(getobj_msg == 0) {
        spr->log_lasterror(
            LOG_LEVEL_NOTIFY,
            L"ie-scroll: Failed to call "
            L"RegisterWindowMessage(\"WM_HTML_GETOBJECT\")", 1);
        return NULL;
    }

    lres = SendMessageTimeout(hwnd, getobj_msg, 0, 0,
                              SMTO_ABORTIFHUNG, 1000,
                              (PDWORD_PTR)&res);
    if(lres == 0) {
        spr->log_lasterror(
            LOG_LEVEL_NOTIFY,
            L"ie-scroll: Failed to call SendMessageTimeout()", 1);
        return NULL;
    }

    hres = ObjectFromLresult(res, &IID_IDispatch, 0,
                             (void **)(void *)&top_doc);
    if(FAILED(hres)) {
        spr->log_hresult(
            LOG_LEVEL_NOTIFY,
            L"ie-scroll: Failed to call ObjectFromLresult()",
            hres, 1);
        return NULL;
    }

    hres = get_ie_elem_at(top_doc, x, y, &elem);
    IDispatch_Release(top_doc);
    if(FAILED(hres)) {
        return NULL;
    }

    hres = get_scrollable_parent(elem, &target);
    IDispatch_Release(elem);
    if(FAILED(hres)) {
        return NULL;
    }

    return target;
}
    IAccessible* NativeViewHostWin::GetNativeViewAccessible()
    {
        HWND hwnd = host_->native_view();
        if(!IsWindow(hwnd))
        {
            return NULL;
        }

        LRESULT ret = SendMessage(hwnd, WM_GETOBJECT, 0, OBJID_CLIENT);
        IAccessible* accessible = NULL;
        HRESULT success = ObjectFromLresult(ret, IID_IDispatch, 0,
            reinterpret_cast<void**>(accessible));
        if(success == S_OK)
        {
            return accessible;
        }
        else
        {
            return NULL;
        }
    }
예제 #4
0
파일: main.c 프로젝트: GYGit/reactos
HRESULT WINAPI AccessibleObjectFromWindow( HWND hwnd, DWORD dwObjectID,
                             REFIID riid, void** ppvObject )
{
    TRACE("%p %d %s %p\n", hwnd, dwObjectID,
          debugstr_guid( riid ), ppvObject );

    if(!ppvObject)
        return E_INVALIDARG;
    *ppvObject = NULL;

    if(IsWindow(hwnd)) {
        LRESULT lres;

        lres = SendMessageW(hwnd, WM_GETOBJECT, 0xffffffff, dwObjectID);
        if(FAILED(lres))
            return lres;
        else if(lres)
            return ObjectFromLresult(lres, riid, 0, ppvObject);
    }

    return CreateStdAccessibleObject(hwnd, dwObjectID, riid, ppvObject);
}