Форум

Data.BG Форуми: Въпрос към програмисите във форума - Data.BG Форуми

Прехвърляне към съдържание

Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

Въпрос към програмисите във форума

#1
Потребителят е неактивен   daemonstar 

  • Група: Потребители
  • Мнения: 21
  • Регистриран: 03-March 06
  • Репутация: 0
Здравейте, обръщам се към хората тук, които се занимават с програмиране. Възможно ли е с програма да се следи натискане на конкретен бутон в друга програма и да се изведе съобщение за това? Не знам дали има значение, но програмата която искам да "наблюдавам" е писана на C# и работи с множество подпрозорци. Ако някой може да ми отговори и да ми даде идея, как да си напиша подобна програма.
Благодаря!
0

#2
Потребителят е активен   nakibest 

  • Mr. Company PC Guy
  • Група: Потребители
  • Мнения: 20824
  • Регистриран: 26-December 02
  • Репутация: 2500
  • Пол:Мъж
  • Град:Ботевград
  • Интереси:tennis, VB, C++ Builder, Win32 API

Преглед на мнениеdaemonstar, на 15.01.17 - 19:44, каза:

Здравейте, обръщам се към хората тук, които се занимават с програмиране. Възможно ли е с програма да се следи натискане на конкретен бутон в друга програма и да се изведе съобщение за това? Не знам дали има значение, но програмата която искам да "наблюдавам" е писана на C# и работи с множество подпрозорци. Ако някой може да ми отговори и да ми даде идея, как да си напиша подобна програма.
Благодаря!

Да, на C/C++:
http://www.cplusplus...m/lounge/27569/

По-точно, става с функцията:
SetWindowsHookEx
Публикувано изображениеПубликувано изображение
Публикувано изображениеПубликувано изображение
0

#3
Потребителят е неактивен   sharo 

  • Група: Потребители
  • Мнения: 2911
  • Регистриран: 06-April 03
  • Репутация: 411
  • Пол:Мъж
  • Град:София
Moже на С# да се слуша WH_KEYBOARD_LL
Ако е само за едното съобщение (MsgBox) - на просто С ще е най-лесно.
0

#4
Потребителят е неактивен   daemonstar 

  • Група: Потребители
  • Мнения: 21
  • Регистриран: 03-March 06
  • Репутация: 0
Да само за слушане искам да напиша приложение, но е за натискане на конкретен бутон в програма, която работи с множество отворени прозорци подобно на браузърите с табове. Можете ли да ми дадете някаква елементарна идея как да разбера кой точно бутон е натиснат от кой подпрозорец е станало събитието?
Благодаря !

Мнението беше редактирано от daemonstar: 07.02.17 - 17:41

0

#5
Потребителят е неактивен   sharo 

  • Група: Потребители
  • Мнения: 2911
  • Регистриран: 06-April 03
  • Репутация: 411
  • Пол:Мъж
  • Град:София
Бе де*а колко написах, ма не можа да се изпрати :(
Накратко - бутон на програмата или бутон на клавиатурата?
Ако е второто (то и първото де) е секс - трябва да намериш процеса, после нишките и прозорците. Трябва да решиш какво правиш при отваряне на нов/затваряне на стар прозорец. Прозорците по какво ги познаваш - различно име(текст) или друго - трябва ти някакъв актуален списък hwnd<->прозорец. После ако е бутон в програмата - какъв клас и какви съобщения получава (примерно туулбаровете са по-тегави). Чак тогава трябва dll със слушащата функция и ехе което да я закача (SetWindowsHookEx). За капак на всичко - функцията не е thread safe, и ще трябва да внимаваш с ресурсите или да намесваш семафори или друга ipc шитня.
Може и да слушаш цялата система и да си филтрираш само интересуващото те, но няма да се оттървеш от половината от горенаписаното.
Разгледай Spy++ какво прави, и ако се ориентираш...
0

#6
Потребителят е неактивен   daemonstar 

  • Група: Потребители
  • Мнения: 21
  • Регистриран: 03-March 06
  • Репутация: 0
Бутон в програма, като се има предвид, че табът или подпрозорецът ( незнам кое е по правилно тук ) не е активен постоянно, но табовете си имат свои имена предполагам могат да се получат от с някоя функция. Проблема ми е че нямам точна идея от къде да започна ако можеш да ми дадеш конкретен пример реализацията на такава програма.
Благодаря за отделеното време.

Spy++ може и да е добра за целта но на мен ми е нужно да реагира на точно определно събитие
и да бъде възможно най-опростена ...

Мнението беше редактирано от daemonstar: 07.02.17 - 22:12

0

#7
Потребителят е неактивен   sharo 

  • Група: Потребители
  • Мнения: 2911
  • Регистриран: 06-April 03
  • Репутация: 411
  • Пол:Мъж
  • Град:София
Spy++ ти трябва да видиш само класа на бутона и какви съобщения получава. После е лесно.
0

#8
Потребителят е неактивен   daemonstar 

  • Група: Потребители
  • Мнения: 21
  • Регистриран: 03-March 06
  • Репутация: 0
После как да използвам тази информация. Предполагам ще ми трябва WinAPI което не съм използвал никога.
Някаква насока къде да прочета по въпроса и ако има къде да разгледам малко примерни приложения??
0

#9
Потребителят е неактивен   sharo 

  • Група: Потребители
  • Мнения: 2911
  • Регистриран: 06-April 03
  • Репутация: 411
  • Пол:Мъж
  • Град:София
В msdn и stackoverflow има доста примери.
В общи линии, намираш бутона с FindWindowEx или EnumWindows според това, което си намерил със Spy++. После слагаш "слушалка" за съответното съобщение с SetWindowsHookEx, като филтъра си го пишеш в callback функцията. И периодично опресняваш списъка с бутони (ако има вариант да се затваря/отваря прозореца с бутона). Можеш и в самата callback функция, по hwnd да видиш класа с GetClassName и текста на бутона с GetWindowText, но тази работа има 2 недостатъка - първо, че за да вземе текста, програмата трябва да обработи предишното съобщение (т.е. не можеш да модифицираш съобщението за натискане на бутона), второто е че може да забие твоята програма, ако другата забие. А отделно ще натовари яко системата, ако за всеки видим елемент за всяко съобщение извиква по 2 функции.
0

Споделете тази тема чрез:


Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

1 потребители четат тази тема
0 регистрирани потребители, 1 гости и 0 анонимни потребители


Data.BG e форум за дискусии. Data.BG не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Data.BG.

Close  Member Login