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

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

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

#include 
#include 

#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;
}

 

你可能感兴趣的:(工具)