Sử dụng SystemParametersInfo
function chuyển một số uiAction
của SPI_GETSCREENREADER
.
Bạn sẽ cần phải sử dụng P/Invoke cho điều này, ví dụ:
internal class UnsafeNativeMethods
{
public const uint SPI_GETSCREENREADER = 0x0046;
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref bool pvParam, uint fWinIni);
}
public static class ScreenReader
{
public static bool IsRunning
{
get
{
bool returnValue = false;
if (!UnsafeNativeMethods.SystemParametersInfo(UnsafeNativeMethods.SPI_GETSCREENREADER, 0, ref returnValue, 0))
{
throw new Win32Exception(Marshal.GetLastWin32Error(), "error calling SystemParametersInfo");
}
return returnValue;
}
}
}
Đây có thể là tốt hơn so với sử dụng ClientsAreListening
tài sản là tài sản này dường như trở thành sự thật cho bất kỳ khách hàng tự động hóa, không chỉ màn hình độc giả.
Xem thêm:
Bạn cũng nên lắng nghe các thông điệp WM_SETTINGCHANGE
để phát hiện nếu một trình đọc màn hình khởi động/dừng chạy.
Cập nhật (để đáp ứng với ý kiến BrendanMcK của):
Mặc dù điều này không bao giờ được ghi nhận một cách rõ ràng trong càng nhiều từ, nhìn vào mô tả của lá cờ Tôi nghĩ rằng mục đích của lá cờ này là tương đối rõ ràng :
Xác định xem tiện ích của trình đánh giá màn hình có đang chạy hay không. Tiện ích xem xét màn hình hướng thông tin văn bản đến thiết bị đầu ra, chẳng hạn như bộ tổng hợp giọng nói hoặc màn hình chữ nổi. Khi cờ này được thiết lập, một ứng dụng sẽ cung cấp thông tin văn bản trong các tình huống nơi nó sẽ trình bày thông tin bằng đồ họa.
Điều này được nói là ứng dụng thiết lập cờ này bất cứ khi nào một ứng dụng muốn giao diện người dùng để hành xử như thể một người đọc màn hình là chạy, bất kể có hay không ứng dụng mà thực sự là một trình đọc màn hình hay không .
Những việc phù hợp cần làm để phản hồi cờ này là add text in order to "read" otherwise intuitive UI state to the user. Nếu cần cấp tiến thay đổi để làm cho trình đọc màn hình UI của bạn có thể truy cập được thì khả năng giao diện người dùng của bạn cũng không trực quan đối với người dùng bị sigted và có thể làm với suy nghĩ lại.
Tò mò - bạn định làm gì khác nếu bạn xác định rằng trình chạy màn hình đang chạy? Lưu ý rằng một số ứng dụng không có màn hình có thể đặt cờ SPI_SCREENREADER, vì vậy bạn có thể nhận được các kết quả dương hoặc âm sai. Lý tưởng nhất là ứng dụng của bạn sẽ hoạt động mà không cần phải kiểm tra cờ này. Bạn có thực sự kiểm tra cho screenreaders nói chung, hoặc JAWS cụ thể? – BrendanMcK