首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

vc中获得delphi程序中的状态栏句柄后,数据提取有关问题

2012-01-19 
vc中获得delphi程序中的状态栏句柄后,数据提取问题vc的程序,获得了一个delphi程序的状态栏句柄后,如何提取

vc中获得delphi程序中的状态栏句柄后,数据提取问题
vc的程序,获得了一个delphi程序的状态栏句柄后,如何提取其中的数据呢
我写的是CStatusBarCtrl   *wndStatusBar   =   (CStatusBarCtrl*)(CWnd::FromHandle(ghwndStatusBar));//ghwndStatusbar是获得的状态栏指针,类型是CWnd。
如果获得的是vc里面的状态栏,经过这个转换过后,可以通过wndStatusBar-> GetText(strInfo,0,NULL);来获取相应的分栏的字符串,可是如果获得的是delphi程序的状态栏的句柄的话,在wndStatusBar-> GetText(strInfo,0,NULL);的时候就会报错。

请问有什么方法可以在vc中提取获得的delphi程序的状态栏的分栏的字符串?多谢。

[解决办法]
跨进程的读取,你这样肯定是不行的。

首先通过向目标窗口发送SB_GETPARTS消息可以得知状态栏分几列。

然后用GetWindowThreadProcessId,通过状态栏窗口的句柄得到该窗口所属进程的PID,然后用OpenProcess打开目标进程,用VirtualAllocEx开辟一个空间,通过SB_GETTEXT消息读取状态栏文本,再利用ReadProcessMemory将文本读本进程并显示。
[解决办法]
DWORD dwProcessID;
HANDLE hProcess;
LPVOID lpCommon;
int nAllocSize = 255;
int nPnlLen;
char szBuf[255];
DWORD dwBytesRead;

// StatusBar的项目数(列数)
int nPnlCount = SendMessage(hStatusBar, SB_GETPARTS, 0, 0);

// hStatusBar是状态栏窗口句柄
GetWindowThreadProcessId(hStatusBar, &dwProcessID);
//
hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ |
PROCESS_VM_WRITE, false, dwProcessID);
lpCommon = VirtualAllocEx(hProcess, NULL, nAllocSize,
MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
// 循环读取每一个StatusBar项目
for(int i=0; i <nPnlCount; i++)
{
SendMessage(hStatusBar, SB_GETTEXT, i, LPARAM(lpCommon));
ReadProcessMemory(hProcess, lpCommon, szBuf, 255, &dwBytesRead);
// 文本内容在szBuf中
// 再这里作处理,可以将szBuf保存到一个列表中,自己看着办
}
VirtualFreeEx(hProcess, lpCommon, 0, MEM_RELEASE);
CloseHandle(hProcess);

热点排行