比如魔兽争霸是全屏运行看不到标题栏。。我要用FindWindow获得war3的窗口句柄,到哪去找到标题文字来?
解决方案 »
- 请教GradientFill问题,up者勿进!
- 怎么能使where子句重复使用?
- 如何获得其他程序窗口中带有焦点的控件的句柄呀,我想使用GetFocus函数获得,可是不行,请大家指导我1下。
- 如何实现excel中插入图表的XY散点图?
- 急!!多文档视图结构能否在视图区域内加入控件?如何实现?多谢!!!
- 我想为按钮的按下、弹起触发不同的消息,应该怎么办?
- 控件通知问题?
- 请教围棋自动提子的算法
- 问个老问题,无法定位程序输入点getnameinfo于动态链接库ws2_32.dll上
- 我知道VC内一定有自带的队列,但我不知道该加什么头文件和怎么声明!望各位大哥指点密经!!
- 拿到数据,然后在窗口上播放。如何实现。
- 我在编写API串口时,出现zmouse.h和mbstring.h系统文件打不开?
咋进来一看 貌似楼主是想根据 窗体标题去找句柄呢
还有 话说 大概 貌似 记得 FindWindow(类名,标题名)用用类名查找啊
EnumWindows();/GetWindowThreadProcessId();枚举窗口,然后得到ID,和上面的比对,如果ID相等,即找到该HWND窗口句柄
#include "Psapi.h"
#pragma comment(lib, "Psapi.lib")BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam);
BOOL ComparProcessnameById(DWORD processID, LPCTSTR pName);void CGetProcessUserDlg::OnBnClickedButtonGetwindowtext()
{
TCHAR tmp[MAX_PATH];
memset(tmp,0,MAX_PATH);
wcscpy(tmp,_T("notepad.exe")); //打开一个记事本程序,你也可以手动打开一个,用来枚举这个程序,当然也可以是任意程序.
//这两行代码仅用来示例,实际使用时无需这两行。
ShellExecute(NULL,_T("open"),tmp,NULL,NULL,SW_MINIMIZE);
Sleep(1000); //获取“记事本”的进程ID
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
if (EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded ))
{
cProcesses = cbNeeded / sizeof(DWORD);
for (i = 0; i < cProcesses; i++)
if( aProcesses[i] != 0 )
if (TRUE == ComparProcessnameById(aProcesses[i], tmp))
EnumWindows(EnumWindowsProc,aProcesses[i]); }
}BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
TCHAR tWindowText[256],tWindowClassName[256];
DWORD dwID = -1; //获得该“窗体”的进程ID
GetWindowThreadProcessId(hwnd,&dwID);
if (dwID == lParam)
{
//由于该进程ID下的所有窗体都将被枚举到,而我们只需要主窗体的Text;
//使用spy++查看主窗体的“类名”,与之匹配的才是我们需要的。
GetClassName(hwnd,tWindowClassName,256);
if (0 == _tcscmp(tWindowClassName,_T("Notepad")))
{
memset(tWindowText,0,256);
GetWindowText(hwnd,tWindowText,256); //输出结果
TCHAR tmp[256];
memset(tmp,0,256);
_stprintf(tmp,_T("%s\n"),tWindowText);
OutputDebugString(tmp);
}
}
return TRUE;
}BOOL ComparProcessnameById(DWORD processID, LPCTSTR pName)
{
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>"); // 获得进程的句柄
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |PROCESS_VM_READ,FALSE, processID); // 获得进程名称
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded; if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(TCHAR) );
if (0 == _tcscmp(szProcessName,pName))
return TRUE;
}
}
CloseHandle( hProcess ); return FALSE;
}
“//输出结果”中使用的那个句柄“hwnd”应该就是楼主需要的那个句柄吧。