找了好久才解决这个问题,直接sendmessage不好使,必须读写内存才可以!
DWORD dwProcessID;
HANDLE hProcess;LPVOID lpCommon;
int nAllocSize = 255;
int nPnlLen;
char szBuf[255];
DWORD dwBytesRead;
HWND hStatusBar=(HWND)0x001C10FC;
// 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中栏目的内容
char* ttt="蝴蝶飞飞";
WriteProcessMemory(hProcess, lpCommon,ttt,_tcslen(ttt),&dwNumberOfBytesRead);
::SendMessage (hStatusBar, SB_SETTEXTA, 2,(LPARAM)lpCommon);
// 循环读取每一个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);