示範在 C++ Builder 中使用 Mshtml.h 介面,透過 CppWebBrowser1 元件存取網頁 DOM,定位表單與輸入元素,自動填寫欄位並送出。核心流程:取得 IHTMLDocument2、列舉 forms 集合、依索引取得目標表單、查詢 IHTMLFormElement、再依索引取得輸入框與文字區域、設定 value 屬性、呼叫 submit()。
IHTMLDocument2 *pHTMLDoc = NULL;
LPDISPATCH pDisp = CppWebBrowser1->Document;
if (pDisp && SUCCEEDED(pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHTMLDoc))) {
IHTMLElementCollection *pelement;
if (SUCCEEDED(pHTMLDoc->get_forms(&pelement))) {
tagVARIANT a, i; a.vt = VT_UI4; a.lVal = 0; // 第一個表單
if (SUCCEEDED(pelement->item(a, i, &pDisp))) {
IHTMLFormElement* pFormElem = NULL;
if (pDisp && SUCCEEDED(pDisp->QueryInterface(IID_IHTMLFormElement, (LPVOID*)&pFormElem))) {
LPDISPATCH pDisp_msg = NULL;
tagVARIANT phone, msg, empty;
phone.vt = VT_UI4; phone.lVal = 0; // 第一個輸入框
msg.vt = VT_UI4; msg.lVal = 1; // 第二個文字區域
if (SUCCEEDED(pFormElem->item(phone, empty, &pDisp)) &&
SUCCEEDED(pFormElem->item(msg, empty, &pDisp_msg))) {
IHTMLInputTextElement* phoneElem = NULL;
IHTMLTextAreaElement* msgElem = NULL;
if (SUCCEEDED(pDisp->QueryInterface(IID_IHTMLInputTextElement, (void**)&phoneElem)) &&
SUCCEEDED(pDisp_msg->QueryInterface(IID_IHTMLTextAreaElement, (void**)&msgElem))) {
phoneElem->put_value(SysAllocString(L"888888"));
msgElem->put_value(SysAllocString(L"你好"));
pFormElem->submit();
// 釋放所有介面指標...
}
}
}
}
}
}
QueryInterface 與 COM 方法回傳的 HRESULT,失敗即釋放資源並返回錯誤代碼。tagVARIANT 指定集合索引,VT_UI4 表示無號整數索引。Document → forms 集合 → 表單 → 表單內元素集合 → 具體元素介面(IHTMLInputTextElement、IHTMLTextAreaElement)。Release(),避免洩漏。