关于查找窗口的问题,如何找到我需要的窗口 我的mfc对话框程序在运行中需要用到FindWindow来查找指定标题的窗口,然后根据是否找到来决定是否新建窗口,FindWindow的两个参数都使用了,其中类名称为"#32770",可如果遇到其他类名称相同标题也相同的窗口就不行了(比如其他用vc开发的mfc程序),请问如何解决这样的问题? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用GetWindowThreadProcessId获取进程ID,来判断是不是你感兴趣的目标进程的窗口.另外,只用类肯定不行,如果目标窗口标题固定,最好再加上标题进行判断. Enumwindow在里面判定找到的窗口所有在processid是否与自己程序的processid相同 如果你要找的窗口是自己写的程序,完全可以把类名称起的复杂一些,让它不可能重名,比如window_DDC72340_9660_4DB9_B4E1_403114C0FB45这类 类名称在createwindow的时候有一个参数可以指定 我的对话框是类似这样创建的CDlg * pDlg=new CDlg;pdlg->Create(IDD_DLG,父窗口句柄);里边没那个类名称参数阿,改成CreateWindow是不是很费事阿,创建的地方比较多...呵呵 楼上的方法感觉不是很好 用的CDialog就不能像我说那么弄了,因为类名是不能变的了。给你从网上抄了一段通过exe文件名取程序窗口的代码,参考一下吧。#include <tlhelp32.h>struct ID_HWND{HWND hWnd;DWORD dwID;};BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lParam){DWORD dwID;ID_HWND* pih;pih = (ID_HWND*)lParam;GetWindowThreadProcessId(hwnd, &dwID);if (dwID == pih->dwID) {pih->hWnd = hwnd; return FALSE;}return TRUE;}HWND GetProgramWnd(LPCSTR ExeName){ID_HWND ih;HANDLE hProcessSnap;PROCESSENTRY32 pe32;if (ExeName==0 || ExeName[0]=='\0')return NULL;hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (hProcessSnap==(HANDLE)-1) return NULL;ih.hWnd = NULL;memset(&pe32, 0, sizeof(pe32));pe32.dwSize = sizeof(PROCESSENTRY32);if (Process32First(hProcessSnap, &pe32)){do {if (!strcmpi(pe32.szExeFile,ExeName)) {ih.dwID = pe32.th32ProcessID;EnumWindows((WNDENUMPROC)EnumProc,(long)&ih);break; //此时的}}while(Process32Next(hProcessSnap,&pe32));}CloseHandle(hProcessSnap); return ih.hWnd;} DX9,遇到一个棘手的蒙版问题 单文本view中GetDocument()问题 编译错误问题 两个类相互引用出错 这个视频回调函数怎么不起作用? :::..:::关于CDateTimeCtrl::SetTime的一个问题 谁有一套完整,可以运行的文本编辑程序的源程序 zp来,ctime如何用? 如何改变鼠标指针? 有谁知道白板的功能是如何实现的。 windows Socket 编程收来自嵌入式设备的网络数据 是否可以不检测数据报的 checksum 在模态对话框中, 请问EndDialog( int nResult ) 里的" int nResult " 参数是什么意思? 怎么样填?
另外,只用类肯定不行,如果目标窗口标题固定,最好再加上标题进行判断.
在里面判定找到的窗口所有在processid是否与自己程序的processid相同
window_DDC72340_9660_4DB9_B4E1_403114C0FB45
这类
CDlg * pDlg=new CDlg;
pdlg->Create(IDD_DLG,父窗口句柄);
里边没那个类名称参数阿,改成CreateWindow是不是很费事阿,创建的地方比较多...呵呵 楼上的方法感觉不是很好
{
HWND hWnd;
DWORD dwID;
};BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lParam)
{
DWORD dwID;
ID_HWND* pih;pih = (ID_HWND*)lParam;
GetWindowThreadProcessId(hwnd, &dwID);
if (dwID == pih->dwID) {
pih->hWnd = hwnd; return FALSE;
}
return TRUE;
}HWND GetProgramWnd(LPCSTR ExeName)
{
ID_HWND ih;
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;if (ExeName==0 || ExeName[0]=='\0')
return NULL;
hProcessSnap = CreateToolhelp32Snapshot(
TH32CS_SNAPPROCESS, 0);
if (hProcessSnap==(HANDLE)-1) return NULL;ih.hWnd = NULL;
memset(&pe32, 0, sizeof(pe32));
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hProcessSnap, &pe32))
{
do {
if (!strcmpi(pe32.szExeFile,ExeName)) {
ih.dwID = pe32.th32ProcessID;
EnumWindows((WNDENUMPROC)EnumProc,
(long)&ih);
break; //此时的
}
}
while(Process32Next(hProcessSnap,&pe32));
}
CloseHandle(hProcessSnap); return ih.hWnd;
}