怎么用VC修改任意网页中text文本框的值。(200分)

oldfhp 2003-09-22 07:31:36
有个网页,用showmodeldialog打开的,没有工具栏、菜单,对右键没反应。
请问怎么用VC编写一个外挂程序,修改网页中text文本框的值?
有重赏!!!
参见:
http://expert.csdn.net/Expert/topic/2221/2221243.xml?temp=.8733637
两贴并一贴给分。
...全文
228 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oldfhp 2003-10-05
  • 打赏
  • 举报
回复
用鼠标钩子没法设置网页text的值
oldfhp 2003-09-25
  • 打赏
  • 举报
回复
我是个初学者,知道vc的框架。我感觉这个方法可能不行:网页这东西可烦人,ie只是解释内存的内容。不象软件,实实在在,显示与程序一致。网页的text框中的内容在内存理的位置前后不一样。
反正我也说不清楚。我先试试。

另外,能不能向正在下载的网页里加一点我自己的html代码?这样的话,此问题就容易了。
蒋晟 2003-09-22
  • 打赏
  • 举报
回复
贴一篇codeguru的帖子给你,是讲如何取得网页密码的,你可以参考,只不过一个是get一个是set的区别
www.codeguru.com/ieprogram/SPwdSpy.html
abrams 2003-09-22
  • 打赏
  • 举报
回复
return CallNextHookEx(g_hHook, code, wParam, lParam);
}
BOOL InitHook(HWND hWnd)
{
try {
if (!hWnd){
return FALSE;
}

g_hHostWnd = hWnd;
g_hHook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, g_hDllIns, 0);
return g_hHook != NULL;
}
catch (...){

return FALSE;
}
}
HWND WINAPI GetParentFromHwnd(HWND hWnd)
{
HWND hParWnd;
try {
do {
hParWnd = GetParent(hWnd);
if (hParWnd){
hWnd = hParWnd;
}
}while (hParWnd);
}
catch (...){
}

return hWnd;
}

void GetPassText(HWND hWndPass, HWND hWndShowPass)
{
try {
HWND hParWnd = GetParentFromHwnd(hWndPass);
::PostMessage(hParWnd, UM_GETPASS, (WPARAM)hWndPass, (LPARAM)hWndShowPass);
}
catch(...){
}
}
//卸载
BOOL ReleaseHook()
{
BOOL bSuccess = FALSE;
try {
if(g_hHook != NULL)
{
bSuccess = UnhookWindowsHookEx(g_hHook) ? TRUE : FALSE;
g_hHook = NULL;
g_hHostWnd = NULL;
}
}
catch (...){
}
return bSuccess;
}
再在Password.h中加入函数导出声明
extern "C" _declspec(dllexport) void GetPassText(HWND hWndPass, HWND hWndShowPass);
extern "C" _declspec(dllexport) BOOL InitHook(HWND hWnd);
extern "C" _declspec(dllexport) BOOL ReleaseHook();

最后编译、链接,把生成的Password.dll,Password.lib拷贝到GetPass工程的目录下,在GetPass工程的GetPassDlg.cpp的最上面加入如下代码
#pragma comment(lib,"Password.lib")
//隐式链接
extern "C" _declspec(dllexport) void GetPassText(HWND hWndPass, HWND hWndShowPass);
extern "C" _declspec(dllexport) BOOL InitHook(HWND hWnd);
extern "C" _declspec(dllexport) BOOL ReleaseHook();
最后运行程序,把鼠标指向应用程序的密码框就可以看到密码了。
但是我们把鼠标指向网页上的密码框时我们无法得到其内容,因为网页密码框不是一般的EDIT控件,因此不能取得网页密码框的句柄.要实现这个功能,只好通过WebBrowser控件的有关COM接口了.因此取得这些接口是整个程序的关键.
在msdn上可以找到在不同的进程中取得IE的Webbrowser控件的IHTMLDocument2接口的方法它的实现机理是向Webbrowser控件(窗口类名是"Internet Explorer_Server")发一个WM_HTML_GETOBJECT,然后把返回值传给Microsoft Active Accessibility (MSAA) 函数ObjectFromLresult,这样你会取得一个已经编排(Marshaling)过的COM接口.如下函数所示:
IHTMLDocument2* GetDocInterface(HWND hWnd)
{
// 我们需要显示地装载OLEACC.DLL,这样我们才知道有没有安装MSAA
HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
IHTMLDocument2* pDoc2=NULL;
if ( hInst != NULL ){
if ( hWnd != NULL ){
CComPtr<IHTMLDocument> spDoc=NULL;
LRESULT lRes;
/*由于WM_HTML_GETOBJECT非Windows标准消息,所以需要RegisterWindowMessage*/
UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
::SendMessageTimeout( hWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );

/*取得ObjectFromLresult函数的地址*/
LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
if ( pfObjectFromLresult != NULL ){
HRESULT hr;
hr=pfObjectFromLresult(lRes,IID_IHTMLDocument,0,(void**)&spDoc);
if ( SUCCEEDED(hr) ){
CComPtr<IDispatch> spDisp;
CComQIPtr<IHTMLWindow2> spWin;
spDoc->get_Script( &spDisp );
spWin = spDisp;
spWin->get_document( &pDoc2 );
}
}
}
::FreeLibrary(hInst);
}
else{//如果没有安装MSAA
AfxMessageBox(_T("请您安装Microsoft Active Accessibility"));
}
return pDoc2;
}
abrams 2003-09-22
  • 打赏
  • 举报
回复
本文将讲述如何在win2000下如何编程实现得到应用程序中的密码框中的密码及网页密码框中的密码
记得在win98的时候,只要向一个密码框发一个WM_GETTEXT的消息就可以很容易的得到了其中的密码,微软可能已经意识到了,这一个不安的因素,在win2000/xp中,像以前那样写一个应用程序,向别的程序的密码框简单的发送一个WM_GETTEXT的消息就得到密码了,原因是在进程间数据是相互隔离的,如果参数窗口句柄不属于该进程的调用线程,函数执行就会失败,为了解决这个问题,我们可以用钩子函数实现,钩子函数一般存于动态链接库中,win32会自动把动态链接库映射到它影响的各个进程,在这其间该动态链接库的其它函数也会连带映射到运行的进程之中。这样钩子函数也就会和它的寄主程序窗口融为一体。在这样的一个进程中,由于dll的插入映射使得函数参数窗口句柄hwnd就属于该进程了,而这是win32所允许的。所以写一个dll并将其注入到有密码的进程中,这样就可以dll看成进程的一步分了,再用WM_COPYDATA来进行进程的通信,来将密码显示发送到我们要显示的程序中。
好了理论说完了,开始动手用vc做一个程序了。
先建立一个基于对话框的程序GetPass,其它选项为默认值。
再加入一个edit控件,其ID为IDC_EDIT1用来显示得到的密码信息。
在CGetPassDlg::OnInitDialog()的最后中加入
const CWnd * pWndInsertAfter;
pWndInsertAfter = &wndTopMost;
SetWindowPos(pWndInsertAfter,0,0,0,0,SWP_NOSIZE);//将窗口放于最上层

SetTimer(1,100,NULL);//每隔500毫秒来取得一次密码。

BOOL k=InitHook(this->m_hWnd);//挂接钩子
if(k==FALSE)
AfxMessageBox("false");
重载OnTimer函数,加入如下代码
HWND hwnd;
CPoint MousePos;
GetCursorPos(&MousePos); //取得当前鼠标的坐标

hwnd= ::WindowFromPoint(MousePos);//得到当前坐标的对应窗口的句柄
GetPassText(hwnd, m_hWnd);//调用这个函数来取得密码

得用classwzard为消息WM_COPYDATA加入响函数OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)加入如下代码,来得到dll传来的密码:
SetDlgItemText(IDC_EDIT1, (LPCTSTR)pCopyDataStruct->lpData);
这时编译我们的程序时会有两个错误如下
error C2065: 'InitHook' : undeclared identifier
error C2065: 'GetPassText' : undeclared identifier
这两个函数是我们要在dll中建立。所以我们再新建一个名为Password的project,选择MFC AppWizard(dll),并且Add to Current Workplace
并且选择add to current workspace.其它的按照默认值。
先在Password.cpp的最上面加入变量与宏定义

#define MAX_TEXTLEN 1024
#define UM_GETPASS WM_USER + 0x392
HINSTANCE ghInstance = 0;
#pragma data_seg("ALLDATA")
HHOOK g_hHook = NULL;
HINSTANCE g_hDllIns = NULL;
HWND g_hHostWnd = NULL;
#pragma data_seg()

再改写一下Password.def其代码如下:
LIBRARY "Password"
DESCRIPTION 'Password Windows Dynamic Link Library'
EXPORTS
InitHook @1
ReleaseHook @2
GetPassText @3
SECTIONS
ALLDATA SHARED


//我们手动加入的函数声明与变量
利用classwzard为CPasswordApp加入CPasswordApp::InitInstance()
其中的代码为:

g_hDllIns =AfxGetInstanceHandle();
DisableThreadLibraryCalls(g_hDllIns);
再在Password.cpp中的全局变量CPasswordApp theApp之后加入如下代码:

LRESULT CALLBACK GetMsgProc(int code, WPARAM wParam, LPARAM lParam)
{
try {
if (code >= 0){

LPMSG pMsg = (LPMSG)lParam;

HWND hShowPassWnd = (HWND)pMsg->lParam;

if (pMsg->message == UM_GETPASS && g_hHostWnd == hShowPassWnd){ //获取*号中的内容

HWND hPassWnd = (HWND)pMsg->wParam; //*号窗口的HWND

if (hPassWnd){
TCHAR szPassText[MAX_TEXTLEN];
ZeroMemory(szPassText, MAX_TEXTLEN);
::SendMessage(hPassWnd, WM_GETTEXT, MAX_TEXTLEN, (LPARAM)szPassText); //获取内容

COPYDATASTRUCT cd;
ZeroMemory(&cd, sizeof(cd));
cd.dwData = (DWORD)hPassWnd;
cd.cbData = strlen(szPassText) + 1;
cd.lpData = szPassText;
SendMessage(hShowPassWnd, WM_COPYDATA, (WPARAM)hPassWnd, (LPARAM)&cd);//发送给ShowPass窗口
}
}
}
}
catch(...){
}
abrams 2003-09-22
  • 打赏
  • 举报
回复
贴一篇csdn的帖子给你,是讲如何取得网页密码的,你可以参考,只不过一个是get一个是set的区别,做个系统钩子把
内容概要:本文围绕“阶梯碳下考虑P2G-CCS与供需灵活响应的IES优化调度”展开,基于Matlab平台构建综合能源系统(IES)在阶梯式碳交易机制下的优化调度模型。研究深度融合电制气(P2G)与碳捕集、利用与封存(CCS)技术,结合需求侧灵活响应机制,旨在提升系统的低碳运行能力与经济性。通过建立多能流耦合的优化模型,协调电力、天然气、热力等多种能源形式的协同调度,有效降低系统碳排放强度,并借助YALIMIP工具包调用求解器进行高效求解。文档提供了完整的代码实现、模型构建流程与结果析方法,涵盖从问题建模到仿真实现的全过程,具备较强的可复现性与科研参考价。; 适合人群:具备电力系统、能源系统或优化建模相关背景的研究生、高校教师及工程技术人员,尤其适合从事综合能源系统、碳减排策略、P2G与CCS技术集成研究的专业人员,需熟练掌握Matlab编程与基本的数学规划知识。; 使用场景及目标:①用于研究阶梯式碳交易政策下综合能源系统的低碳经济调度策略;②支撑P2G-CCS技术与需求响应机制在IES的仿真集成与性能评估;③作为撰写高水平学术论文(如EI/SCI收录)的技术基础与复现资源,推动碳和背景下能源系统优化方向的创新研究。; 阅读建议:建议结合百度网盘提供的完整代码与资料包,按照模块逐步调试程序,重点理解目标函数的设计逻辑、碳交易成本的建模方式、约束条件的数学表达及求解器的配置方法,同时关注多能耦合设备的建模细节,配合公众号“荔枝科研社”获取持续的技术支持与案例拓展。
内容概要:本文系统研究了基于卷积神经网络(CNN)与支持向量机(SVM)融合的CNN-SVM混合模型在数据类预测的应用,尤其聚焦于工业故障识别领域。通过Matlab平台实现,该方法首先利用CNN强大的多层次特征提取能力对原始输入数据进行深度特征学习,自动捕获关键局部模式与空间结构信息,随后将提取的高层特征作为输入传递至SVM类器,借助SVM在高维空间小样本条件下卓越的类性能与泛化能力完成最终判别任务。文详尽阐述了模型的整体架构设计、网络参数配置、训练优化流程及特征迁移机制,充结合了深度学习在特征表达上的优势与传统机器学习在类决策上的稳健性。实验部通过实际故障数据集验证了该混合模型相较于单一CNN或SVM模型在类准确率、鲁棒性和抗过拟合能力方面的显著提升,证明了其在复杂故障诊断任务的有效性与先进性; 适合人群:具备一定机器学习与深度学习理论基础,熟悉Matlab编程环境,从事故障诊断、模式识别、智能制造、电力系统监控或工业数据析等相关领域的研究生、科研人员及工程技术开发者; 使用场景及目标:① 应用于旋转机械、电力设备、航空航天等领域的多类别故障识别与状态监测;② 掌握深度特征提取与传统类器融合的技术路径,提升小样本、高噪声环境下数据类的精度与可靠性;③ 为撰写高水平学术论文、开展科研项目或工程实践提供可复现的算法框架与完整代码支持; 阅读建议:读者应深入理解CNN与SVM的协同工作机制,重点析特征提取层与类层之间的接口设计,建议动手运行并调试所提供的Matlab代码,尝试在不同数据集上进行迁移实验与参数调优,以全面掌握该混合模型的应用技巧与优化策略。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧