【问题标题】:"Bring to front" for Windows XP command shellWindows XP 命令外壳的“置于最前面”
【发布时间】:2009-02-17 14:49:36
【问题描述】:

我可以将命令放入 Windows XP .bat 文件中以将命令 shell 置于最前面吗?

【问题讨论】:

    标签: windows batch-file windows-shell


    【解决方案1】:

    nircmd 会执行此操作,但需要编写一些脚本。

    nircmd win activate "titleofwindow"
    

    你基本上需要知道你正在执行的cmd窗口的标题(你可以通过windows中的TITLE命令来设置)

    因此:

    TITLE %SOME_UNIQUE_VALE%
    nircmd win activate %SOME_UNIQUE_VALE%
    

    应该可以解决问题。

    请注意,一些恶意软件工具利用 NirCmd 可执行文件(它不需要部署,因为它非常强大)这可能会给您带来问题。

    【讨论】:

    • 出于某种原因,我需要指定标题:nircmd win activate title "TITLE"
    【解决方案2】:

    另一种让 cmd 提示窗口显示在前面的方法是使用调用第二个 file2.bat 文件的命令结束 file1.bat,然后执行退出命令。

    使用示例 文件1.bat

    ....
    [your code here]
    start C:\file2.bat
    exit
    

    这会关闭 file1.bat 并打开第二个 .bat 文件,您可以在其中继续编写代码。这第二个 .bat 命令提示符将在其他窗口前面打开

    【讨论】:

      【解决方案3】:

      从批处理文件中,没有。如果你想激活一个窗口,你必须使用SetActiveWindow()。如果您不想弄脏 Windows 编程,但仍想激活 Windows 和类似的简单东西,我强烈建议您查看Autoit。你总是可以从你的批处理文件中调用这个程序来让它完成任务。

      【讨论】:

        【解决方案4】:

        我遇到了类似的问题,我必须开发一个简单的 C# 控制台应用程序,将窗口置于前面。使用窗口标题传递作为参数选择窗口。

        using System;
         using System.Collections.Generic;
         using System.Linq;
         using System.Text;
         using  System.Runtime.InteropServices; 
        
         namespace ConsoleApplication1
         {
            class Program
            {
        
                [DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
                public static extern IntPtr FindWindow(String lpClassName, String lpWindowName);
        
                [DllImport("USER32.DLL")]
                public static extern bool SetForegroundWindow(IntPtr hWnd);
                [DllImport("User32.dll")]
                private static extern bool IsIconic(IntPtr handle);
                [DllImport("User32.dll")]
                private static extern bool ShowWindow(IntPtr handle, int nCmdShow);
                const int SW_RESTORE = 9;
                public static void bringToFront(string title)
                {
                    // Get a handle to the Calculator application.
                    IntPtr handle = FindWindow(null, title);
        
                    // Verify that Calculator is a running process.
                    if (handle == IntPtr.Zero)
                    {
                        return;
                    }
                    if (IsIconic(handle))
                    {
                        ShowWindow(handle, SW_RESTORE);
                    }
        
                    Console.WriteLine("Founded ");
                    SetForegroundWindow(handle);
        
                }
        
                static void Main(string[] args)
                {
        
                    if (args.Length > 0)
                        bringToFront(args[0]);
                    else
                        Console.WriteLine("specify program window title");
        
                }
            }
        }
        

        我的批处理脚本的代码类似于

        tasklist /FI "IMAGENAME eq program.exe" |找到“程序.exe” if errorlevel 1 (program.exe) else (BringToFront.exe "Program Window Title")

        【讨论】:

          【解决方案5】:

          CMDOW 也适用于此以及其他需要一些附加功能的 DOS 编程任务。易于使用且有据可查。但是请注意您的防病毒程序 - CMDOW 能够隐藏您的防病毒程序将作为可能病毒拾取的窗口。只需将其添加到您的例外列表中即可。 CMDOW 是完全可移植的,绝对不是病毒,如果您担心它被第三方用来隐藏某些东西,只需将它藏在某个不明显的文件夹中即可。

          【讨论】:

            【解决方案6】:

            试试focusOn.bat

            call focusOn.bat "My Title"
            

            【讨论】:

              【解决方案7】:

              按名称切换到窗口的另一种快速方法是通过 Ctrl+Shift+Esc 打开任务管理器。然后只需键入窗口标题的前几个字母以选择进程,然后按 Enter。

              【讨论】:

              • 这是一个非常棒的提示!只是一个问题......它将使用最近打开的选项卡打开。如果它是“应用程序”选项卡,很好,但如果它是另一个选项卡,您将需要一组更精细的击键...看起来如果您执行Ctrl+Shift+Esc,则会启动任务管理器。 Shift+Tab 将选择标签栏。几次点击左箭头会导致最终选择应用程序选项卡(并且由于它不会循环并且这是最左边的,所以你很好。)Tab 要返回列表,请输入窗口的名称,然后点击Enter。
              • 如果有人认为我觉得这很有用,那么自动击键非常容易,并且几乎没有外部库依赖项。仅 Python 就足以自动化击键。另一方面,读取窗口坐标和自动化鼠标是非常棘手的。因此,只能使用键盘输入的自动化解决方案非常棒。另外,按几次左箭头可以用按一次回家代替。
              • 按 Ctrl+Shift+Esc,等待 1 秒,按 Alt+Tab 会更简单。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-03-27
              • 2015-10-19
              • 2015-05-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-11-21
              相关资源
              最近更新 更多