CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 590

590
Chương 15: Khả năng liên tác mã lệnh không-được-quản-lý

2.

2.

L y handle c a m t đi u ki m, c a s , ho c file

ủ ộ ề

ử ổ ặ

L y handle c a m t đi u ki m, c a s , ho c file

ủ ộ ề

ử ổ ặ

Bạn cần gọi một hàm không-được-quản-lý, và hàm này cần handle của một điều
kiểm, cửa sổ, hoặc file.

Nhiều lớp, bao gồm lớp

FileStream

và tất cả lớp dẫn xuất từ

Control

, trả về

handle (thuộc cấu trúc

IntPtr

) thông qua thuộc tính

Handle

. Cũng có lớp trả về

thông tin tương tự; ví dụ, lớp

System.Diagnostics.Process

có thêm thuộc tính

Process.MainWindowHandle

ngoài thuộc tính

Handle

.

.NET Framework không che dấu các chi tiết nằm dưới, chẳng hạn handle dùng cho cửa sổ và
điều kiểm. Mặc dù không thường sử dụng thông tin này, bạn có thể lấy nó khi cần gọi một
hàm không-được-quản-lý và hàm này cần đến nó.
Xét ứng dụng dưới đây, form chính luôn hiển thị trên tất cả các cửa sổ khác bất kể nó có focus
hay không (có được chức năng này bằng cách thiết lập thuộc tính

Form.TopMost

true

).

Form còn có một

Timer

định kỳ gọi các hàm không-được-quản-lý

GetForegroundWindow

GetWindowText

để lấy thông tin của cửa sổ hiện đang có focus. Ngoài ra, handle của form

chính được lấy thông qua thuộc tính

Form.Handle

, rồi được so sánh với handle của form hiện

đang tích cực để kiểm tra form chính đang có focus hay không.

Hình 15.1 Thông tin về cửa sổ đang tích cực

using System;

using System.Windows.Forms;

using System.Runtime.InteropServices;

using System.Text;

public class ActiveWindowInfo : System.Windows.Forms.Form {

// (Bỏ qua phần mã designer.)

private System.Windows.Forms.Timer tmrRefresh;

private System.Windows.Forms.Label lblCurrent;

private System.Windows.Forms.Label lblHandle;

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.