- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我早些时候发布了一个发送消息问题,我们得出的结论是,从 Xchat 获取聊天窗口非常困难。我现在已经转移到 ThrashIRC 并使用 spy++ 能够找到聊天窗口(突出显示):
如您所见,它确实有一个标题,这意味着它确实看到了文本。这是我用来获取 HWND 和文本的代码:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <iostream>
#include <strsafe.h>
using namespace std;
void FindThrash()
{
cout << "[ThrashIRC]" << endl;
cout << "| find ThrashIRC window" << endl;
HWND hwndThrashIRC = FindWindow(L"ThrashIRC", NULL);
if (NULL != hwndThrashIRC)
{
cout << " + found ThrashIRC window" << endl;
cout << "| find MDIClient window" << endl;
HWND hwndMDIClient = FindWindowEx(hwndThrashIRC, NULL, L"MDIClient", NULL);
if (NULL != hwndMDIClient)
{
cout << " + found MDIClient window" << endl;
cout << "| find DefChannel window" << endl;
HWND hwndDefChannel = FindWindowEx(hwndMDIClient, NULL, L"DefChannel", NULL);
if (NULL != hwndDefChannel)
{
cout << " + found MDIClient window" << endl;
cout << "| find RichEdit20W window" << endl;
HWND hwndRichEdit20W = FindWindowEx(hwndDefChannel, NULL, L"RichEdit20W", NULL);
if (NULL != hwndRichEdit20W)
{
cout << " + found RichEdit20W window" << endl << endl;
cout << "- get text " << endl;
const int bufferSize = 32768;
char textBuffer[bufferSize] = "";
SendMessage(hwndRichEdit20W, WM_GETTEXT, (WPARAM)bufferSize, (LPARAM)textBuffer);
cout << "[begin text]" << endl;
cout << textBuffer << endl;
cout << "[end text]" << endl;
}
else
{
cerr << "RichEdit20W not found." << endl;
}
}
else
{
cerr << "DefChannel not found." << endl;
}
}
else
{
cerr << "MDIClient not found." << endl;
}
}
else
{
cerr << "ThrashIRC not open." << endl;
}
}
void ErrorExit(LPTSTR lpszFunction)
{
// Retrieve the system error message for the last-error code
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf,
0, NULL);
// Display the error message and exit the process
lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
(lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40)*sizeof(TCHAR));
StringCchPrintf((LPTSTR)lpDisplayBuf,
LocalSize(lpDisplayBuf) / sizeof(TCHAR),
TEXT("%s failed with error %d: %s"),
lpszFunction, dw, lpMsgBuf);
MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK);
LocalFree(lpMsgBuf);
LocalFree(lpDisplayBuf);
ExitProcess(dw);
}
int main()
{
FindThrash();
if (!GetProcessId(NULL))
ErrorExit(TEXT("GetProcessId"));
return 0;
}
缓冲区只有那么大,因为 1:我认为缓冲区太小可能是一个错误,并且 2:由于文本量的原因,缓冲区必须很大。任何建议/代码将不胜感激!谢谢!
最佳答案
GetProcessID
期望传递一个有效的进程句柄,如 MSDN documentation 中明确说明的那样.您使用 NULL
作为参数调用它:
if (!GetProcessId(NULL))
当您明确向它提供无效的进程句柄时,为什么您希望它返回任何东西但无效的句柄错误?
为了确保您知道,HWND
是窗口句柄,而不是进程句柄。 FindWindow
和 FindWindowEx
返回一个窗口句柄。
关于c++ - GetProcessId 失败,错误 6 : The handle is invalid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20927283/
当我执行下面的代码时——: #include #include using namespace std; int main() { cout << GetCurrentProcessId()
我使用 GetProcessID 不小心从应用程序中删除了 Win2K 兼容性. 我这样使用它,以获取已启动应用程序的主要 HWND。 ShellExecuteEx(&info); // Launch
我正在使用下面的方法 [DllImport("kernel32.dll", SetLastError=true)] static extern int GetProcessId(Int
我早些时候发布了一个发送消息问题,我们得出的结论是,从 Xchat 获取聊天窗口非常困难。我现在已经转移到 ThrashIRC 并使用 spy++ 能够找到聊天窗口(突出显示): 如您所见,它确实有一
我在调试 Android 项目时遇到问题。我可以部署到设备并运行它,一切正常,但如果我尝试调试,应用程序将部署到设备并非常短暂地打开,启动画面显示但应用程序随后关闭。 我在 Visual Studio
我是一名优秀的程序员,十分优秀!