赞
踩
C++ IUIAutomation获取微信消息
直接上代码
代码如下(示例):
#include <stdio.h> #include <string.h> #include <iostream> #include <tchar.h> #include <windows.h> #include <atlbase.h> #include <comutil.h> #include <UIAutomation.h> #pragma comment(lib, "comsuppw.lib") using namespace std; HWND g_hwd=NULL; int _tmain(int argc, _TCHAR* argv[]) { CoInitialize(NULL); while(1) { g_hwd = FindWindow(_T("WeChatMainWndForPC"),_T("微信")); //获取微信窗口的句柄 if (g_hwd == NULL) { return 0; } else { WeChatInfo::UIAWeChat(); } Sleep(1000); } CoUninitialize(); return 0; } WeChatInfo::WeChatInfo() { } WeChatInfo::~WeChatInfo() { } SAFEARRAY* WeChatInfo::runtimeId = NULL; void WeChatInfo::UIAWeChat() { IUIAutomation *_automation; HRESULT hr = S_OK; if (FAILED(hr)) { cout << "11" << endl; return; } else { hr = CoCreateInstance(CLSID_CUIAutomation, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&_automation)); if (FAILED(hr)) { cout << "22" << endl; return; } else { IUIAutomationElement *element = NULL; hr = _automation->ElementFromHandle(g_hwd, &element); if (FAILED(hr)) { cout << "44" << endl; return; } if (SUCCEEDED(hr) && element != NULL) { IUIAutomationCondition* textPatternCondition; WCHAR wcPaneName[]=L"列表项目"; VARIANT trueVar; trueVar.vt=VT_BSTR; trueVar.bstrVal=SysAllocString(wcPaneName); //hr = _automation->CreateTrueCondition(&textPatternCondition); hr = _automation->CreatePropertyCondition(UIA_LocalizedControlTypePropertyId, trueVar, &textPatternCondition); //设置条件接口 if (FAILED(hr)) { cout << "55" << endl; return; } else { IUIAutomationElementArray *textElement; hr = element->FindAll(TreeScope_Descendants, textPatternCondition, &textElement); if (FAILED(hr)) { cout << "66" << endl; return; } else if (textElement == NULL) { cout << "77" << endl; return; } else { //获取控件内的文本 int i_length; BSTR name; string plpszText; hr = textElement->get_Length(&i_length); if (FAILED(hr)) { return; } IUIAutomationElement* pElement; hr = textElement->GetElement(i_length-1, &pElement); //微信消息列表最上面一条消息 if (FAILED(hr)) { return; } WCHAR PaneName[]=L"按钮"; //消息对象名称 VARIANT Var; Var.vt=VT_BSTR; Var.bstrVal=SysAllocString(PaneName); hr = _automation->CreatePropertyCondition(UIA_LocalizedControlTypePropertyId, Var, &textPatternCondition); if (FAILED(hr)) { return; } IUIAutomationElementArray *ptextElement; pElement->FindAll(TreeScope_Subtree,textPatternCondition,&ptextElement); hr = ptextElement->get_Length(&i_length); if (FAILED(hr)) { return; } IUIAutomationElement* p_Element; hr = ptextElement->GetElement(i_length-1, &p_Element); if (FAILED(hr)) { return; } hr = p_Element->get_CurrentName(&name); if (FAILED(hr)) { cout << "99" << endl; return; } plpszText = _com_util::ConvertBSTRToString(name); SysFreeString(name); if (FAILED(hr)) { cout << "88" << endl; return; } hr = pElement->get_CurrentName(&name); if (FAILED(hr)) { cout << "99" << endl; return; } plpszText += ":"; plpszText += _com_util::ConvertBSTRToString(name); SysFreeString(name); SAFEARRAY *pruntimeId; BOOL trv; hr= pElement->GetRuntimeId(&pruntimeId); _automation->CompareRuntimeIds(pruntimeId,runtimeId,&trv); if(trv == TRUE) { return; } else { runtimeId = pruntimeId; printf("%s\n",plpszText.c_str()); } } textPatternCondition->Release(); } } _automation->Release(); } } cout << "okok" << endl; return ; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。