Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
20.08.2016, 12:05
|
|||
---|---|---|---|
|
|||
Как сделать такое из своего приложения в чужом? |
|||
#18+
Есть некое исследуемое .NET приложение, при запуске оно прячется с system tray. При правом клике на иконку в трее приложение показывает меню, в котором есть один из пунктов "Старт/Стоп", при клике на него показываетсф окно с комбобоксом, где есть элементы Старт Стоп А при левом клике на иконку показывает сразу это окно "Старт\Стоп" окно. Чего хотелось бы: Как мне из отдельного моего .NET приложения программным путем сделать то же действие, что делает клик на иконку в трее, чтобы заставить исследуемое приложение открыть окно "Старт/Стоп"? Клик в иконку не проходит, не работает, реально кликается в другую иконку. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
21.08.2016, 01:06
|
|||
---|---|---|---|
Как сделать такое из своего приложения в чужом? |
|||
#18+
Ролг Хупин, Все кнопки являютя окнами виндовс и принимают сообщения ... |
|||
:
Нравится:
Не нравится:
|
|||
|
21.08.2016, 08:57
|
|||
---|---|---|---|
|
|||
Как сделать такое из своего приложения в чужом? |
|||
#18+
Cat2Ролг Хупин, Все кнопки являютя окнами виндовс и принимают сообщения Сделал так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Работает, но на одной машине с вин10 кликает на другую кнопку Сделал эксперимент: методом тыка изменял имя кнопки на те, которые тоже есть в трее, нашел такую, пир которой активируется мое приложение if (name.StartsWith("Dropbox")) { Console.WriteLine(@"Click!"); icon.InvokeButton(); break; } Бред какой-то, не пойму, в чем проблема. Одно из отличий разве что на этой машине два монитора. Ну или вопрос остается: что происходит, когда мышь кликает на кнопку в трее? приложение в этот момент есть в списке процессов и после клика оно показывает окно или меню. Можно ли симулировать такое же действие извне без клика на кнопку в трее? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
21.08.2016, 22:43
|
|||
---|---|---|---|
Как сделать такое из своего приложения в чужом? |
|||
#18+
Ролг Хупин, я думаю Cat2 таки имел ввиду FindWindow(Ex), SendMessage и т.д. spyxx/spy++ 8 еще в помощь. Но неблагодарное это дело, в чужие приложения лезть, за исключением случая когда есть явно описанные в документации этого приложения такие возможности. Было б это твое приложение, я бы тебе посоветовал принимать сообщения через mailslot а не в оконную процедуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.08.2016, 07:03
|
|||
---|---|---|---|
|
|||
Как сделать такое из своего приложения в чужом? |
|||
#18+
Cat2Ролг Хупин, Все кнопки являютя окнами виндовс и принимают сообщения Попробуйте с пом. Spy++ поймать любую кнопку в окошке profile manager'а firefrox: Или в окошке экспорта-импорта настроек решарпера: - не получится, потому как оба этих окна использую UI-фреймворки, сами занимающиеся отрисовкой графических примитивов: кнопки/текстбоксы-комбобоксы и проч, и поэтому окнами win32 эти элементы в данном случае не являются. В первом случае такой фреймворк - это XUL, во втором - WPF. И есть еще ряд такипх фреймфорков - тот же жабовский свинг. Поэтому в общем случае задача ТС нерешаема (даже если известно, что приложение дотнетовское). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.08.2016, 10:51
|
|||
---|---|---|---|
|
|||
Как сделать такое из своего приложения в чужом? |
|||
#18+
Исследуемое приложение - WPF. Кнопки в system tray ловятся, но при использовании UI Automation Invoke жмет не на кнопку этого приложения, а на какую-то кнопку рядом. Можно перебором подобрать какую-то кнопку, как я писал выше, при инвоке которой нажимается нужная мне. Вот я и подумал - какое действие шлется приложению, когда юзер жмет на кнопку в трее? Наверняка можно и из своего приложения такое же проделать, ведь целевое приложение в это время активный процесс. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
29.08.2016, 13:52
|
|||
---|---|---|---|
|
|||
Как сделать такое из своего приложения в чужом? |
|||
#18+
Почему разные координаты и как все-таки кликнуть в иконку? Мой код: private void button6_Click(object sender, EventArgs e) { foreach (var icon in EnumNotificationIcons()) { var name = icon.GetCurrentPropertyValue(AutomationElement.NameProperty) as string; if (name != null && name.StartsWith("Dropbox")) { System.Windows.Point clickablePoint1; object clickablePointNoDefault = icon.GetCurrentPropertyValue(AutomationElement.ClickablePointProperty, true); if (clickablePointNoDefault == AutomationElement.NotSupported) { Console.WriteLine(@"ClickablePointProperty is NotSupported"); } else { clickablePoint1 = (System.Windows.Point)clickablePointNoDefault; Console.WriteLine(@"clickablePoint=({0},{1})",clickablePoint1.X,clickablePoint1.Y); } Console.WriteLine(@"BoundingRectangle:X={0},Y={1},Width={2},Height={3}", icon.Current.BoundingRectangle.Location.X, icon.Current.BoundingRectangle.Location.Y, icon.Current.BoundingRectangle.Width, icon.Current.BoundingRectangle.Height); var invokePattern = icon.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern; if (invokePattern != null) { invokePattern.Invoke(); } break; } } } Вывод: clickablePoint=(2373,1329) BoundingRectangle:X=2344,Y=1300,Width=60,Height=60 Утилита Inspector.exe из SDK показывает такие проперти: How found: Selected from tree... Name: "Dropbox 8.4.21 Up to date" ControlType: UIA_ButtonControlTypeId (0xC350) LocalizedControlType: "button" BoundingRectangle: {l:3486 t:1920 r:3546 b:1980} IsEnabled: true IsOffscreen: false IsKeyboardFocusable: false HasKeyboardFocus: false AccessKey: "" ProcessId: 14104 RuntimeId: [2A.3018E.2.80000001.3018E.FFFFFFFC.6] IsControlElement: true IsContentElement: true ProviderDescription: "[pid:14104,hwnd:0x0 Annotation:Microsoft: Annotation Proxy (unmanaged:uiautomationcore.dll); Main(parent link):Microsoft: MSAA Proxy (unmanaged:uiautomationcore.dll)]" IsPassword: false HelpText: "" LegacyIAccessible.ChildId: 6 LegacyIAccessible.DefaultAction: "Press" LegacyIAccessible.Description: "" LegacyIAccessible.Help: "" LegacyIAccessible.KeyboardShortcut: "" LegacyIAccessible.Name: "Dropbox 8.4.21 Up to date" LegacyIAccessible.Role: push button (0x2B) LegacyIAccessible.State: normal (0x0) LegacyIAccessible.Value: "" IsAnnotationPatternAvailable: false IsDragPatternAvailable: false IsDockPatternAvailable: false IsDropTargetPatternAvailable: false IsExpandCollapsePatternAvailable: false IsGridItemPatternAvailable: false IsGridPatternAvailable: false IsInvokePatternAvailable: true IsItemContainerPatternAvailable: false IsLegacyIAccessiblePatternAvailable: true IsMultipleViewPatternAvailable: false IsObjectModelPatternAvailable: false IsRangeValuePatternAvailable: false IsScrollItemPatternAvailable: false IsScrollPatternAvailable: false IsSelectionItemPatternAvailable: false IsSelectionPatternAvailable: false IsSpreadsheetItemPatternAvailable: false IsSpreadsheetPatternAvailable: false IsStylesPatternAvailable: false IsSynchronizedInputPatternAvailable: false IsTableItemPatternAvailable: false IsTablePatternAvailable: false IsTextChildPatternAvailable: false IsTextEditPatternAvailable: false IsTextPatternAvailable: false IsTextPattern2Available: false IsTogglePatternAvailable: false IsTransformPatternAvailable: false IsTransform2PatternAvailable: false IsValuePatternAvailable: false IsVirtualizedItemPatternAvailable: false IsWindowPatternAvailable: false IsCustomNavigationPatternAvailable: false FirstChild: [null] LastChild: [null] Next: "Microsoft Outlook" button Previous: "ABBYY Lingvo" button Other Props: Object has no additional properties Children: Container has no children Ancestors: "Overflow Notification Area" tool bar "Notification Overflow" pane "Desktop" pane [ No Parent ] ... |
|||
:
Нравится:
Не нравится:
|
|||
|
29.08.2016, 15:35
|
|||
---|---|---|---|
|
|||
Как сделать такое из своего приложения в чужом? |
|||
#18+
Сделал эксперимент на трех машинах с разыми установками DPI, вот что получилось Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Нормально отрабатывает тольбко в случае DPI=100%, иначе куда-то в другое место. Как пересчитать и кликнуть правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=20&mobile=1&tid=1400374]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
96ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 215ms |
0 / 0 |