【发布时间】:2014-04-11 06:50:21
【问题描述】:
GetWindowThreadProcessId(hwndFoundWindow, &dwTrayProcessID);
HANDLE hTrayProc = OpenProcess(PROCESS_ALL_ACCESS, 0, dwTrayProcessID);
int iButtonsCount = SendMessage(hwndFoundWindow, TB_BUTTONCOUNT, 0, 0);
LPVOID lpData = VirtualAllocEx(hTrayProc, NULL, sizeof(TBBUTTON), MEM_COMMIT, PAGE_READWRITE);
int iButton;
DWORD dwBytesRead;
TBBUTTON buttonData;
dwBytesRead = -1;
int chk_data = (int)SendMessage(hwndFoundWindow, TB_GETBUTTON, iButton, (LPARAM)lpData);
ReadProcessMemory(hTrayProc, lpData, &buttonData, sizeof(TBBUTTON), &dwBytesRead);
int len_text = (int)SendMessage(hwndFoundWindow, TB_GETBUTTONTEXTW, buttonData.idCommand, (LPARAM)lpData);
到目前为止,我知道按钮文本的长度,但我还需要让文本显示在控制台上。 我的问题是我真的不知道如何从按钮中获取该文本。请帮忙。
我正在尝试的是...尝试访问 lpData 以获取其中的字符串,但无法做到。
【问题讨论】:
-
如果缓冲区被
'\0'终止,那么您可以使用strcpy将缓冲区内容复制到某个字符串。 -
您的代码不完整,但显然是错误的。您没有显示调用 VirtualAlloc 以在其他进程中分配内存的代码。是你做的吗?您的代码完全错误。您要求一个以空字符结尾的字符串,然后尝试将其读入 TBBUTTON。您应该出示 SSCCE。
-
我写了这个:LPVOID lpData = VirtualAllocEx(hTrayProc, NULL, sizeof(TBBUTTON), MEM_COMMIT, PAGE_READWRITE);
-
你需要更加认真地对待我的 cmets。这是编辑问题所需的内容。 1. 明确说明您正在尝试做什么。 2. SSCCE。 3. 你解决问题的尝试如何失败的细节。
-
我确实知道如何做我认为您正在尝试的事情。但我绝对不会帮助解决现在所处的状态。您需要按照我在上面 cmets 中概述的步骤来解决问题。你必须付出更多的努力。这是一个双向过程。你需要尽自己的一份力量。在您提出正确的问题之前,您不能希望问题得到解答。
标签: winapi