
窗口操作
文章平均质量分 58
(-: LYSM :-)
这个作者很懒,什么都没留下…
展开
-
[MFC] 手动美化 MFC 窗体
去除边框1.把窗口边框改成无边框:但只这样做会导致无法拖动窗口。2.在类向导中添加这个消息:OnHcHitTest3.修改这个消息处理函数的返回值为:HTCAPTION添加背景图片1.准备一张 bmp 格式的图片(其他格式我没有实验,可能会有问题),在项目中添加资源,选择 BitMap ,导入:2.在 OnPaint() 函数中添加如下代码:// 上面还有一部分代码,是 vs 自动生成的else { //CDialogEx::OnPaint(); // 这是原本的,注原创 2021-04-18 23:58:05 · 6099 阅读 · 3 评论 -
[窗口操作] 主动调用WndProc
原理hook 窗口注册函数 RegisterClassEx 、RegisterClass , 拿到 WndProc 指针,之后使用这个指针直接调用 WndProc 函数。作用:绕过 windows 消息泵,速度大约是使用 PostMessage 或 SendMessage 的两倍。代码参考 : https://github.com/killvxk/wndproc-autoclick...原创 2021-03-08 10:40:32 · 441 阅读 · 0 评论 -
Windows 消息大全
WM_ :窗口消息窗口消息// 自身WM_ERASEBKGND // 当窗口背景必须被擦除时(例在窗口改变大小时)WM_GETFONT // 得到当前控件绘制文本的字体WM_SETFONT // 设置当前控件绘制文本的字体WM_GETTEXT // 得到与窗口对应的文本WM_SETTEXT // 设置与窗口对应的文本WM_GETTEXTLENGTH // 确定与窗口关联的文本的长度(以字符为单位)。WM_SETICON // 将原创 2020-11-20 17:18:07 · 472 阅读 · 0 评论 -
[窗口操作] 修改窗口类名
背景因为需要破解某款软件的防多开限制,所以就有了如题的需求。但是改窗口类名不像改窗口标题那么简单(直接 SetWindowText),没有直接的 API 可以使用。经过几天的钻研,总结了两种修改窗口类名的方法:修改 pe 文件(适合没有加壳的程序)hook RegisterClass(适合加壳的程序)修改 pe 文件以 dbgview.exe 为例,可以看到它是无壳的:程序打开后主窗口类名为 dbgviewClass:在 die 中直接查看 hex,搜索 dbgviewClass:原创 2020-10-18 23:35:27 · 4833 阅读 · 1 评论 -
[窗口] 启动控制台,并输出
AllocConsole();HANDLE HConsole = GetStdHandle(STD_OUTPUT_HANDLE);WriteConsole(HConsole,"hello world",strlen("hello world"),NULL,NULL);原创 2020-10-16 20:59:08 · 256 阅读 · 0 评论 -
[窗口] SetWindowsHookEx 监控窗口消息
监控自身窗口消息意义不大,因为自身的窗口消息完全可以用消息循环捕获。(exe)#include <iostream>#include <Windows.h>using namespace std;LRESULT CALLBACK __WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (msg) { // 完全可以在这里添加消原创 2020-10-16 15:42:43 · 4381 阅读 · 0 评论 -
[C++] 注册热键、快捷键
热键和快捷键的区别热键是全局的,使用 api 注册。快捷键是局部的,不使用 api ,只能在窗口激活的时候使用。注册全局热键#include <iostream>#include <Windows.h>using namespace std;int main(){ // 注册两个热键 Ctrl+F1 , Ctrl+F2 if (0 == RegisterHotKey(NULL, 1, MOD_CONTROL, VK_F1)) {原创 2020-10-14 17:22:29 · 3602 阅读 · 2 评论 -
[C++] 控制台创建窗口
代码#include <iostream>#include <Windows.h>using namespace std;LRESULT CALLBACK __WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (msg) { case WM_CLOSE: MessageBox(NULL,"WM_CLOSE", "", NU原创 2020-10-10 19:59:47 · 3553 阅读 · 2 评论 -
[MFC] 监控屏幕分辨率
背景Windows 有一个消息叫 WM_DISPLAYCHANGE ,在 MSDN 的介绍是:显示分辨率更改后,WM_DISPLAYCHANGE消息将发送到所有窗口。窗口通过其WindowProc函数接收此消息。LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );我们要做的就是在 MFC 程序中注册这个消息的消息处理函数。步骤打开 MFC 的类向导 -原创 2020-10-10 15:28:52 · 1091 阅读 · 0 评论 -
MFC 窗口消息详解
Public Const WM_NULL = &H0 '空消息Public Const WM_NCCREATE = &H81 '当窗口第一次被创建时,此消息在WM_CREATE消息发送前发送Public Const WM_CREATE = &H1 '窗口被创建时发送到它的窗口过程的消息Public Const WM_NCDESTROY...转载 2019-08-10 17:15:32 · 1209 阅读 · 0 评论 -
MFC 程序调用控制台 & 隐藏窗体
咳咳,日常找茬,但绝对不是脱了裤子放屁,为什么这么说…因为最近碰到了个问题:… ??我想在 win32 控制台里使用 mfc 里的类,但是翻来覆去改项目配置都没有搞定,我觉得这是一个坑,为什么不能创建一个 mfc 的程序让它像 win32 控制台那样去工作呢 ? 于是就有了下文:在 OnWindowPosChanging 下添加 WM_WINDOWPOSCHANGING 这个事件:并在这个...原创 2019-08-10 15:00:10 · 910 阅读 · 0 评论 -
MFC使用Sleep() 导致窗口界面卡死的解决办法
原因是MFC的窗口界面也是一个线程,当然是主线程,调用Sleep会导致主线程阻塞,也就是界面‘假死’的现象。所以,如果想让界面不卡死,就要新创建一个线程,让原本的代码在线程函数里运行。下面是我的一个例子,我之所以会用到Sleep函数,是因为我有一个While(1)的死循环,我希望它每隔一定时间执行一次,而不是"鬼畜态"的疯狂跑… = =||首先我们再按钮函数里添加以下代码:然后是actio...原创 2019-03-13 16:06:09 · 9117 阅读 · 0 评论 -
[窗口操作] - 获取窗口菜单信息
结构typedef struct MENUITEMINFO { UINT cbSize; // 结构大小,必须设置为 sizeof(MENUITEMINFO) UINT fMask; // 获取信息的类型 UINT fType; // 菜单类型 UINT fState; // 菜单状态 UINT wID; // 应用程序自定义值 HMENU hSubMenu; // 子菜单或下拉菜单句柄原创 2020-08-20 10:27:10 · 913 阅读 · 0 评论