591
Chương 15: Khả năng liên tác mã lệnh không-được-quản-lý
private System.Windows.Forms.Label lblCaption;
[DllImport("user32.dll")]
private static extern int GetForegroundWindow();
[DllImport("user32.dll")]
private static extern int GetWindowText(int hWnd, StringBuilder text,
int count);
private void tmrRefresh_Tick(object sender, System.EventArgs e) {
int chars = 256;
StringBuilder buff = new StringBuilder(chars);
int handle = GetForegroundWindow();
if (GetWindowText(handle, buff, chars) > 0) {
lblCaption.Text = buff.ToString();
lblHandle.Text = handle.ToString();
if (new IntPtr(handle) == this.Handle) {
lblCurrent.Text = "True";
} else {
lblCurrent.Text = "False";
}
}
}
}
Handle của form được quản lý một cách trong suốt đối với người dùng. Thay đổi
thuộc tính nào đó của form có thể khiến cho CRL tạo một handle mới. Do đó,
bạn nên luôn truy xuất handle ngay trước khi sử dụng nó (không nên giữ nó
trong một biến để sử dụng trong một thời gian dài).
3.
3.
G i m t hàm không-đ
c-qu n-lý có s d ng c u trúc
ọ ộ
ượ
ả
ử ụ
ấ
G i m t hàm không-đ
c-qu n-lý có s d ng c u trúc
ọ ộ
ượ
ả
ử ụ
ấ
Bạn cần gọi một hàm không-được-quản-lý có thông số là một cấu trúc.
Định nghĩa cấu trúc trong mã
C#. Sử dụng đặc tính
System.Runtime.InteropServices.StructLayoutAttribute
để cấu hình việc cấp bộ
nhớ cho cấu trúc. Sử dụng phương thức tĩnh
SizeOf
của lớp