“通过ReadProcessMemory来获取系统托盘区图标的位置”产生的有关问题
“通过ReadProcessMemory来获取系统托盘区图标的位置”产生的问题
获取图标信息的代码,已经有了,并且运行正常。
代码有以下几点,不是很理解。。。
⑴, ⑶ 大致没什么问题。
关键是 ⑵, SendMessage 一个 TB_GETBUTTON 消息,把结果放到 Buff 指定的地方。
我这里不理解:SendMessage 难道能区分Buff是哪个进程的地址,从而指定由相应进程来处理吗?
因为,我又在之后 SendMessage 一个 TB_GETBUTTONTEXT 消息,但是最后一个参数传错值了,(计算偏移时,想把起始地址Buff转换成PBYTE,结果转换成BYTE了),结果,explorer.exe 访问违规, 崩溃了。
我很纳闷,根据我的理解,应该是我的程序访问违规啊。
难道是我对 ⑴ 的理解不太透彻?求解惑。
这个问题,我觉得是系统机制问题,就发到这里了,希望能够有人看到。。。
------解决方案--------------------
关键是 ⑵, SendMessage 一个 TB_GETBUTTON 消息,把结果放到 Buff 指定的地方
????
这个是把buffer当做消息参数给hwnd窗口发过去了吧
------解决方案--------------------
老弟,好好看看MSDN对这几个函数的说明吧。WriteProcessMemory的说明,在ProcessId的进程中传
错了参数,肯定是要出问题。
------解决方案--------------------
w你操作的是Explorer进程,当然崩溃的是Explorer了。
获取图标信息的代码,已经有了,并且运行正常。
代码有以下几点,不是很理解。。。
- C/C++ code
TBBUTTON Info; HANDLE ProcessHandle; DWORD ProcessId; LPSTR Buff; int Count; // ... ProcessHandle = OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, FALSE, ProcessId); Buff = (LPSTR)VirtualAllocEx(ProcessHandle, NULL, 4096, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);// ⑴ Count = SendMessage(hWnd, TB_BUTTONCOUNT, 0, 0); for (i = 0; i < Count; i++) { memset(&Info, 0, sizeof(Info)); WriteProcessMemory(ProcessHandle, Buff, &Info, sizeof(Info), &NumberOfBytesProcessed); SendMessage(hWnd, TB_GETBUTTON, i, (LPARAM)Buff);// ⑵ ReadProcessMemory(ProcessHandle, Buff, &Info, sizeof(Info), &NumberOfBytesProcessed);// ⑶ //... } // ...
⑴, ⑶ 大致没什么问题。
关键是 ⑵, SendMessage 一个 TB_GETBUTTON 消息,把结果放到 Buff 指定的地方。
我这里不理解:SendMessage 难道能区分Buff是哪个进程的地址,从而指定由相应进程来处理吗?
因为,我又在之后 SendMessage 一个 TB_GETBUTTONTEXT 消息,但是最后一个参数传错值了,(计算偏移时,想把起始地址Buff转换成PBYTE,结果转换成BYTE了),结果,explorer.exe 访问违规, 崩溃了。
我很纳闷,根据我的理解,应该是我的程序访问违规啊。
难道是我对 ⑴ 的理解不太透彻?求解惑。
这个问题,我觉得是系统机制问题,就发到这里了,希望能够有人看到。。。
------解决方案--------------------
关键是 ⑵, SendMessage 一个 TB_GETBUTTON 消息,把结果放到 Buff 指定的地方
????
这个是把buffer当做消息参数给hwnd窗口发过去了吧
------解决方案--------------------
老弟,好好看看MSDN对这几个函数的说明吧。WriteProcessMemory的说明,在ProcessId的进程中传
错了参数,肯定是要出问题。
------解决方案--------------------
w你操作的是Explorer进程,当然崩溃的是Explorer了。