如何使用命令行最小化正在运行的程序?

如何使用命令行最小化正在运行的程序?

请注意,我熟悉用于打开并运行最小化程序的命令行,但是这对某些第三方程序不起作用。所以我想我可以使用一个包含两个命令行的批处理文件 - 一个用于打开程序,另一个用于最小化程序。我想知道这是否可行。

答案1

这可以通过近红外命令。 从NirCmd 的帮助文件,最小化窗口或正在运行的程序的命令是:

nircmd win min [find] [window to find] [Additional Parameters]

例如,最小化所有打开的 notepad.exe 窗口:

nircmd win min process "notepad.exe"

NirCmd 的帮助文件有关如何指定要最小化的窗口或正在运行的程序的更多信息。

答案2

下面是纯 Windows API 中微型实用程序的简约实现(字符串操作除外,它使用我的自定义文本类型):

// CONSOLE nDBG
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <psapi.h>
#include <utf>

#pragma comment( lib, "user32")

txt to_min = 1024;

#pragma warning( suppress : 4100 )
BOOL __declspec(nothrow) CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lp)
{
    DWORD pid = 0;
    GetWindowThreadProcessId(hwnd, &pid);
    
    HANDLE hproc = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid);
    
    if(hproc == NULL)
    {
        return TRUE;
    }
    
    char buff[500];
    if(GetProcessImageFileNameA(hproc, buff, 500))
    {
        txt n = buff;
        txtd(n, 0, ("\\" << n) + 1);
        if(n == to_min && IsWindowVisible(hwnd))
        {
            SendMessageTimeoutA(hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0, SMTO_ABORTIFHUNG, 25, NULL);
            return FALSE;
        }
    } 
    
    return TRUE;
}

int wmain(int argc, wchar_t **argv)
{
    if(argc < 2)
    {
        return 1;
    }

    to_min = wt2u8(argv[1]);
    
    EnumWindows(EnumWindowsProc, 0);
    
    return 0;
}

编译它,然后您可以使用要最小化的窗口的进程的图像名称参数来调用它。

相关内容