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

jslby

Client
Регистрация
02.01.2016
Сообщения
77
Благодарностей
5
Баллы
8
Автор, спасибо за статью. А с Вашим опытом и знаниями ответьте. Возможно ли запускать из WinAPI не одно окно Вайбера, а два, тем самым поддерживать многопоточность на уровне процессов Windows. Так же стоит учесть что копия Вайбер разрешена только одна и контролируется из процессов. Возможно ли это реализовать на WinAPI или пока ограничимся только кликолкой? :-)
 

black_pariah

Client
Регистрация
08.09.2014
Сообщения
294
Благодарностей
91
Баллы
28
Вот большое спасибо, когда то давно спрашивал на форуме как хотя бы сделать захват хендла окна, но безрезультатно, тема и по сей день нулёвая, а тут такая обширная информация, Спасибо, Крутая статья!!!
 
Регистрация
03.12.2012
Сообщения
187
Благодарностей
90
Баллы
28
Очень хорошая статья. Но есть несколько моментов:
Поиск по хендлеру, ну очень хреновая идея. Для этих моментов(поиск окна, кнопки), просто идеально подходит 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();// Жмякаем на кнопку
Вот и вся стать в одном сообщении :-)
 

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 762
Благодарностей
1 432
Баллы
113
Очень хорошая статья. Но есть несколько моментов:
Поиск по хендлеру, ну очень хреновая идея. Для этих моментов(поиск окна, кнопки), просто идеально подходит 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();// Жмякаем на кнопку
Вот и вся стать в одном сообщении :-)
Если честно то нечего не понятно=( Конкурс же еще не кончился, напишите пожалуйста статью, с примерами как можно подробно
 
Регистрация
03.12.2012
Сообщения
187
Благодарностей
90
Баллы
28
Если честно то нечего не понятно=( Конкурс же еще не кончился, напишите пожалуйста статью, с примерами как можно подробно
Зачем это же не относится к зенно. Это про с# или c++, работа с окнами приложений.
В принципе написать статью не проблема. Проблема в том, к чему ее применить, что бы получить профит. К сожалению я не могу спалить свои темы, где я применяю эти библиотеки, так как они приносят доход.
 
  • Спасибо
Реакции: MORENO

molotok

Client
Регистрация
17.04.2015
Сообщения
733
Благодарностей
358
Баллы
63
Я как человек не разбирающийся в программировании, так и не смог запустить сие... http://i.imgur.com/hpvJgeX.png
 

Serkser

Client
Регистрация
26.01.2015
Сообщения
90
Благодарностей
343
Баллы
53
Очень хорошая статья. Но есть несколько моментов:
Поиск по хендлеру, ну очень хреновая идея. Для этих моментов(поиск окна, кнопки), просто идеально подходит 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();// Жмякаем на кнопку
Вот и вся стать в одном сообщении :-)
Ну это просто обертка над теми же функциями, да и в некоторых случаях она может не сработать =)
 

Serkser

Client
Регистрация
26.01.2015
Сообщения
90
Благодарностей
343
Баллы
53

molotok

Client
Регистрация
17.04.2015
Сообщения
733
Благодарностей
358
Баллы
63

Serkser

Client
Регистрация
26.01.2015
Сообщения
90
Благодарностей
343
Баллы
53

Serkser

Client
Регистрация
26.01.2015
Сообщения
90
Благодарностей
343
Баллы
53
Автор, спасибо за статью. А с Вашим опытом и знаниями ответьте. Возможно ли запускать из WinAPI не одно окно Вайбера, а два, тем самым поддерживать многопоточность на уровне процессов Windows. Так же стоит учесть что копия Вайбер разрешена только одна и контролируется из процессов. Возможно ли это реализовать на WinAPI или пока ограничимся только кликолкой? :-)
Это к winapi никак не относится, но если вы хотите открыть несколько копий программы, которая для этого не предназначена, то воспользуйтесь песочницей , а потом уже получайте дескрипторы каждой копии программы и в отдельных потоках шлите им нужные winapi функции, так и получится сделать многопоточность =)
 

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 762
Благодарностей
1 432
Баллы
113
Уважаемый Serkser если вам не трудно, и будет свободное время, запилите пожалуйста пару видеороликов по работе с другими окнами, такими как скайп, телеграм, аська и тому подобное. Расскажите как можно подробней, что от куда и куда, и зачем оно нужно именно там, а не где то еще в другом месте=) Отдам свой голос за вашу статью 100%

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

Мое личное мнение:
Круче этой статьи, нечего небыло и не будет=) Хотя могу ошибаться...
 
Последнее редактирование:
  • Спасибо
Реакции: lexone

lzlmrf

Client
Регистрация
14.08.2015
Сообщения
488
Благодарностей
149
Баллы
43
однозначно лайк и первое место (как по мне). все подробно и понятно. Спасибо за статью
 
  • Спасибо
Реакции: Serkser

Serkser

Client
Регистрация
26.01.2015
Сообщения
90
Благодарностей
343
Баллы
53
Уважаемый Serkser если вам не трудно, и будет свободное время, запилите пожалуйста пару видеороликов по работе с другими окнами, такими как скайп, телеграм, аська и тому подобное. Расскажите как можно подробней, что от куда и куда, и зачем оно нужно именно там, а не где то еще в другом месте=) Отдам свой голос за вашу статью 100%

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

Мое личное мнение:
Круче этой статьи, нечего небыло и не будет=) Хотя могу ошибаться...
Спасибо большое =) Да, статьи смогу сделать, но это уже после конкурса. Текст из переменной конечно можно брать, просто строку с назначением текста замените на
Код:
string text= project.Variables["тут имя переменной из PM"].Value;
 
Последнее редактирование:

Sputnik

Client
Регистрация
23.08.2015
Сообщения
30
Благодарностей
9
Баллы
8
Есть еще программа Winautomation. Это прога та же зенка только для десктоповых прог. Если их связать вместе, то будет ядерная бомба для интернета.
Может кто на следующий конкурс освоит.
 

execut0r

Client
Регистрация
12.03.2014
Сообщения
263
Благодарностей
271
Баллы
63
Вопрос снят. Глюк.
 
Последнее редактирование:

Kaspian

Client
Регистрация
23.12.2013
Сообщения
93
Благодарностей
132
Баллы
33
Отличная статья! Уже придумал как применить в своих темах)
 

tatarin

Client
Регистрация
28.10.2012
Сообщения
805
Благодарностей
137
Баллы
43
Есть еще программа Winautomation. Это прога та же зенка только для десктоповых прог. Если их связать вместе, то будет ядерная бомба для интернета.
Может кто на следующий конкурс освоит.
Тоже купил Winautomation, но все никак не начну осваивать. Материала на русском нету!
 

zortexx

Client
Регистрация
19.09.2011
Сообщения
2 520
Благодарностей
1 225
Баллы
113

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 427
Благодарностей
5 454
Баллы
113
Потрясающе!
 

hard176

Client
Регистрация
19.06.2014
Сообщения
43
Благодарностей
11
Баллы
8
Serkser можно вопрос? Решил я поставить эксперименты со скайпом. И вижу, что сообщения в Spy++ очень сильно отличаются от тех, что у Вас на скринах.

Как быть с WM_PARENTNOTIFY и далее? На Pinvoke по запросу нашел константы и перечисления.
 

Serkser

Client
Регистрация
26.01.2015
Сообщения
90
Благодарностей
343
Баллы
53
Serkser можно вопрос? Решил я поставить эксперименты со скайпом. И вижу, что сообщения в Spy++ очень сильно отличаются от тех, что у Вас на скринах.

Как быть с WM_PARENTNOTIFY и далее? На Pinvoke по запросу нашел константы и перечисления.
Это не те сообщения что вам нужны=) Вы наверно смотрите сообщеня для главного окна, а у скайпа это окно состоит из несколько других окон, поводите по окну скайпа прицелом от spy++ и вы это увидите
 
  • Спасибо
Реакции: hard176

hard176

Client
Регистрация
19.06.2014
Сообщения
43
Благодарностей
11
Баллы
8
Спасибо, с этим разобрался. Передал в метод название другого класса - там где в скайпе Контакты, используется класс TConversationsControl. При этом метод FindWindow возвращает 0 в переменную hwnd.
 

Serkser

Client
Регистрация
26.01.2015
Сообщения
90
Благодарностей
343
Баллы
53
Спасибо, с этим разобрался. Передал в метод название другого класса - там где в скайпе Контакты, используется класс 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

hard176

Client
Регистрация
19.06.2014
Сообщения
43
Благодарностей
11
Баллы
8
Спасибо, теперь вижу, что действия хоть какие-то происходят в окне - навигация есть.
Только такое впечатление, что клик не активирует контакт. Задача такая - при клике по контакту чтобы открывалось окно сообщений. Помогите, пожалуйста уже до конца разобраться
Код:

Код:
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;
 

Serkser

Client
Регистрация
26.01.2015
Сообщения
90
Благодарностей
343
Баллы
53
Спасибо, теперь вижу, что действия хоть какие-то происходят в окне - навигация есть.
Только такое впечатление, что клик не активирует контакт. Задача такая - при клике по контакту чтобы открывалось окно сообщений. Помогите, пожалуйста уже до конца разобраться
Код:

Код:
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 - это тоже надо сформировать и отправить
 

lokiys

Moderator
Регистрация
01.02.2012
Сообщения
4 805
Благодарностей
1 187
Баллы
113
Будет 1 место - будут новые статьи с еще большими возможностями зенки, материала за время фриланса накопилось огромное кол- во )))
Ja tak smotrju shto budjet jesho stakje ? 65 golosov, poka 1 mesto :-) Pozdravljaju
 

Serkser

Client
Регистрация
26.01.2015
Сообщения
90
Благодарностей
343
Баллы
53
  • Спасибо
Реакции: samsonnn, Radzhab и lokiys

fri-lancer

Client
Регистрация
01.10.2013
Сообщения
415
Благодарностей
155
Баллы
43
Очень хорошая статья. Но есть несколько моментов:
Поиск по хендлеру, ну очень хреновая идея. Для этих моментов(поиск окна, кнопки), просто идеально подходит 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();// Жмякаем на кнопку
Вот и вся стать в одном сообщении :-)
Дармидонт, подскажи а как ее подружить с зенкой?
 

backoff

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

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