Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2010, 21:25   #1
Scorpion15
 
Регистрация: 20.07.2010
Сообщений: 5
По умолчанию Действия над старонними приложениями

Здравствуйте,
Вообщем я пытаюсь в чужом приложении выполнять разные действия,
копировать и вставлять в Edit и нажамать на кнопку у меня получилось,
а вот работа с меню че та не проходит....
Пробую так:

HWND H=FindWindow("Класс Приложения", "Caption формы");
HWND HH=FindWindowEx(H, NULL, "TMainMenu", NULL);
или так:
HWND H=FindWindow("Класс Приложения", "Caption формы");
HWND HH=FindWindowEx(H, NULL, "TMenuItem", NULL);
или так:
HWND H=FindWindow("Класс Приложения", "Caption формы");
HWND HH=FindWindowEx(H, NULL, "TMenuItem", "Название пункта меню");


Вообщем ничего не получается...
Помогите кто чем может....
Scorpion15 вне форума Ответить с цитированием
Старый 22.07.2010, 02:30   #2
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

Смотри функции GetMenu и GetSubMenu
|{ot вне форума Ответить с цитированием
Старый 22.07.2010, 14:01   #3
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

GetSystemMenu (по хендлу окна), возвращает указатель HMENU, т.е. главное меню приложения, а там уже при помощи апи можно делать с ним что угодно
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 22.07.2010, 23:08   #4
Scorpion15
 
Регистрация: 20.07.2010
Сообщений: 5
По умолчанию

Пробую вот так:

HMENU hMenu=GetMenu(H);
HMENU hGet=GetSubMenu(hMenu, 0);
SendMessage(GetMenuItemID(hGet, 1),WM_LBUTTONDOWN,0,0);
но в меню ни чего не нажимается, в чем моя ошибка?
Scorpion15 вне форума Ответить с цитированием
Старый 22.07.2010, 23:12   #5
Scorpion15
 
Регистрация: 20.07.2010
Сообщений: 5
По умолчанию

Да забыл H это:
HWND H=FindWindow("Класс окна", "Caption формы");
Scorpion15 вне форума Ответить с цитированием
Старый 22.07.2010, 23:51   #6
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

SendMessage не верно.

Смотри сообщение WM_COMMAND
|{ot вне форума Ответить с цитированием
Старый 23.07.2010, 00:12   #7
Scorpion15
 
Регистрация: 20.07.2010
Сообщений: 5
По умолчанию

Если вы имеете ввиду вместо WM_LBUTTONDOWN
WM_COMMAND поставить, то я пробовал, не подходит...или я что то неправильно понимаю?
Scorpion15 вне форума Ответить с цитированием
Старый 23.07.2010, 14:15   #8
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

Тебе надо узнать айдюху действия, которое генерится в целевом окне при нажатии на пункт меню и выслать этому окну сообщение WM_COMMAND с этой айдюхой то ли в lParam, то ли в wParam (точно не помню ужо).
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Старый 24.07.2010, 12:07   #9
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

Код:
hSystemMenu := GetSystemMenu(hMain, false);
AppendMenu(hSystemMenu, MF_SEPARATOR, 0, nil);
AppendMenu(hSystemMenu, MF_STRING, sMenuAbout, 'About...');
Код:
pMenuShowHide = WM_USER + 10;
pMenuAbout = WM_USER + 20;
pMenuClose = WM_USER + 30;
Код:
WM_COMMAND:
  begin
    case wParam of
      pMenuShowHide:
        ShowHide(hMain);
      pMenuAbout:
        About();
      pMenuClose:
        SendMessage(hMain, WM_CLOSE, 0, 0);
    end;
  end;
как можно здесь видеть параметр нажатие кнопки передается сообщением wm_command в wParam
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]

Последний раз редактировалось RUSt88; 24.07.2010 в 12:12.
RUSt88 вне форума Ответить с цитированием
Старый 25.07.2010, 00:36   #10
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

Когда происходит нажатие пункта меню, то функция окна обработки сообщения получает сообщения WM_COMMAND, а в wParam передается ID меню пункта назначеного при его создании:
Код:
BOOL AppendMenu(
	HMENU hMenu,		// дескриптор меню, который будет изменен
	UINT uFlags,		// флажки пункта меню
	UINT uIDNewItem,		// идентификатор пункта меню или дескриптор "выскакивающего" меню
				// или подменю
	LPCTSTR lpNewItem		// пункт контекстного меню
);
Это уже просветил RUSt88, только вроде не совсем правильно...

Вот так, кажется (тут только не совсем С, но думаю понятно):

Код:
pMenuAbout = WM_USER + 20;

hSystemMenu := GetSystemMenu(hMain, false);
AppendMenu(hSystemMenu, MF_STRING, pMenuAbout, 'About...');

WM_COMMAND:
  begin
    case wParam of
      pMenuAbout:
        About();
    end;
  end;
Теперь если хочеш нажать этот пункт меню программно, то:

Код:
HWND H=FindWindow("Класс окна", "Caption формы"); 
HMENU hMenu=GetMenu(H);
HMENU hGet=GetSubMenu(hMenu, 0);//это только для подменю, смотри саму структуру меню уже
SendMessage(H,WM_COMMAND,GetMenuItemID(hGet, 1),0);
http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

Последний раз редактировалось |{ot; 25.07.2010 в 00:44.
|{ot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
действия над многочленами nuevegramodelamor Помощь студентам 4 21.06.2010 01:31
линейные действия над векторами morgan996 Помощь студентам 4 09.01.2010 00:13
Действия над массивами hen Помощь студентам 2 06.06.2009 23:34
Действия над матрицами. (Delphi) ekzobyte Помощь студентам 1 20.05.2009 20:52