1 место PM+WinApi или управление окнами любых других приложений

Автор, спасибо за статью. А с Вашим опытом и знаниями ответьте. Возможно ли запускать из WinAPI не одно окно Вайбера, а два, тем самым поддерживать многопоточность на уровне процессов Windows. Так же стоит учесть что копия Вайбер разрешена только одна и контролируется из процессов. Возможно ли это реализовать на WinAPI или пока ограничимся только кликолкой? :)
 
Вот большое спасибо, когда то давно спрашивал на форуме как хотя бы сделать захват хендла окна, но безрезультатно, тема и по сей день нулёвая, а тут такая обширная информация, Спасибо, Крутая статья!!!
 
Очень хорошая статья. Но есть несколько моментов:
Поиск по хендлеру, ну очень хреновая идея. Для этих моментов(поиск окна, кнопки), просто идеально подходит https://github.com/TestStack. С помощью этой либы можно искать элементы и работать с ними так
Код:
Развернуть Свернуть Копировать
// using TestStack.White.UIItems.Finders;
// using TestStack.White.UIItems.WindowItems;
// using System.Windows.Automation;
// using System.Runtime.InteropServices;

TestStack.White.Application application = TestStack.White.Application.Attach(Mprocess);
Window window = application.GetWindow("Телеграм");// Ищем нужное окно по названию
IntPtr hWnd = Mprocess.MainWindowHandle;// Получаем хэндлер окна
ShowWindow(hWnd, ShowWindowCommands.ShowMaximized);
window.Focus(DisplayState.Maximized);                 
var container = window.Get(SearchCriteria.ByControlType(ControlType.Custom).AndByText("отправить"));// Ищем кнопку с нужным  текстом
container.Click();// Жмякаем на кнопку

Вот и вся стать в одном сообщении :-)
 
Очень хорошая статья. Но есть несколько моментов:
Поиск по хендлеру, ну очень хреновая идея. Для этих моментов(поиск окна, кнопки), просто идеально подходит https://github.com/TestStack. С помощью этой либы можно искать элементы и работать с ними так
Код:
Развернуть Свернуть Копировать
// using TestStack.White.UIItems.Finders;
// using TestStack.White.UIItems.WindowItems;
// using System.Windows.Automation;
// using System.Runtime.InteropServices;

TestStack.White.Application application = TestStack.White.Application.Attach(Mprocess);
Window window = application.GetWindow("Телеграм");// Ищем нужное окно по названию
IntPtr hWnd = Mprocess.MainWindowHandle;// Получаем хэндлер окна
ShowWindow(hWnd, ShowWindowCommands.ShowMaximized);
window.Focus(DisplayState.Maximized);                
var container = window.Get(SearchCriteria.ByControlType(ControlType.Custom).AndByText("отправить"));// Ищем кнопку с нужным  текстом
container.Click();// Жмякаем на кнопку

Вот и вся стать в одном сообщении :-)
Если честно то нечего не понятно=( Конкурс же еще не кончился, напишите пожалуйста статью, с примерами как можно подробно
 
Если честно то нечего не понятно=( Конкурс же еще не кончился, напишите пожалуйста статью, с примерами как можно подробно
Зачем это же не относится к зенно. Это про с# или c++, работа с окнами приложений.
В принципе написать статью не проблема. Проблема в том, к чему ее применить, что бы получить профит. К сожалению я не могу спалить свои темы, где я применяю эти библиотеки, так как они приносят доход.
 
  • Спасибо
Реакции: MORENO
Очень хорошая статья. Но есть несколько моментов:
Поиск по хендлеру, ну очень хреновая идея. Для этих моментов(поиск окна, кнопки), просто идеально подходит https://github.com/TestStack. С помощью этой либы можно искать элементы и работать с ними так
Код:
Развернуть Свернуть Копировать
// using TestStack.White.UIItems.Finders;
// using TestStack.White.UIItems.WindowItems;
// using System.Windows.Automation;
// using System.Runtime.InteropServices;

TestStack.White.Application application = TestStack.White.Application.Attach(Mprocess);
Window window = application.GetWindow("Телеграм");// Ищем нужное окно по названию
IntPtr hWnd = Mprocess.MainWindowHandle;// Получаем хэндлер окна
ShowWindow(hWnd, ShowWindowCommands.ShowMaximized);
window.Focus(DisplayState.Maximized);                
var container = window.Get(SearchCriteria.ByControlType(ControlType.Custom).AndByText("отправить"));// Ищем кнопку с нужным  текстом
container.Click();// Жмякаем на кнопку

Вот и вся стать в одном сообщении :-)
Ну это просто обертка над теми же функциями, да и в некоторых случаях она может не сработать =)
 
Автор, спасибо за статью. А с Вашим опытом и знаниями ответьте. Возможно ли запускать из WinAPI не одно окно Вайбера, а два, тем самым поддерживать многопоточность на уровне процессов Windows. Так же стоит учесть что копия Вайбер разрешена только одна и контролируется из процессов. Возможно ли это реализовать на WinAPI или пока ограничимся только кликолкой? :-)

Это к winapi никак не относится, но если вы хотите открыть несколько копий программы, которая для этого не предназначена, то воспользуйтесь песочницей , а потом уже получайте дескрипторы каждой копии программы и в отдельных потоках шлите им нужные winapi функции, так и получится сделать многопоточность =)
 
Уважаемый Serkser если вам не трудно, и будет свободное время, запилите пожалуйста пару видеороликов по работе с другими окнами, такими как скайп, телеграм, аська и тому подобное. Расскажите как можно подробней, что от куда и куда, и зачем оно нужно именно там, а не где то еще в другом месте=) Отдам свой голос за вашу статью 100%

Вопрос:
Можно ли брать текст из списка, или с переменной в зеннопостере, и вставлять в окно меседжера?

Мое личное мнение:
Круче этой статьи, нечего небыло и не будет=) Хотя могу ошибаться...
 
Последнее редактирование:
  • Спасибо
Реакции: lexone
однозначно лайк и первое место (как по мне). все подробно и понятно. Спасибо за статью
 
  • Спасибо
Реакции: Serkser
Уважаемый Serkser если вам не трудно, и будет свободное время, запилите пожалуйста пару видеороликов по работе с другими окнами, такими как скайп, телеграм, аська и тому подобное. Расскажите как можно подробней, что от куда и куда, и зачем оно нужно именно там, а не где то еще в другом месте=) Отдам свой голос за вашу статью 100%

Вопрос:
Можно ли брать текст из списка, или с переменной в зеннопостере, и вставлять в окно меседжера?

Мое личное мнение:
Круче этой статьи, нечего небыло и не будет=) Хотя могу ошибаться...
Спасибо большое =) Да, статьи смогу сделать, но это уже после конкурса. Текст из переменной конечно можно брать, просто строку с назначением текста замените на
Код:
Развернуть Свернуть Копировать
string text= project.Variables["тут имя переменной из PM"].Value;
 
Последнее редактирование:
Есть еще программа Winautomation. Это прога та же зенка только для десктоповых прог. Если их связать вместе, то будет ядерная бомба для интернета.
Может кто на следующий конкурс освоит.
 
Вопрос снят. Глюк.
 
Последнее редактирование:
Отличная статья! Уже придумал как применить в своих темах)
 
Есть еще программа Winautomation. Это прога та же зенка только для десктоповых прог. Если их связать вместе, то будет ядерная бомба для интернета.
Может кто на следующий конкурс освоит.
Тоже купил Winautomation, но все никак не начну осваивать. Материала на русском нету!
 
Если есть Winautomation, то зачем нужен ZennoPoster?

upload_2016-5-17_12-46-0.png


http://www.winautomation.com/features/
 
Потрясающе!
 
Serkser можно вопрос? Решил я поставить эксперименты со скайпом. И вижу, что сообщения в Spy++ очень сильно отличаются от тех, что у Вас на скринах.
c5d0fc17995f43a74e5bfd6c0f3094a5.png

Как быть с WM_PARENTNOTIFY и далее? На Pinvoke по запросу нашел константы и перечисления.
 
Serkser можно вопрос? Решил я поставить эксперименты со скайпом. И вижу, что сообщения в Spy++ очень сильно отличаются от тех, что у Вас на скринах.
c5d0fc17995f43a74e5bfd6c0f3094a5.png

Как быть с WM_PARENTNOTIFY и далее? На Pinvoke по запросу нашел константы и перечисления.
Это не те сообщения что вам нужны=) Вы наверно смотрите сообщеня для главного окна, а у скайпа это окно состоит из несколько других окон, поводите по окну скайпа прицелом от spy++ и вы это увидите
 
  • Спасибо
Реакции: hard176
Спасибо, с этим разобрался. Передал в метод название другого класса - там где в скайпе Контакты, используется класс TConversationsControl. При этом метод FindWindow возвращает 0 в переменную hwnd.
 
Спасибо, с этим разобрался. Передал в метод название другого класса - там где в скайпе Контакты, используется класс TConversationsControl. При этом метод FindWindow возвращает 0 в переменную hwnd.
Потому что то окно которое вы ищите не является главным, оно принадлежит какому то другому окну, для его поиска используется функция FindWindowEx:
Код:
Развернуть Свернуть Копировать
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern IntPtr FindWindowEx(IntPtr parentHandle /*хендл родительского окна, которое нашел FindWindow*/, IntPtr childAfter /*это ставите IntPtr.Zero*/, string lclassName /*это класс искомого окна*/, string windowTitle /*это его заголовок можно оставить null*/);
 
  • Спасибо
Реакции: riddler78 и hard176
Спасибо, теперь вижу, что действия хоть какие-то происходят в окне - навигация есть.
Только такое впечатление, что клик не активирует контакт. Задача такая - при клике по контакту чтобы открывалось окно сообщений. Помогите, пожалуйста уже до конца разобраться
Код:

Код:
Развернуть Свернуть Копировать
IntPtr hwnd = CommonCode.FindWindow("tSkMainForm", null);
IntPtr contacts= CommonCode.FindWindowEx(hwnd, IntPtr.Zero, "TConversationsControl",null);
CommonCode.SendMessage(contacts, CommonCode.WM_MOUSEMOVE, IntPtr.Zero, CommonCode.MakeLParam(30, 333));
CommonCode.SendMessage(contacts, CommonCode.WM_LBUTTONDOWN, (IntPtr)CommonCode.MK_LBUTTON, CommonCode.MakeLParam(30, 333));
CommonCode.SendMessage(contacts, CommonCode.WM_LBUTTONUP, IntPtr.Zero, CommonCode.MakeLParam(30, 333));

return contacts;
 
Спасибо, теперь вижу, что действия хоть какие-то происходят в окне - навигация есть.
Только такое впечатление, что клик не активирует контакт. Задача такая - при клике по контакту чтобы открывалось окно сообщений. Помогите, пожалуйста уже до конца разобраться
Код:

Код:
Развернуть Свернуть Копировать
IntPtr hwnd = CommonCode.FindWindow("tSkMainForm", null);
IntPtr contacts= CommonCode.FindWindowEx(hwnd, IntPtr.Zero, "TConversationsControl",null);
CommonCode.SendMessage(contacts, CommonCode.WM_MOUSEMOVE, IntPtr.Zero, CommonCode.MakeLParam(30, 333));
CommonCode.SendMessage(contacts, CommonCode.WM_LBUTTONDOWN, (IntPtr)CommonCode.MK_LBUTTON, CommonCode.MakeLParam(30, 333));
CommonCode.SendMessage(contacts, CommonCode.WM_LBUTTONUP, IntPtr.Zero, CommonCode.MakeLParam(30, 333));

return contacts;
Посмотрите, если от руки отправляются сообщения на подобии WM_MOUSEACTIVATE - это тоже надо сформировать и отправить
 
Будет 1 место - будут новые статьи с еще большими возможностями зенки, материала за время фриланса накопилось огромное кол- во )))

Ja tak smotrju shto budjet jesho stakje ? 65 golosov, poka 1 mesto :) Pozdravljaju
 
Очень хорошая статья. Но есть несколько моментов:
Поиск по хендлеру, ну очень хреновая идея. Для этих моментов(поиск окна, кнопки), просто идеально подходит https://github.com/TestStack. С помощью этой либы можно искать элементы и работать с ними так
Код:
Развернуть Свернуть Копировать
// using TestStack.White.UIItems.Finders;
// using TestStack.White.UIItems.WindowItems;
// using System.Windows.Automation;
// using System.Runtime.InteropServices;

TestStack.White.Application application = TestStack.White.Application.Attach(Mprocess);
Window window = application.GetWindow("Телеграм");// Ищем нужное окно по названию
IntPtr hWnd = Mprocess.MainWindowHandle;// Получаем хэндлер окна
ShowWindow(hWnd, ShowWindowCommands.ShowMaximized);
window.Focus(DisplayState.Maximized);                
var container = window.Get(SearchCriteria.ByControlType(ControlType.Custom).AndByText("отправить"));// Ищем кнопку с нужным  текстом
container.Click();// Жмякаем на кнопку

Вот и вся стать в одном сообщении :-)
Дармидонт, подскажи а как ее подружить с зенкой?
 
статья - огонь, сразу появилась огромная куча идей как можно применить эти знания, но к сожалению я не прогер и с СИ шарпом на такое "ВЫ", что самому противно.
но буду разбираться.
Тут можно далеко уйти от банальщины типа вибера и скайпа ...
 
  • Спасибо
Реакции: durovino943

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)