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

jslby

Client
Joined
Jan 2, 2016
Messages
77
Reaction score
5
Points
8
Автор, спасибо за статью. А с Вашим опытом и знаниями ответьте. Возможно ли запускать из WinAPI не одно окно Вайбера, а два, тем самым поддерживать многопоточность на уровне процессов Windows. Так же стоит учесть что копия Вайбер разрешена только одна и контролируется из процессов. Возможно ли это реализовать на WinAPI или пока ограничимся только кликолкой? :-)
 

black_pariah

Client
Joined
Sep 8, 2014
Messages
294
Reaction score
91
Points
28
Вот большое спасибо, когда то давно спрашивал на форуме как хотя бы сделать захват хендла окна, но безрезультатно, тема и по сей день нулёвая, а тут такая обширная информация, Спасибо, Крутая статья!!!
 
Joined
Dec 3, 2012
Messages
187
Reaction score
90
Points
28
Очень хорошая статья. Но есть несколько моментов:
Поиск по хендлеру, ну очень хреновая идея. Для этих моментов(поиск окна, кнопки), просто идеально подходит https://github.com/TestStack. С помощью этой либы можно искать элементы и работать с ними так
Code:
// 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
Joined
Jun 2, 2015
Messages
1,858
Reaction score
1,580
Points
113
Очень хорошая статья. Но есть несколько моментов:
Поиск по хендлеру, ну очень хреновая идея. Для этих моментов(поиск окна, кнопки), просто идеально подходит https://github.com/TestStack. С помощью этой либы можно искать элементы и работать с ними так
Code:
// 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();// Жмякаем на кнопку
Вот и вся стать в одном сообщении :-)
Если честно то нечего не понятно=( Конкурс же еще не кончился, напишите пожалуйста статью, с примерами как можно подробно
 
Joined
Dec 3, 2012
Messages
187
Reaction score
90
Points
28
Если честно то нечего не понятно=( Конкурс же еще не кончился, напишите пожалуйста статью, с примерами как можно подробно
Зачем это же не относится к зенно. Это про с# или c++, работа с окнами приложений.
В принципе написать статью не проблема. Проблема в том, к чему ее применить, что бы получить профит. К сожалению я не могу спалить свои темы, где я применяю эти библиотеки, так как они приносят доход.
 
  • Thank you
Reactions: MORENO

molotok

Client
Joined
Apr 17, 2015
Messages
742
Reaction score
366
Points
63
Я как человек не разбирающийся в программировании, так и не смог запустить сие... http://i.imgur.com/hpvJgeX.png
 

Serkser

Client
Joined
Jan 26, 2015
Messages
90
Reaction score
344
Points
53
Очень хорошая статья. Но есть несколько моментов:
Поиск по хендлеру, ну очень хреновая идея. Для этих моментов(поиск окна, кнопки), просто идеально подходит https://github.com/TestStack. С помощью этой либы можно искать элементы и работать с ними так
Code:
// 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
Joined
Jan 26, 2015
Messages
90
Reaction score
344
Points
53

molotok

Client
Joined
Apr 17, 2015
Messages
742
Reaction score
366
Points
63

Serkser

Client
Joined
Jan 26, 2015
Messages
90
Reaction score
344
Points
53

Serkser

Client
Joined
Jan 26, 2015
Messages
90
Reaction score
344
Points
53
Автор, спасибо за статью. А с Вашим опытом и знаниями ответьте. Возможно ли запускать из WinAPI не одно окно Вайбера, а два, тем самым поддерживать многопоточность на уровне процессов Windows. Так же стоит учесть что копия Вайбер разрешена только одна и контролируется из процессов. Возможно ли это реализовать на WinAPI или пока ограничимся только кликолкой? :-)
Это к winapi никак не относится, но если вы хотите открыть несколько копий программы, которая для этого не предназначена, то воспользуйтесь песочницей , а потом уже получайте дескрипторы каждой копии программы и в отдельных потоках шлите им нужные winapi функции, так и получится сделать многопоточность =)
 

samsonnn

Client
Joined
Jun 2, 2015
Messages
1,858
Reaction score
1,580
Points
113
Уважаемый Serkser если вам не трудно, и будет свободное время, запилите пожалуйста пару видеороликов по работе с другими окнами, такими как скайп, телеграм, аська и тому подобное. Расскажите как можно подробней, что от куда и куда, и зачем оно нужно именно там, а не где то еще в другом месте=) Отдам свой голос за вашу статью 100%

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

Мое личное мнение:
Круче этой статьи, нечего небыло и не будет=) Хотя могу ошибаться...
 
Last edited:
  • Thank you
Reactions: lexone

lzlmrf

Client
Joined
Aug 14, 2015
Messages
488
Reaction score
149
Points
43
однозначно лайк и первое место (как по мне). все подробно и понятно. Спасибо за статью
 
  • Thank you
Reactions: Serkser

Serkser

Client
Joined
Jan 26, 2015
Messages
90
Reaction score
344
Points
53
Уважаемый Serkser если вам не трудно, и будет свободное время, запилите пожалуйста пару видеороликов по работе с другими окнами, такими как скайп, телеграм, аська и тому подобное. Расскажите как можно подробней, что от куда и куда, и зачем оно нужно именно там, а не где то еще в другом месте=) Отдам свой голос за вашу статью 100%

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

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

Sputnik

Client
Joined
Aug 23, 2015
Messages
30
Reaction score
9
Points
8
Есть еще программа Winautomation. Это прога та же зенка только для десктоповых прог. Если их связать вместе, то будет ядерная бомба для интернета.
Может кто на следующий конкурс освоит.
 

execut0r

Client
Joined
Mar 12, 2014
Messages
263
Reaction score
271
Points
63
Вопрос снят. Глюк.
 
Last edited:

Kaspian

Client
Joined
Dec 23, 2013
Messages
93
Reaction score
132
Points
33
Отличная статья! Уже придумал как применить в своих темах)
 

tatarin

Client
Joined
Oct 28, 2012
Messages
847
Reaction score
140
Points
43
Есть еще программа Winautomation. Это прога та же зенка только для десктоповых прог. Если их связать вместе, то будет ядерная бомба для интернета.
Может кто на следующий конкурс освоит.
Тоже купил Winautomation, но все никак не начну осваивать. Материала на русском нету!
 

Mikhail B.

Client
Joined
Dec 23, 2014
Messages
14,453
Reaction score
5,472
Points
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

Потрясающе!
 

hard176

Client
Joined
Jun 19, 2014
Messages
43
Reaction score
11
Points
8
Serkser можно вопрос? Решил я поставить эксперименты со скайпом. И вижу, что сообщения в Spy++ очень сильно отличаются от тех, что у Вас на скринах.

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

Serkser

Client
Joined
Jan 26, 2015
Messages
90
Reaction score
344
Points
53
Serkser можно вопрос? Решил я поставить эксперименты со скайпом. И вижу, что сообщения в Spy++ очень сильно отличаются от тех, что у Вас на скринах.

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

hard176

Client
Joined
Jun 19, 2014
Messages
43
Reaction score
11
Points
8
Спасибо, с этим разобрался. Передал в метод название другого класса - там где в скайпе Контакты, используется класс TConversationsControl. При этом метод FindWindow возвращает 0 в переменную hwnd.
 

Serkser

Client
Joined
Jan 26, 2015
Messages
90
Reaction score
344
Points
53
Спасибо, с этим разобрался. Передал в метод название другого класса - там где в скайпе Контакты, используется класс TConversationsControl. При этом метод FindWindow возвращает 0 в переменную hwnd.
Потому что то окно которое вы ищите не является главным, оно принадлежит какому то другому окну, для его поиска используется функция FindWindowEx:
Code:
[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*/);
 

hard176

Client
Joined
Jun 19, 2014
Messages
43
Reaction score
11
Points
8
Спасибо, теперь вижу, что действия хоть какие-то происходят в окне - навигация есть.
Только такое впечатление, что клик не активирует контакт. Задача такая - при клике по контакту чтобы открывалось окно сообщений. Помогите, пожалуйста уже до конца разобраться
Код:

Code:
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
Joined
Jan 26, 2015
Messages
90
Reaction score
344
Points
53
Спасибо, теперь вижу, что действия хоть какие-то происходят в окне - навигация есть.
Только такое впечатление, что клик не активирует контакт. Задача такая - при клике по контакту чтобы открывалось окно сообщений. Помогите, пожалуйста уже до конца разобраться
Код:

Code:
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
Joined
Feb 1, 2012
Messages
4,858
Reaction score
1,193
Points
113
Будет 1 место - будут новые статьи с еще большими возможностями зенки, материала за время фриланса накопилось огромное кол- во )))
Ja tak smotrju shto budjet jesho stakje ? 65 golosov, poka 1 mesto :-) Pozdravljaju
 

Serkser

Client
Joined
Jan 26, 2015
Messages
90
Reaction score
344
Points
53
Ja tak smotrju shto budjet jesho stakje ? 65 golosov, poka 1 mesto :-) Pozdravljaju
До конца голосования еще много времени, но спасибо=)
Статьи будут)
 

fri-lancer

Client
Joined
Oct 1, 2013
Messages
419
Reaction score
160
Points
43
Очень хорошая статья. Но есть несколько моментов:
Поиск по хендлеру, ну очень хреновая идея. Для этих моментов(поиск окна, кнопки), просто идеально подходит https://github.com/TestStack. С помощью этой либы можно искать элементы и работать с ними так
Code:
// 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
Joined
Apr 20, 2015
Messages
6,171
Reaction score
6,534
Points
113
статья - огонь, сразу появилась огромная куча идей как можно применить эти знания, но к сожалению я не прогер и с СИ шарпом на такое "ВЫ", что самому противно.
но буду разбираться.
Тут можно далеко уйти от банальщины типа вибера и скайпа ...
 
  • Thank you
Reactions: durovino943

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)