设置目标窗口的大小(Windows,C++)

本文介绍了一款使用C++编写的命令行程序,能够帮助用户精确调整Windows系统中任意窗口的尺寸。用户只需输入目标宽度和高度,将鼠标移至目标窗口并按住Ctrl键,即可快速调整窗口大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候要准确设置一个窗口的大小,没有找到合适的工具,自己写了一个。

命令行程序(70 行代码 C++):

#include <windows.h>
#include <iostream>

#define IsKeyDown(VK_NAME) ((GetAsyncKeyState(VK_NAME) & 0x8000) ? true:false)   

int main()
{
    POINT point;        // 鼠标所在位置

    HWND target;        // 目标窗口句柄
    HWND parent;        // 目标父窗口句柄
    INT width, height;  // 窗口新宽高

    // 软件用法
    std::cout << "\n功能:设置目标窗口的大小\n\n";
    std::cout << "用法:输入参数后,将鼠标移到要设置的窗口上,然后按下 Ctrl 键 1 秒钟即可\n";
    std::cout << "      按下 Shift 键可重新输入\n";
    std::cout << "      按下  Alt  键可退出程序\n";

    BOOL start = true;  // 是否开始循环
    while(start)
    {
        std::cout << "\n请输入窗口宽度:";
        std::cin >> width;
        std::cout << "请输入窗口高度:";
        std::cin >> height;
        std::cout << "\n移动鼠标,然后按键(Ctrl/Shift/Alt)...\n";

        BOOL listen = true;  // 是否开始监听用户按键
        while (listen)
        {
            // Ctrl 键确认窗口
            if IsKeyDown(VK_CONTROL)
            {
                // 获取鼠标位置
                GetCursorPos(&point);
                // 获取鼠标位置的窗口句柄
                target = WindowFromPoint(point);
                // 合法性判断
                if (target != NULL && target != INVALID_HANDLE_VALUE) {
                    // 获取顶层窗口句柄
                    parent = GetParent(target);
                    while (parent != NULL && parent != INVALID_HANDLE_VALUE)
                    {
                        target = parent;
                        parent = GetParent(target);
                    }
                    // 获取窗口原始大小
                    RECT rect;
                    GetWindowRect(target, &rect);
                    // 重新设置窗口大小
                    MoveWindow(target, rect.left, rect.top, width, height, true);
                    // 停止监听
                    listen = false;
                }
            }
            // Shift 键停止监听
            else if (IsKeyDown(VK_SHIFT))
            {
                listen = false;
            }
            // Alt 键退出程序
            else if (IsKeyDown(VK_MENU))
            {
                listen = false;
                start = false;
            }
            Sleep(200);
        }
        std::cout << "\n----------\n";
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值