2009-02-17 26 views

Trả lời

2

Từ tệp lô, không. Nếu bạn muốn kích hoạt một cửa sổ, bạn phải sử dụng SetActiveWindow(). Nếu bạn không muốn bị bẩn với lập trình windows nhưng vẫn muốn kích hoạt các cửa sổ và các công cụ đơn giản như thế, tôi khuyên bạn nên kiểm tra ra Autoit. Bạn luôn có thể gọi chương trình này từ batchfile của bạn để có nó làm nhiệm vụ.

8

nircmd sẽ thực hiện việc này, mặc dù nó liên quan đến một đoạn mã nhỏ.

nircmd win activate "titleofwindow" 

Bạn về cơ bản cần phải biết tiêu đề của cửa sổ cmd bạn đang thực hiện (bạn có thể thiết lập này thông qua lệnh TITLE trong cửa sổ)

như sau:

TITLE %SOME_UNIQUE_VALE% 
nircmd win activate %SOME_UNIQUE_VALE% 

nên làm các trick .

Lưu ý một số công cụ phần mềm độc hại sử dụng tệp thực thi NirCmd (nó không yêu cầu triển khai nào là rất mạnh) điều này có thể gây ra sự cố cho bạn.

+0

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

+0

cổ vũ - nó bị chặn trên kết nối mạng của tôi (do đó ghi chú) – ShuggyCoUk

+0

Vì lý do nào đó, tôi cần xác định tiêu đề: nircmd win kích hoạt tiêu đề "TITLE" –

1

CMDOW cũng hữu ích cho việc này và cho các tác vụ lập trình DOS khác, nơi cần thêm một chút chức năng. Đơn giản để sử dụng và tài liệu tốt. Tuy nhiên, hãy nhớ chương trình chống vi-rút của bạn - CMDOW có khả năng ẩn các cửa sổ mà chương trình chống vi-rút của bạn sẽ nhận được dưới dạng vi-rút có thể. Chỉ cần thêm nó vào danh sách ngoại lệ của bạn. CMDOW là hoàn toàn di động, chắc chắn không phải là một virus và nếu bạn có bất kỳ mối quan tâm về nó đang được sử dụng bởi một bên thứ ba để ẩn một cái gì đó, chỉ cần nhét nó đi trong một số thư mục không rõ ràng ở đâu đó.

-3

Một cách nhanh chóng khác để chuyển sang cửa sổ theo tên là qua Ctrl + Shift + Esc, mở Trình quản lý tác vụ. Sau đó, chỉ cần gõ vài ký tự đầu tiên của tiêu đề cửa sổ để chọn quy trình, sau đó nhấn Enter.

+0

Đây là một mẹo tuyệt vời! Chỉ một vấn đề ... nó sẽ mở ra với tab nào được mở gần đây nhất.Nếu đó là tab "Ứng dụng", tuyệt vời, nhưng nếu đó là một tab khác, bạn sẽ cần một bộ tổ hợp phím phức tạp hơn ... có vẻ như nếu bạn làm 'Ctrl + Shift + Esc', điều đó sẽ khởi chạy Trình quản lý Tác vụ . 'Shift + Tab' sẽ chọn thanh tab. Nhấn vào mũi tên bên trái một vài lần kết quả trong tab Ứng dụng cuối cùng được chọn (và vì nó không lặp và còn lại nhiều nhất, bạn tốt.) 'Tab' để quay lại danh sách, hãy nhập tên của cửa sổ và nhấn 'Enter'. – ArtOfWarfare

+0

Nếu ai đó nghĩ rằng tôi điên vì nghĩ rằng đó là hữu ích, tự động hóa tổ hợp phím là siêu dễ dàng và có rất ít phụ thuộc thư viện bên ngoài. Chỉ riêng Python là đủ để tự động hóa tổ hợp phím. Các cửa sổ đọc tọa độ và tự động hóa chuột, mặt khác, rất phức tạp. Vì vậy, các giải pháp tự động hóa có thể hoạt động nhưng không có gì ngoài việc nhập bằng bàn phím rất tuyệt. Ngoài ra, nhấn mũi tên trái nhiều lần có thể được thay thế bằng cách nhấn vào nhà một lần. – ArtOfWarfare

2

Một cách khác để hiển thị cửa sổ nhắc lệnh cmd ở phía trước là kết thúc file1.bat bằng lệnh để gọi tệp thứ hai2.bat, theo sau là lệnh thoát.

VÍ DỤ sử dụng file1.bat

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

này đóng file1.bat và mở một file .bat thứ hai, nơi bạn có thể tiếp tục với mã của bạn. Dấu nhắc lệnh .bat thứ hai này sẽ mở ở phía trước các cửa sổ khác

0

Tôi gặp vấn đề tương tự và tôi phải phát triển một ứng dụng giao diện điều khiển C# đơn giản mang đến trước cửa sổ. Các cửa sổ được chọn bằng cách sử dụng tiêu đề cửa sổ để làm đối số.

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

     } 
    } 
} 

mã của hàng loạt kịch bản của tôi là sau đó một cái gì đó tương tự như

tasklist/FI "IMAGENAME eq program.exe" | tìm "program.exe" nếu errorlevel 1 (program.exe) khác (BringToFront.exe "Program Window Title")

Các vấn đề liên quan