Files
rogee 13c31fc902
Build web service image / build (push) Successful in 1m53s
feat: add remote control plane and whitelist reads
2026-09-12 09:46:05 +08:00

62 lines
3.2 KiB
C#

namespace WxAgent.Core;
public static class WechatLocators
{
public const string MainView = "MainView";
public const string MainTabBar = "MainView.main_tabbar";
public const string SettingsMenuButton = "MainView.main_tabbar.tabbar_setting";
public const string PreferenceWindow = "PreferenceWindow";
public const string ProfileWindowTitle = "Weixin";
public const string ProfileDisplayName = "right_v_view.nickname_button_view.display_name_text";
public const string ProfileWechatId = "right_v_view.user_info_center_view.basic_line_view.ProfileTextView";
// Observed with WeChat 4.1.13.63; query its public shell icon metadata, never post tray callback messages.
public const string TrayMessageWindowClass = "Qt51514WxTrayIconMessageWindowClass";
public const uint TrayIconId = 0;
public static bool IsNotificationAreaRoot(string className) =>
className is "Shell_TrayWnd" or "Shell_SecondaryTrayWnd" or "NotifyIconOverflowWindow";
public static bool IsWechatTrayName(string name) =>
name is "微信" or "WeChat" or "Weixin"
|| name.StartsWith("微信\n", StringComparison.Ordinal)
|| name.StartsWith("微信\r", StringComparison.Ordinal);
public static bool IsNativeMainWindow(string className, string title) =>
title == "微信" && className.StartsWith("Qt", StringComparison.Ordinal)
&& className.EndsWith("QWindowIcon", StringComparison.Ordinal);
public const string SessionList = "session_list";
public const string ChatPage = "chat_message_page";
public const string MessageList = "chat_message_list";
public const string ChatInput = "chat_input_field";
public const string MentionPopover = "MentionPopover";
public const string MentionList = "chat_mention_list";
public const string ToolBar = "tool_bar_accessible";
public const string CurrentChatName = "content_view.top_content_view.title_h_view.left_v_view.left_content_v_view.left_ui_.big_title_line_h_view.current_chat_name_label";
public const string ChatBubbleItem = "chat_message_list.qt_scrollarea_viewport.chat_bubble_item_view";
public const string FileTransferAssistant = "文件传输助手";
public const string Search = "搜索";
public const string SearchList = "search_list";
public const string Send = "发送";
public const string FileTransferAssistantSearchResult = "search_item_function_文件传输助手";
public static IReadOnlyList<string> RequiredAutomationIds { get; } =
[MainView, SessionList, ChatPage, MessageList, ChatInput, ToolBar];
public static WxAgentErrorCode? ClassifyFoundWindow(IReadOnlyDictionary<string, bool> controls)
{
if (controls.Values.All(found => !found))
{
return WxAgentErrorCode.WechatNotLoggedIn;
}
if (!controls.GetValueOrDefault(MainView) || !controls.GetValueOrDefault(SessionList))
{
return WxAgentErrorCode.UiStructureChanged;
}
var chatControls = new[] { ChatPage, MessageList, ChatInput, ToolBar };
var visibleChatControls = chatControls.Count(id => controls.GetValueOrDefault(id));
return visibleChatControls is 0 or 4 ? null : WxAgentErrorCode.UiStructureChanged;
}
}