如何读取一正在运行的程序上的label及相对应的文本内容....
据说使用hook,,,那位大家介绍一下具体用法...谢谢
据说使用hook,,,那位大家介绍一下具体用法...谢谢
解决方案 »
- error C2371
- 创建几个DLL
- static数据问题
- treectrl已经知道当前项的值如何得到这一个子项的句柄?
- 如何将datagrid中的数据导出到excel?
- 怎样用hook,拦截系统消息
- 不能显示的字符不能够赋值给字符类型的数组么?
- 如何打开一个数据库中的一个表?
- 硬盘的C区读不出来,下载了easyRecovery来恢复却不好用,还有啥好方法或好软件,请帮忙提供一下下载网址或软件名供搜索用
- 由于计算机所能表示和处理的数的有效数字位数有限,因此在进行大数运算时会产生溢出要求用C语言编写程序实现大整数的四则运算(加、减、乘、除)。
- 一个很奇怪的编译问题,高手请进
- 关于DLL注入socket连接的问题
int nLVItemCount;
HANDLE hProcess;
LVITEM lvItemLocal;
DWORD dwBytesRead, dwBytesWrite;
BOOL bSuccess,bWriteOK;
DWORD dwError;
hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessID);
if(NULL == hProcess)
{
printf("打开进程失败!\n");
}
LPVOID lpTextRemote = VirtualAllocEx(hProcess,NULL,2048,MEM_COMMIT,PAGE_READWRITE);
LPVOID lpListItemRemote = VirtualAllocEx(hProcess,NULL,sizeof(LVITEM),MEM_COMMIT,PAGE_READWRITE);
if((!lpTextRemote) || (!lpListItemRemote))
{
printf("不能在指定进程内分配存储空间!\n");
}
//查询虚拟内存的保护属性
MEMORY_BASIC_INFORMATION MemInfo;
DWORD dwOldProtect;
MemInfo.RegionSize = sizeof(MEMORY_BASIC_INFORMATION);
VirtualQueryEx(hProcess,lpTextRemote,&MemInfo,sizeof(MemInfo));
if(MemInfo.State != MEM_COMMIT)
{
printf("分配状态失败!\n");
}
if(MemInfo.Protect & (PAGE_NOACCESS|PAGE_GUARD|PAGE_READONLY))
{
if(VirtualProtectEx(hProcess,(void*)lpTextRemote,4,PAGE_READWRITE,&dwOldProtect) == FALSE)
{
printf("修改内存页属性失败!\n");
dwError = GetLastError();
printf("%d\n",dwError);
}
}
nLVItemCount=ListView_GetItemCount(hwnd);// 获取ListView行数
for(int i=0;i < nLVItemCount;++i)
{
ZeroMemory(szBuf,2048);
bWriteOK = WriteProcessMemory(hProcess,lpTextRemote,(LPVOID)szBuf,2048,(LPDWORD)&dwBytesWrite);
dwError = GetLastError();
printf("%d\n",dwError);
if(!bWriteOK)
{
printf("写内存错误\n");
}
for(int j=0;j<5;++j)
{
lvItemLocal.iItem = j; //获取第j列的数据
lvItemLocal.iSubItem = 0;
lvItemLocal.mask = LVIF_TEXT;
lvItemLocal.cchTextMax = 2047;
lvItemLocal.pszText = (LPTSTR)lpTextRemote;
dwBytesWrite = 0;
//将LVITEM结构写入进程
bWriteOK = WriteProcessMemory(hProcess,lpListItemRemote,(LPVOID)&lvItemLocal,sizeof(LVITEM),(LPDWORD)&dwBytesWrite);
dwError = GetLastError();
printf("%d\n",dwError);
if(!bWriteOK) //写内存错误
{
printf("写内存错误\n");
}
SendMessage(hwnd,LVM_GETITEMTEXT,(WPARAM)j,(LPARAM)lpListItemRemote);
bSuccess = ReadProcessMemory(hProcess,lpTextRemote,szBuf,2048,&dwBytesRead);
dwError = GetLastError();
printf("%d\n",dwError);
//从指定进程存储空间读取文本
if(!bSuccess) //不能在指定进程内读取文本
{
printf("不能在指定进程内读取文本\n");
}
if(szBuf == NULL)
{
printf("获取内容失败!\n");
}
MyData = szBuf;
MessageBox(NULL,szBuf,NULL,MB_OK);
printf("%s\n",szBuf);
}
}
//在指定进程内释放存储空间
VirtualFreeEx(hProcess,lpListItemRemote,0,MEM_RELEASE);
VirtualFreeEx(hProcess,lpTextRemote,0,MEM_RELEASE);
//关闭指定进程句柄
CloseHandle(hProcess);
这是获取外部进程的ListView的数据的代码,其它的类似!
VirtualAlloc
GlobalAlloc
有什么区别呢?