none
如何使用UI Automation Events中的IUIAutomationElement * pSender。 RRS feed

  • 常规讨论

  • http://technet.microsoft.com/zh-cn/library/dd319588

    以上网直的示例代码中只是简单的在handler中打印了日志,就像下面这样。

    // IUIAutomationEventHandler methods HRESULT STDMETHODCALLTYPE HandleAutomationEvent(IUIAutomationElement * sender, EVENTID eventID) { _eventCount++; switch (eventID) { case UIA_Window_WindowOpenedEventId: wprintf(L">> Event WindowOpened Received! (count: %d)\n", _eventCount); break; case UIA_Window_WindowClosedEventId: wprintf(L">> Event WindowClosed Received! (count: %d)\n", _eventCount); break; default: wprintf(L">> Event (%d) Received! (count: %d)\n", eventID, _eventCount); break; } return S_OK; }

    但是我希望知道,如何使用IUIAutomationElement * sender来获取相应的property,比如value,name等。

    现在,我是这样做的。在Handler中sender.AddRef(); 然后PostThreadMessage()到另一个线程,

    在此线程中再进行其他操作,例如get_CachedClassName()等等。

    IFACEMETHODIMP structureHandler::HandleStructureChangedEvent(

    IUIAutomationElement *sender,

    StructureChangeType changeType,

    SAFEARRAY *runtimeId)

    							

    {
    if(NULL == sender)
    {
    return S_OK;

    sender->AddRef();
    PostThreadMessage((DWORD)m_threadid, WM_PropertyChanged, (WPARAM)sender, (LPARAM)0);

    return S_OK;

    但是目前的问题是这样的,我的程序在刚开始运行的时候是正常的,等待1小时左右,就再也收不到structChangedEvent的事件了。

    我怀疑是使用sender的方法不正确,但是又找不到正确的使用方法。

    在此先谢过各位专家了。


    
    
    2013年6月7日 7:39

全部回复