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
là
true
).
Form còn có một
Timer
định kỳ gọi các hàm không-được-quản-lý
GetForegroundWindow
và
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;