桌面上的命令行

时间:2019-11-14 11:00:09

标签: windows cmd

是否可以在Windows桌面而不是例如墙纸上连续运行命令行界面,如命令提示符?这可以实现一种MS-DOS体验,但是具有所有通常的Windows功能。

1 个答案:

答案 0 :(得分:1)

虽然我怀疑以前有人对此做了更正式的版本,但是您可以使用以下代码:

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

HWND g_hwndTarget;

BOOL CALLBACK  EnumCallback(HWND hwnd, LPARAM lParam)
{
    wchar_t szText[MAX_PATH] = {};
    GetWindowTextW(hwnd, szText, MAX_PATH);

    std::wstring strTitle = szText;
    if (strTitle.find(L"cmd.exe") != std::string::npos)
    {
        g_hwndTarget = hwnd;
        return FALSE;
    }
    return TRUE;
}


int main()
{
    EnumDesktopWindows(NULL, EnumCallback, 0);

    RECT rect = {};
    SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0);

    if (g_hwndTarget)
    {
        LONG style = GetWindowLong(g_hwndTarget, GWL_STYLE);
        style &= ~WS_BORDER;
        style &= ~WS_OVERLAPPEDWINDOW;
        SetWindowLong(g_hwndTarget, GWL_STYLE, style);
        SetWindowPos(g_hwndTarget, HWND_BOTTOM, 0, 0, rect.right, rect.bottom, 0);
    }

    return 0;
}

编译以上内容,然后从现有的控制台窗口运行它。代码是这样的:

  • 找到一个控制台窗口(第一个在其标题栏中包含cmd.exe的窗口)。使用此窗口句柄可以执行以下操作。

    • 删除标题栏和顶级按钮/菜单

    • 将其粘贴在窗口堆栈的底部

    • 全屏调整其大小。

结果是您有一个伪“命令行桌面”

远非如此。不断进行后台处理以确保其存在并正确定位/设置样式可能是有意义的。但这是一个开始。您必须将其提升到一个新的水平才能满足您的需求。

enter image description here