15,979
社区成员
发帖
与我相关
我的任务
分享
void CRemoteListCtrlDlg::RemoteHeaderItem(HWND hWnd)
{
// GetItemCount
int nHeaderCount=::SendMessage(hWnd,HDM_GETITEMCOUNT,0,0);// 不带 指针 参数
// Get hProcess
DWORD pid;
GetWindowThreadProcessId(hWnd,&pid);
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
//
HDITEM *pHeaderItem = (HDITEM*)VirtualAllocEx(hProcess, NULL, sizeof(HDITEM), MEM_COMMIT, PAGE_READWRITE);
char *pItem = (char*)VirtualAllocEx(hProcess, NULL, 80, MEM_COMMIT, PAGE_READWRITE);
if ((!pHeaderItem) || (!pItem))
{
::MessageBox(NULL, "无法分配内存!", "错误!", NULL);
CloseHandle(hProcess);
return;
}
//
HDITEM HeaderItem;
HeaderItem.cchTextMax = 80;
HeaderItem.mask = HDI_TEXT;
HeaderItem.pszText = pItem;
//
char ItemBuf[80];
for(int i=0; i<nHeaderCount; i++)
{
HeaderItem.iOrder=i;
WriteProcessMemory(hProcess, pHeaderItem, &HeaderItem, sizeof(HDITEM), NULL);
::SendMessage(hWnd, HDM_GETITEM, i, (LPARAM)pHeaderItem);// 带 同进程 的指针 !
ReadProcessMemory(hProcess, pItem, ItemBuf, 80, NULL);
// afxDump << ItemBuf << "\n";
}
//释放内存
CloseHandle(hProcess);
VirtualFreeEx(hProcess, pHeaderItem, 0, MEM_RELEASE);
VirtualFreeEx(hProcess, pItem, 0, MEM_RELEASE);
}
BOOL SimClick(LPCWSTR wsWindName, UINT uBtnID)
{
BOOL bRet = FALSE;
HWND hParent = FindWindowW(NULL, wsWindName);
HWND hChild = GetDlgItem(hParent, uBtnID);
if(hParent && hChild)
{
bRet = SendMessageW(hParent, WM_COMMAND,
MAKEWPARAM(uBtnID, BN_CLICKED), (LPARAM)hChild);
}
return bRet;
}
void CDlg7Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
SimClick(L"计算器", 0x83); //计算器数字7
}