62 lines
3.2 KiB
C#
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;
|
|
}
|
|
}
|