2010-12-12 45 views
9

Tôi đã thấy rằng Windows có thể chuyển sang giao diện bàn điều khiển rất cơ bản khi cập nhật trình điều khiển video và tôi cũng đã thấy các chương trình như Borland C++ thực hiện việc này.
Tôi thực sự muốn biết làm thế nào để làm điều này với một ứng dụng giao diện điều khiển trong C# (hoặc VB.NET nếu bạn thích), và tôi không nhớ bằng cách sử dụng P/Invoke (và tôi đặt cược tôi phải!).Bàn điều khiển toàn màn hình C#?

+0

Nếu ứng dụng phải toàn màn hình, tôi sẽ xem xét việc tạo ứng dụng cửa sổ thay vì ứng dụng bảng điều khiển. Trừ khi bạn có yêu cầu nói rằng nó phải là một ứng dụng giao diện điều khiển, có thực sự là không có lý do để không đi với một cửa sổ. –

+0

Vâng, tôi sẽ sử dụng một hình thức toàn màn hình với một điều khiển giống như bàn điều khiển. – Vercas

+0

Cách tiếp cận của tôi hoạt động tốt như thế nào để bạn nói rằng nó không hoạt động? –

Trả lời

5

Trong các phiên bản cũ hơn của Windows, bạn có thể đặt bất kỳ bảng điều khiển nào ở chế độ toàn màn hình với Alt-Enter (nếu tôi nhớ chính xác).

Với sự ra đời của Trình quản lý cửa sổ màn hình và bố cục toàn màn hình qua GPU trong Vista, chức năng cửa sổ bảng điều khiển toàn màn hình đã bị xóa.

(Khi cập nhật trình điều khiển đồ họa của hệ thống đồ họa đang được thiết lập lại, những gì bạn thấy không phải là một cửa sổ giao diện điều khiển, nhưng card đồ họa khởi động mặc định vào chế độ văn bản.)

+0

Cảm ơn, đây là câu trả lời hoàn chỉnh nhất (tôi có thể nói điều đó không?) Của tất cả! – Vercas

+1

Alt + Enter vẫn hoạt động trên cửa sổ bảng điều khiển trong Windows 10. –

2

Windows 7 không hỗ trợ toàn màn hình giao diện điều khiển các ứng dụng. Trên XP, bạn có thể sử dụng SetConsoleDisplayMode, bạn sẽ cần phải P/Gọi đến điều này, nhưng nó tương đối đơn giản. Tôi biết về win 7 x64 chức năng này sẽ thất bại với lỗi 120 This function is not spported on this system

Để có được bàn điều khiển, bạn có thể sử dụng một số mã từ this answer.

+0

Trên CMD (x86, Windows 7) Tôi gặp lỗi khi trình điều khiển thiết bị không hỗ trợ tính năng này. – Vercas

+0

Tôi có nghĩa là hệ thống, không phải trình điều khiển thiết bị ... Tôi nghĩ gì ... – Vercas

+0

@Vercas: Thực ra, nó phụ thuộc vào thiết bị.Sự hỗ trợ hoặc thiếu nó nằm trong mã hệ điều hành, không phải trình điều khiển, nhưng các đường dẫn mã OS khác nhau được sử dụng cho các trình điều khiển hiển thị cũ (hỗ trợ hiện tại) và WDDM (không hỗ trợ toàn màn hình). –

1

Bạn có thể nhấp chuột phải vào bảng điều khiển của mình, nhấp vào thuộc tính và trong tùy chọn xoay, đặt thành Chế độ toàn màn hình. bạn có thể lưu các thay đổi này để duy trì.

+0

Điều này vẫn có sẵn trên Windows 7 (và Vista)? –

+0

Không hoạt động + Tôi đang tìm kiếm một cách có lập trình. – Vercas

+0

@Vercas: Không hoạt động == cũng không thể hoạt động theo chương trình. –

1

Bạn có nghĩa là dỡ bỏ hoàn toàn GUI hoặc thay đổi độ phân giải màn hình, như khi bạn cài đặt trình điều khiển thiết bị mới và cửa sổ lên đến 800x600/8bpp, thay vì độ phân giải bình thường của bạn? Tôi không thể giúp đỡ nếu bạn muốn có một màn hình giao diện điều khiển đầy đủ, nhưng nếu bạn đang cố gắng để thay đổi độ phân giải màn hình của bạn, vv, hãy nhìn vào http://www.c-sharpcorner.com/UploadFile/GemingLeader/display-settings08262009094802AM/display-settings.aspx

+0

Uh ... Đây là câu trả lời cho câu hỏi khác của tôi. – Vercas

1

Có lẽ tôi implementation here có thể giúp đỡ. Lưu ý rằng điều này sẽ không hoạt động trên các hệ thống cửa sổ thiếu hỗ trợ trình điều khiển chế độ văn bản.

using System; 
using System.IO; 
using System.Collections.Generic; //for dictionary 
using System.Runtime.InteropServices; //for P/Invoke DLLImport 

class App 
{ 

     /// <summary> 
     /// Contains native methods imported as unmanaged code. 
     /// </summary> 
     internal static class DllImports 
     { 
      [StructLayout(LayoutKind.Sequential)] 
      public struct COORD 
      { 

       public short X; 
       public short Y; 
       public COORD(short x, short y) { 
        this.X = x; 
        this.Y = y; 
       } 

      } 
      [DllImport("kernel32.dll")] 
      public static extern IntPtr GetStdHandle(int handle); 
      [DllImport("kernel32.dll", SetLastError = true)] 
      public static extern bool SetConsoleDisplayMode(
       IntPtr ConsoleOutput 
       ,uint Flags 
       ,out COORD NewScreenBufferDimensions 
       ); 
     } 
     /// Main App's Entry point 
     public static void Main (string[] args) 
     { 
      IntPtr hConsole = DllImports.GetStdHandle(-11); // get console handle 
      DllImports.COORD xy = new DllImports.COORD(100,100); 
      DllImports.SetConsoleDisplayMode(hConsole, 1, out xy); // set the console to fullscreen 
      //SetConsoleDisplayMode(hConsole, 2); // set the console to windowed 

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