macos_accessibility_client/
lib.rs1#![allow(non_snake_case)]
2
3pub mod raw {
5 use core_foundation_sys::dictionary::CFDictionaryRef;
6 use core_foundation_sys::base::Boolean;
7 use core_foundation::string::CFStringRef;
8
9 extern {
10 pub static kAXTrustedCheckOptionPrompt: CFStringRef;
11
12 pub fn AXIsProcessTrusted() -> Boolean;
13 pub fn AXIsProcessTrustedWithOptions(theDict: CFDictionaryRef) -> Boolean;
14
15 }
16}
17
18pub mod accessibility {
20 use core_foundation::string::CFString;
21 use core_foundation::dictionary::CFDictionary;
22 use core_foundation::boolean::CFBoolean;
23 use core_foundation::base::TCFType;
24
25 use crate::raw::{AXIsProcessTrusted, kAXTrustedCheckOptionPrompt, AXIsProcessTrustedWithOptions};
26
27 pub fn application_is_trusted() -> bool {
29 unsafe {
30 return AXIsProcessTrusted() != 0;
31 }
32 }
33
34 pub fn application_is_trusted_with_prompt() -> bool {
37 unsafe {
38 let option_prompt = CFString::wrap_under_get_rule(kAXTrustedCheckOptionPrompt);
39 let dict: CFDictionary<CFString, CFBoolean> = CFDictionary::from_CFType_pairs(&[
40 (option_prompt, CFBoolean::true_value()),
41 ]);
42 return AXIsProcessTrustedWithOptions(dict.as_concrete_TypeRef()) != 0
43 }
44 }
45}
46
47#[cfg(test)]
48mod tests {
49 use crate::accessibility::{application_is_trusted, application_is_trusted_with_prompt};
50
51 #[test]
52 fn test_application_is_trusted() {
53 assert_eq!(false, application_is_trusted());
54 }
55
56 #[test]
57 fn test_application_is_trusted_with_prompt() {
58 assert_eq!(false, application_is_trusted_with_prompt());
59 }
60}