Вад
|
|
« Ответ #30 : 30-03-2010 13:24 » |
|
lapulya, почему сразу вирус? Даже Lingvo позволяет себе вешать хуки, чтобы по горячим клавишам дёргать выделенный текст в других приложениях и искать в словаре.
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #31 : 30-03-2010 14:45 » |
|
Нет я для вирусмейкера очень мало знаком с С++, я лиш пытаюсь приобрести знания. Например если программа созданная другим программистом недостаточно удобна, или быстро работает. Почему бы не создать для нее вспомогательную программу где были бы реализованы дедостающие возможности. При этом доступ к самой базе данных затруднен, (подлючение сторонними приложениями будет, я полагаю, инициализироваться как взлом), а вот когда логин пароль например введены, дальнейшие манипуляции с пощощю API как я считаю незаметны и безобидны. Хотя я может быть и не прав?
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #32 : 30-03-2010 14:52 » |
|
А на счет смены реализации контрола, приложение сразу же будет подогнанно под новую его реализацию. Приложением то пользоваться буду только я.
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #33 : 31-03-2010 18:32 » |
|
HWND hwnd; HMENU uu;
switch (message) {
case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case ID_YUYU: { hwnd = FindWindow("OpusApp", 0); uu = GetMenu(hwnd); uu = GetSubMenu(uu, 2); //PostMessage(hwnd, WM_COMMAND, uu, 0) } break; почему неработает GetMenu(hwnd) ? все облазил понять немогу
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #34 : 31-03-2010 18:37 » |
|
а как выражается то, что она не работает ? If the specified window has no menu, the return value is NULL. If the window is a child window, the return value is undefined.
так же, если сам хендл окна ==0
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #35 : 31-03-2010 18:42 » |
|
CXX030 ERROR Expression cannot be evaluated , в общем ==0
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #36 : 31-03-2010 18:45 » |
|
если указать ID самого контрола то функция возвращает то же значение , но уже не GetSubMenu зощвращает ==0
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #37 : 31-03-2010 18:47 » |
|
может ошибка в объявлении переменной?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #38 : 31-03-2010 18:48 » |
|
HWND FindWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName );
попробуй hwnd = FindWindow(0,"OpusApp");
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #39 : 31-03-2010 18:54 » |
|
нет OpusApp это класс окна, (M WORD) иначе hWnd = 0x0000000. Здесь загвоздка в GetMenu(hwnd).
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #40 : 31-03-2010 19:01 » |
|
на бейсике тоже не получается. а вот собственное меню на бейсике получилось вытащить через (me.hWnd) значит функция должна работать.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #41 : 31-03-2010 19:03 » |
|
Hadron, а ты точно своё окно находишь - по классу одному то ? )
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #42 : 31-03-2010 19:13 » |
|
Вордовское окно у меня одно, да и поначалу в другой проге искал меню, та же ситуация.
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #43 : 31-03-2010 19:16 » |
|
HWND hwnd; HMENU uu; hwnd = FindWindow("OpusApp", 0); uu = GetMenu(hwnd); uu = GetSubMenu(uu, 2); значит по логике вещей эти стоки правильны? если учитывать что hWnd окно именно то что я ищу.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #44 : 31-03-2010 19:21 » |
|
может и правильные, я щас не могу попробовать но 1) может всё же ищется не то окно, но с тем же классом и без меню 2) зарегистрирован ли класс в винде ?
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #45 : 31-03-2010 19:26 » |
|
да странно на третьем приложении получилось. и как найти нужное окно?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #46 : 31-03-2010 19:30 » |
|
Hadron, надо ещё название - текст из заголовка
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #47 : 31-03-2010 19:35 » |
|
Window Caption?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #48 : 31-03-2010 19:38 » |
|
ага
GetWindowText
то, что в заголовке окна пишется
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #49 : 31-03-2010 19:43 » |
|
Проверил в обоих случаях адрес одинаковый, значит окно нужное. Остается 2 причина незарегистрированный класс. Но класс например вордовский обязательно должен быть зарегистрирован в Windows
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #50 : 31-03-2010 19:49 » |
|
Может что то с меню? Может меню не идентифицировано в приложении, больше ничего на ум не приходит.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #51 : 31-03-2010 19:59 » |
|
может там меню особое ? )
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #52 : 02-04-2010 15:20 » |
|
Знаеш какой интересный факт я заметил, В том приложении в котором я смог добраться до меню, меню не имело самостоятельный класс, т.е. оно относится к классу самого окна приложения, а в других двух случаях они являлись самостоятельным классом, как например все остальные контролы.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #53 : 02-04-2010 15:40 » |
|
ну дык, значит GetMenu не канает Remarks
GetMenu does not work on floating menu bars. Floating menu bars are custom controls that mimic standard menus; they are not menus. To get the handle for a floating menu bar, use the Active Accessibility APIs.
что имеется в виду под Active Accessibility APIs , не знаю
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #54 : 02-04-2010 16:41 » |
|
Хук должен находиться в DLL если я хочу перехватить инфу в другом приложении(Глобальный)? А если хук ставится на программу которая его и вызывает то не нужно вызывать хук из DLL (локальный). Ну что то навроде этого. Вообще эти меню представляют собой контролы с подряд стоящими кнопками, я подозреваю они все проиндексированы, есть интересно способ вызова кликов на эти кнопки через индексы?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #55 : 02-04-2010 16:46 » |
|
Hadron, рекомендую пошуршать прицелом спая мо менюшке, будешь приятно удивлён )
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #56 : 02-04-2010 16:52 » |
|
Один из способов — использование Active Accessibility (WinAPI). Это API как раз для вспомогательных программ. В комплекте с Platform SDK шёл Accessibility Explorer. Он может дать представление о возможностях Active Accessibility. Я пробежаля прицелом спая по менюшке ворда, но смог лиш добраться до ID всего контрола меню.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #57 : 02-04-2010 16:54 » |
|
вот вот - кнопки то рисованные. А теперь зацепись за фрейм и подсматривай сообщения, которые летят во время нажатия на кнопку меню
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #58 : 02-04-2010 17:11 » |
|
WM_LBUTTONDOWN wParam: 00000001 IParam000A003 WM_LBUTTONUP
и у меня такие ощущения что передаются коодинаты клика, но координаты не превязанные к контролу а координаты экрана полагаю
|
|
|
Записан
|
|
|
|
Hadron
Участник
Offline
|
|
« Ответ #59 : 02-04-2010 18:47 » |
|
Нет ссылки на исходник или листинг глобального хука (DLL и EXE), не догоняю как должно все работать
|
|
|
Записан
|
|
|
|
|