怎么通过一个窗口关闭另一个窗口,不可以用过findwindow

csdn_boss 2014-07-29 09:26:55
不可以用过findwindow
r如果find 标题名字的话,别人修改了,你就关闭不了。
如果find注册类的话,如果多个窗口的注册类一样,都会被关闭,求合适的方法
...全文
131 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dvlinker 2014-07-30
  • 打赏
  • 举报
回复
给你一段代码参考一下:
	// 解决组合框控件弹出下拉框时发起热键截图引起奔溃的问题,2014/02/21
	HWND hFocusWnd = ::GetFocus();
	TCHAR achClassName[MAX_PATH] = { 0 };
	::GetClassName( hFocusWnd, achClassName, sizeof(achClassName)/sizeof(TCHAR) );
	if ( !_tcsicmp( achClassName, _T("ComboWnd") ) ) // 是组合框窗口
	{
		DWORD dwWndProcessId = 0;
		::GetWindowThreadProcessId( hFocusWnd, &dwWndProcessId );
		DWORD dwCurProcessId = ::GetCurrentProcessId();
		if ( dwWndProcessId == dwCurProcessId ) // 是本进程的窗口
		{
			// 直接将组合框的弹出的下拉窗口关闭掉
			::SendMessage( hFocusWnd, WM_CLOSE, 0, 0 );
		}
	}
dvlinker 2014-07-30
  • 打赏
  • 举报
回复
引用 1 楼 CometNet 的回复:
findwindow是可以用的,要是担心类名或窗口标题有相同的,可以再判断其他的条件,比如进程名、子控件类名等等
可以通过类名和窗口名一起锁定,另外可以判断是否属于当前的进程
csdn_boss 2014-07-30
  • 打赏
  • 举报
回复
学习了,虽然都不是直接给完整代码,感觉20分太少了,不过没分了
  • 打赏
  • 举报
回复
  //进程的结束
  HANDLE hProcess = OpenProcess(PROCESS_TERMINATE,FALSE,pe.th32ProcessID);
    if(hProcess != NULL)
    {
        TerminateProcess(hProcess,0);
    }
  • 打赏
  • 举报
回复
这是能够获取进程的代码:
#include <iostream>
#include <Windows.h>
#include "tlhelp32.h"
#include <stdio.h>
#include <string>
#include <map>
#include <atlstr.h>
using namespace std; //头文件有多,自行处理

void wcharTochar(const wchar_t *wchar, char *chr, int length)
{
    WideCharToMultiByte( CP_ACP, 0, wchar, -1,chr, length, NULL, NULL );
}
int main()
{
    PROCESSENTRY32 pe;
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    pe.dwSize = sizeof(PROCESSENTRY32);
    if(!Process32First(hSnapshot,&pe))
        return 1;
    while(1)
    {
        pe.dwSize=sizeof(PROCESSENTRY32);
        if(Process32Next(hSnapshot,&pe)==FALSE)
            break;
        //在这里处理开始枚举到的进程
        char szExeFile[256];
        wcharTochar(pe.szExeFile,szExeFile,256);
        printf("%s \n",szExeFile);
    }
    CloseHandle(hSnapshot);
    return 0;
}
encoderlee 版主 2014-07-29
  • 打赏
  • 举报
回复
首先要找出目标窗口的特点和不变性,那些特征是这个窗口独有的,哪些东西是始终不会变的。 如果能确定进程,可以枚举进程中的线程,然后通过EnumThreadWindows来枚举属于线程的所有窗口。就得到了属于该进程的所有窗口,再根据一些特征来判断,比如窗口上有哪些控件,控件ID等。 也可以用EnumWindows枚举所有的窗口,再根据特征筛选出目标窗口。
邓学彬 2014-07-29
  • 打赏
  • 举报
回复
findwindow是可以用的,要是担心类名或窗口标题有相同的,可以再判断其他的条件,比如进程名、子控件类名等等

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧