2009-02-17 15 views

Antwort

2

Aus einer Batch-Datei, nein. Wenn Sie ein Fenster aktivieren möchten, müssen Sie SetActiveWindow() verwenden. Wenn Sie nicht mit Windows-Programmierung schmutzig werden wollen, aber immer noch Windows und einfache Sachen wie diese aktivieren wollen, empfehle ich sehr, Autoit auszuprobieren. Sie könnten dieses Programm immer von Ihrer Batchdatei aus aufrufen, um die Aufgabe ausführen zu lassen.

8

nircmd wird dies tun, obwohl es ein wenig Scripting beinhaltet.

nircmd win activate "titleofwindow" 

Sie müssen grundsätzlich den Titel des CMD-Fenster wissen, dass Sie die Ausführung (Sie können über den TITEL-Befehl in Windows festgelegt this)

so:

TITLE %SOME_UNIQUE_VALE% 
nircmd win activate %SOME_UNIQUE_VALE% 

sollte es tun .

Beachten Sie, dass einige Malware-Tools die NirCmd-Programmdatei verwenden (sie erfordert keine Implementierung, da sie sehr leistungsfähig ist), was zu Problemen führen kann.

+0

http://www.nirsoft.net/utils/nircmd.html – ryeguy

+0

prost - es ist blockiert auf meine Netzverbindung (daher der Hinweis) – ShuggyCoUk

+0

Aus irgendeinem Grund musste ich Titel angeben: nircmd win Titel "TITLE" aktivieren –

1

CMDOW ist auch nützlich für diese und für andere DOS-Programmieraufgaben, wo ein wenig zusätzliche Funktionalität benötigt wird. Einfach zu bedienen und gut dokumentiert. Achten Sie jedoch auf Ihr Antivirenprogramm - CMDOW kann Fenster verstecken, die Ihr Antivirenprogramm als möglicher Virus auffängt. Fügen Sie es einfach Ihrer Ausnahmeliste hinzu. CMDOW ist komplett portabel, ist definitiv kein Virus und wenn Sie irgendwelche Bedenken haben, dass es von Dritten benutzt wird, um etwas zu verstecken, stecken Sie es einfach irgendwo in einen nicht offensichtlichen Ordner.

-3

Eine andere schnelle Möglichkeit, zu einem Fenster mit Namen zu wechseln, ist über Strg + Umschalt + Esc, wodurch der Task-Manager geöffnet wird. Dann tippe einfach die ersten Buchstaben des Windows-Titels, um den Prozess auszuwählen, und drücke Enter.

+0

Dies ist ein ziemlich guter Tipp! Nur ein Problem ... es öffnet sich mit dem zuletzt geöffneten Tab.Wenn es die Registerkarte "Anwendung" wäre, großartig, aber wenn es eine andere Registerkarte ist, benötigen Sie eine ausgefeiltere Reihe von Tastenanschlägen ... es sieht so aus, als ob Sie 'Strg + Umschalttaste + Esc' drücken, das startet den Task-Manager . 'Shift + Tab' wählt die Tab-Leiste. Wenn Sie einige Male auf den linken Pfeil klicken, wird die Registerkarte "Anwendungen" ausgewählt (und da keine Schleife vorhanden ist, bleibt Ihnen nichts anderes übrig.) "Tab", um zur Liste zurückzukehren, geben Sie den Namen des Fensters ein , und drücken Sie die Eingabetaste. – ArtOfWarfare

+0

Wenn jemand denkt, dass ich verrückt bin, weil er denkt, dass das nützlich ist, ist das Automatisieren von Tastenanschlägen sehr einfach und hat nur sehr wenige externe Bibliotheksabhängigkeiten. Python allein reicht aus, um Tastenanschläge zu automatisieren. Das Lesen von Windows-Koordinaten und das Automatisieren der Maus ist dagegen sehr schwierig. Automatisierungslösungen, die nur mit Tastatureingabe funktionieren, sind großartig. Wenn Sie den linken Pfeil mehrmals drücken, können Sie auch einmal nach Hause drücken. – ArtOfWarfare

2

Eine weitere Möglichkeit, das Eingabeaufforderungsfenster für cmd anzuzeigen, besteht darin, file1.bat mit einem Befehl zu beenden, um eine zweite Datei file2.bat aufzurufen, gefolgt von einem Befehl exit.

Beispiel mit file1.bat

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

Diese file1.bat schließt und öffnet eine zweite .bat-Datei, wo Sie mit Ihrem Code fortsetzen können. Diese zweite .bat Eingabeaufforderung öffnet sich vor anderen Fenstern

0

Ich hatte ein ähnliches Problem und ich musste eine einfache C# -Konsolenanwendung entwickeln, die ein Fenster nach vorne bringt. Das Fenster wird ausgewählt, indem der Fenstertitel pass als Argument verwendet wird.

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"); 

     } 
    } 
} 

der Code meiner Batch-Skript ist dann so etwas wie

tasklist/FI "Imagename eq program.exe" | finden "program.exe" wenn Errorlevel 1 (program.exe) else (BringToFront.exe "Program Window Title")