怎样向隐藏的窗口中发送键盘消息?真实的窗口被隐藏了,看到的只是开发者自己画的一个窗口(比如很多网游的窗
怎样向隐藏的窗口中发送键盘消息?
真实的窗口被隐藏了,看到的只是开发者自己画的一个窗口(比如很多网游的窗口(比如QQ三国)),我想向它发送键盘消息。怎样做?
不知道的就别告诉我做不到了。很多外挂什么的已经证明了,能做到。谢谢大家
[解决办法]
LZ做外挂?
关注……
[解决办法]
没做过,不清楚...
直接往隐藏窗口句柄发消息不行吗?
[解决办法]
[解决办法]LZ估计是不知道怎么找到那个隐藏窗口 如果找到了 直接 ::SendMessage(h_wnd, ...) 就是了
[解决办法]不过现在的网游大部分都是使用的directinput 用消息是没用的
[解决办法]SendMessage搞不定?隐藏窗口也有句柄啊.
[解决办法]先EnumProcess,然后,就能得到枚举的进程名。
DWORD pid = // 已知某个进程的ID
CMainWindowIterator itw(pid);
for (HWND hwnd = itw.First(); hwnd; hwnd=itw.Next()) {
// do something
}
//////////////////////////////////////////////////////
// 这个类主要是封装::EnumWindows,列举顶层窗口
//
class CWindowIterator {
protected:
HWND* m_hwnds; // 隶属于某个进程PID窗口句柄数组
DWORD m_nAlloc; // 数组大小
DWORD m_count; // 找到的窗口句柄数
DWORD m_current; // 当前的窗口句柄
static BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lp);
// 虚拟枚举函数
virtual BOOL OnEnumProc(HWND hwnd);
// 在派生中改写此函数来过滤不同种类的窗口
virtual BOOL OnWindow(HWND hwnd) {
return TRUE;
}
public:
CWindowIterator(DWORD nAlloc=1024);
~CWindowIterator();
DWORD GetCount() { return m_count; }
HWND First();
HWND Next() {
return m_hwnds && m_current <m_count ? m_hwnds[m_current++] : NULL;
}
};
////////////////////////////////////
// 列举某个进程的顶层窗口
//
class CMainWindowIterator : public CWindowIterator {
protected:
DWORD m_pid; // 进程ID
virtual BOOL OnWindow(HWND hwnd);
public:
CMainWindowIterator(DWORD pid, DWORD nAlloc=1024);
~CMainWindowIterator();
};
[解决办法]sendmessage给隐藏窗口的handle
[解决办法]隐藏又不是销毁,找到这个隐藏窗口的句柄就可以了。
CWnd *pWnd = FindWindow(NULL, "窗口标题");
//pWnd ->m_hWnd 就是窗口句柄
有了窗口句柄还有什么事办不到?
[解决办法]感觉10楼说得有道理,7楼的应该是属于隐藏进程的解决办法吧,跟楼主有相同爱好,可以交流,
[解决办法]枚举所有进程,貌似根据文件路径名就可以找到其主线程吧。
[解决办法]那就用枚举吧
[解决办法]只要得到窗口句柄,一切便搞定。
如果得不到,就别想了。
[解决办法]顶
[解决办法]你知道程序的可执行文件名吗?比如飞信:FetionFx.exe,然后枚举进程就可以了。例如:
typedef struct tagWNDINFO
{
DWORD dwProcessId;
HWND hWnd;
} WNDINFO, *LPWNDINFO;
static BOOL CALLBACK MyEnumProc(HWND hWnd,LPARAM lParam)
{
DWORD dwProcessId;
GetWindowThreadProcessId(hWnd, &dwProcessId);
LPWNDINFO pInfo = (LPWNDINFO)lParam;
if(dwProcessId == pInfo->dwProcessId)
{
pInfo->hWnd = hWnd;
return FALSE;
}
return TRUE;
}
/*******************************************************************/
/*
函 数 名 称:FindHostWindow
功 能 描 述:用于查找窗口句柄
返回值 说明:成功返回窗口句柄,否则返回NULL
/*******************************************************************/
HWND FindHostWindow()
{
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
//进程快照
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//快照中第一个进程
BOOL bMore = ::Process32First(hProcessSnap, &pe32);
while (bMore)
{
//找到“飞信”,停止遍历
if (!strcmp(pe32.szExeFile, "FetionFx.exe"))
{
break;
}
//遍历快照
bMore = ::Process32Next(hProcessSnap, &pe32);
}
CloseHandle(hProcessSnap);
if (bMore)
{
WNDINFO wi;
wi.dwProcessId = pe32.th32ProcessID;
wi.hWnd = NULL;
//进程句柄转成窗口句柄
EnumWindows(MyEnumProc, (LPARAM)&wi);
return wi.hWnd;
}
return NULL;
}
[解决办法]
UP~
[解决办法]
不懂,顶楼主
[解决办法]
up