VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 307|回复: 19

[交流] 分享一个自己写的窗口句柄查询工具附带详细注释

[复制链接]
75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-11-7 10:38:54 | 显示全部楼层 |阅读模式

该窗口句柄查询工具源码VS2017编译,只实现了部分功能 可以查看类窗口句柄,属于新手学习作用,技术大佬不用看了,技术思路以及支持是JiUI极视觉提供,再次感谢他
QQ图片20191107103736.png




上一篇:MD5加密算法C语言实现
下一篇:某大型物联网公司的笔试题
75_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-11-7 10:40:38 | 显示全部楼层
//定义响应鼠标按下的消息
void CWindowsHwndDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
        // TODO: 在此添加消息处理程序代码和/或调用默认值
        HICON hcursor = LoadCursor(NULL,IDC_ARROW);//AfxGetApp()->LoadCursorW->(IDC_ARROW)这里我并没有按照  作者的写法。因为这只是加载一个光标,我改成了自己的写法
        //该函数返回加载成功的光标句柄
        SetCursor(hcursor);//setcursor函数是用来确定一个光标,该参数是确定光标的句柄
        SetCapture();//函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,
        //所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。

        CDialogEx::OnLButtonDown(nFlags, point);
}
HWND m_ghwnd;//定义一个全局的句柄
RECT m_rectwnd;//定义一个矩形在后面绘图将会用到

void CWindowsHwndDlg::OnLButtonUp(UINT nFlags, CPoint point)//定义鼠标弹起函数
{
        // TODO: 在此添加消息处理程序代码和/或调用默认值
        ReleaseCapture();
        //释放鼠标  该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理。捕获鼠标的窗口接收所有的鼠标输入(无论光标的位置在哪里),除非点击鼠标键时,光标热点在另一个线程的窗口中。
        //因为我们在鼠标按下的消息哪里不活了鼠标消息,那么我们在这里要释放  因为我们这里是鼠标弹起


        POINT pt;//定义一个point的结构体成员,该成员保存着该结构体的信息
        GetCursorPos(&pt);//琥珀去当前鼠标的坐标,以屏幕坐标为表示该参数需要一个指向point结构的成员,用来保存该鼠标的消息

        m_ghwnd=::WindowFromPoint(pt);//获取指定点的窗口句柄参数pt是指向piont结构的成员,该成员保存了当前鼠标的消息  ,在鼠标消息在getcursorpos中赋给了pt按地址传递进去得  深层复制
        //WindowFromPoint是一个计算机函数,功能是获得包含指定点的窗口的句柄,函数原型是HWND WindowFromPoint。
        ///////画矩形方框

        if (m_ghwnd == m_hWnd || ::GetParent(m_ghwnd) == m_ghwnd)//判断当前的句柄是都等于主窗口句柄

                //getparent()pe冷次   获取一个指定子窗口的父句柄---GetParent函数获得一个指定子窗口的父窗口句柄。
                return;
        ::GetWindowRect(m_ghwnd, &m_rectwnd);
        if (m_rectwnd.left < 0)
        m_rectwnd.left = 0;
        if (m_rectwnd.top < 0)
                m_rectwnd.top = 0;
        CBrush brush;
        brush.CreateSolidBrush(RGB(255, 0, 0));
        HDC phdc = CreateDC(L"display", NULL, NULL, NULL);
        FrameRect(phdc, &m_rectwnd,(HBRUSH)brush.m_hObject);
        brush.DeleteObject();
        DeleteDC(phdc);


        CString str;
        str.Format(L"%d", m_ghwnd);
        GetDlgItem(IDC_EDIT_Hwnd)->SetWindowTextW(str);
       
        TCHAR ct[200]=L"\0";
        ::GetWindowText(m_ghwnd,ct,200);
        SetDlgItemText(IDC_EDIT_TXT, ct);
        //获取类名
        TCHAR cy[200] = L"\0";
        GetClassName(m_ghwnd, cy, 200);
        SetDlgItemText(IDC_EDIT_Class, cy);



        CDialogEx::OnLButtonUp(nFlags, point);
}


void CWindowsHwndDlg::OnBnClickedButton1()
{
        // TODO: 在此添加控件通知处理程序代码
        TCHAR szCommand[MAX_PATH];

        //     设置一个进程的优先级表,参数是进程的句柄,和指定优先级的参数
        //进程句柄可以调用getcurrentprocess函数获取该函数没有参数,并且返回当前进程的伪句柄
        SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
        //返回伪句柄
        SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
        //返回伪句柄
        wsprintf(szCommand, L"/c del /q %s", _wpgmptr);//_wpgmptr-----GetModuleFileName(NULL,NULL,NULL)
                                                                                                                                                                 //这两个函数用途是一样的获取当前进程已加载的模块路径
                                                                                        //   /c是close关闭的缩写,del是删除指定的文件          Drive  path File Name缩写
                       //path是路径,
                                                                                                   //将字符串和数字输入到缓冲区  也就是将后面的DOS命令输入到前面的szcommand缓冲区中           
        //L"/c del /q %s"  Dos命令,del是删除,/q是不弹出去人对话框以安静的方式卸载


        //将DOS命令格式化进命令行szcommand,
        ShellExecute(m_hWnd,L"open", L"cmd.exe", szCommand, NULL, SW_HIDE);//卸载模式  也可以写成隐藏sw_hide
       



        ExitProcess(0);//退出当前线程

}
58_avatar_middle
最佳答案
6 
online_vip 发表于 2019-11-7 12:57:14 | 显示全部楼层
看楼主说看VS教材,我在笔记本中用VC6.0英文版,台式机用VS,没感觉有什么区别,刚学时可以觉得区别大。
75_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-11-7 22:04:31 | 显示全部楼层
thzzl 发表于 2019-11-7 12:57
看楼主说看VS教材,我在笔记本中用VC6.0英文版,台式机用VS,没感觉有什么区别,刚学时可以觉得区别大。

这个可能和习惯不同吧,  我比较喜欢VS带有代码提示比较友好,VC6.0有点想放弃
58_avatar_middle
最佳答案
6 
online_vip 发表于 2019-11-7 23:04:20 | 显示全部楼层
wl1383838438 发表于 2019-11-7 22:04
这个可能和习惯不同吧,  我比较喜欢VS带有代码提示比较友好,VC6.0有点想放弃

VC6也可以安装蕃茄插件,楼主即然说自己是新手,没有提示不是更好。更何况我看VC6的书,在VS中运行,没有区别呀。
75_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-11-8 08:40:35 | 显示全部楼层
thzzl 发表于 2019-11-7 23:04
VC6也可以安装蕃茄插件,楼主即然说自己是新手,没有提示不是更好。更何况我看VC6的书,在VS中运行,没有 ...

我只能说你是大佬, 你很难明白一个人自学刚开始用VC6.0几乎所有的都是死记硬背,后面学习API发现VS以前只知道VC6.0,其他的啥也不懂,接触VS2017之后再也没有碰过VC,个人感觉VC6.0就是从入门到放弃,插件这东西,对于没有人指导,完全自学的人来说,不知道有这回事,   个人感觉  
58_avatar_middle
最佳答案
6 
online_vip 发表于 2019-11-8 14:04:28 | 显示全部楼层
wl1383838438 发表于 2019-11-8 08:40
我只能说你是大佬, 你很难明白一个人自学刚开始用VC6.0几乎所有的都是死记硬背,后面学习API发现VS以前 ...

哦,没事的,看看驿站的课,Syc教程中经常讲到IDE用法。
75_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-11-8 20:00:27 | 显示全部楼层
thzzl 发表于 2019-11-8 14:04
哦,没事的,看看驿站的课,Syc教程中经常讲到IDE用法。

是啊  就是因为看了SYC的教材 才发现的驿站,喜欢驿站的风格
58_avatar_middle
最佳答案
6 
online_vip 发表于 2019-11-8 20:04:46 | 显示全部楼层
wl1383838438 发表于 2019-11-8 20:00
是啊  就是因为看了SYC的教材 才发现的驿站,喜欢驿站的风格

哦哦,工作的使用,慢慢就会了。
58_avatar_middle
最佳答案
6 
online_vip 发表于 2019-11-8 20:05:50 | 显示全部楼层
wl1383838438 发表于 2019-11-8 20:00
是啊  就是因为看了SYC的教材 才发现的驿站,喜欢驿站的风格

学习的经验就两个字,多敲,加油哦。
75_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-11-8 23:29:28 | 显示全部楼层
thzzl 发表于 2019-11-8 20:05
学习的经验就两个字,多敲,加油哦。

是的  一片代码 写一次和写十次的理解完全不一样·一个小的项目能学到很多东西,最近在看一段简单的远程桌面开发,其实就是只能看到客户端的桌面其他的完全啥都干不了,琢磨了10天左右,基本摸清了程序的框架,但是还是经验不足,知识有限,修改无从下手,但是基本理解了为啥这么写,和这么写的好处是啥,别人几年的功力写的东西,想成为自己的还是需要多敲敲代码,不然真的有时候排错都不知道从哪里下手
58_avatar_middle
最佳答案
6 
online_vip 发表于 6 天前 | 显示全部楼层
wl1383838438 发表于 2019-11-8 23:29
是的  一片代码 写一次和写十次的理解完全不一样·一个小的项目能学到很多东西,最近在看一段简单的远程 ...

什么时候出下一个作品呀。
75_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 5 天前 | 显示全部楼层
thzzl 发表于 2019-11-10 10:56
什么时候出下一个作品呀。

今天吧     都是入门代码,因为我也是新手  今天晚点出一个HOOK键盘和鼠标的,但是我的权限无法上传压缩文件,   昨天写了一个文字病毒弹窗 可是一直获取不了写入C盘的权限  搞到很晚才休息,导致没能及时回复您的信息,实在是不好意思
58_avatar_middle
最佳答案
6 
online_vip 发表于 5 天前 | 显示全部楼层
wl1383838438 发表于 2019-11-11 09:48
今天吧     都是入门代码,因为我也是新手  今天晚点出一个HOOK键盘和鼠标的,但是我的权限无法上传压缩 ...

要提取吧,译部黑客编程中,好像讲了提权?
75_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 5 天前 | 显示全部楼层
thzzl 发表于 2019-11-11 15:01
要提取吧,译部黑客编程中,好像讲了提权?

很少玩论坛  也是在b站看见SYC分享的视频,才知道这个驿站,
58_avatar_middle
最佳答案
6 
online_vip 发表于 5 天前 | 显示全部楼层
wl1383838438 发表于 2019-11-11 16:52
很少玩论坛  也是在b站看见SYC分享的视频,才知道这个驿站,

我也是B站看到的。这个论坛都10多年了,当年很火,现在短平快的时代,大家就知道用外国人做好的东西,不肯自己研究,感觉中国好老板真少。
75_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 5 天前 | 显示全部楼层
thzzl 发表于 2019-11-11 16:54
我也是B站看到的。这个论坛都10多年了,当年很火,现在短平快的时代,大家就知道用外国人做好的东西,不 ...

生活节奏压力大,   大家都没有时间去潜心研究这些东西了,不过国外有些技术真的还是很厉害的,起码我还是没有看见这方面的教材,比如直接C++操纵内存修改某些东西,调取NT的api函数破杀毒 申什么的youtube上很多但是英语不好   只能看 听不懂太深奥的就不行了有时候一个函数代码研究好几天
58_avatar_middle
最佳答案
6 
online_vip 发表于 5 天前 | 显示全部楼层
wl1383838438 发表于 2019-11-11 17:01
生活节奏压力大,   大家都没有时间去潜心研究这些东西了,不过国外有些技术真的还是很厉害的,起码我还 ...


驱动会一点,驱动也是属于VC环境中的嘿,先把MFC学好,驱动学浅了没什么用。入门到不难。
58_avatar_middle
最佳答案
6 
online_vip 发表于 5 天前 | 显示全部楼层
wl1383838438 发表于 2019-11-11 17:01
生活节奏压力大,   大家都没有时间去潜心研究这些东西了,不过国外有些技术真的还是很厉害的,起码我还 ...

驱动很细致,你想完成一个小功能,代码量就大的恐怖。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-11-16 05:45

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表