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);
}
使用 VirtualAllocEx 远程分配一个 (HRAWINPUT)lParam
case WM_INPUT:
{
UINT dwSize;
GetRawInputData((HRAWINPUT)lParam, RID_INPUT,NULL,&dwSize,sizeof(RAWINPUTHEADER));
LPBYTE lpb = new BYTE[dwSize];
if (lpb == NULL)
{
return 0;
}
if (GetRawInputData((HRAWINPUT)lParam,RID_INPUT,lpb,&dwSize,sizeof(RAWINPUTHEADER)) !=
dwSize)
OutputDebugString (TEXT("GetRawInputData doesn't return correct size !\n"));
RAWINPUT* raw = (RAWINPUT*)lpb;
if (raw->header.dwType == RIM_TYPEKEYBOARD)
{
if ( raw->data.keyboard.Message == WM_KEYDOWN)
{
if (!IsInKeys(raw->data.keyboard.VKey))
{
char keytext[10] = {0};
BYTE state[256] = {0};
//通过虚拟键盘码得到名字
ToAscii(raw->data.keyboard.VKey,raw->data.keyboard.MakeCode,state,(LPWORD)keytext ,0);
char buf[10] = {0};
string s = "键盘按下 虚键码:"+ string(keytext);
MessageBoxA(NULL,s.c_str(),"键盘",MB_OK);
}
}
if( raw->data.keyboard.Message == WM_KEYUP)
{
erasekey(raw->data.keyboard.VKey);
}
}
delete[] lpb;
return 0;
}// end case WM_INPUT
https://msdn.microsoft.com/en-us/library/ms645590(VS.85).aspx