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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2011, 19:17   #1
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию С++ Builder и функции Win API

Я пересмотрел весь Win API и попробовл все понятые мной функции управления чужим приложением.
вот что у меня получилось... черновой набросок. Это все работает до части 2 (см ниже). в части 2 я пытаюсь нажать кнопку название которой содержится в Edit2->Text. и закрыть чужое приложение. При компеляции весь код не вызывает ошибок. Но так как хочется он вообще не работает

Код:
#include  <windows.h>
//расположение файла
AnsiString SOpenFail = "";
//хангл окна
HWND find;
//хангл кнопки
HWND H;
------------------------------
часть кода 1
      // Диалог открытия файла
   if (OpenDialog1 -> Execute())
    {
        Edit1 ->Text = OpenDialog1 ->FileName;
        SOpenFail = OpenDialog1  ->FileName;
    }
     //запуск приложения
      ShellExecute (NULL, "open", SOpenFail.c_str(),
			   NULL, NULL, SW_SHOW);
      //находим хангл нужного окна
      find = FindWindow (NULL, Edit1 ->Text.c_str());
---------------------------------------------------
часть кода 2 не работает...
//Находим хангл кнопки
    H = FindWindowEx(find,NULL,NULL,
            Edit2->Text.c_str());
    //нажимаем кнопку
    SendMessage(H,WM_LBUTTONDOWN,0,0);
    //отпускаем кнопку
    SendMessage(H,WM_LBUTTONUP,0,0);
//закрываем приложение
   CloseHandle (find);
всему свое время как зиме и весне
и каждому солнцу свой неба кусок

Последний раз редактировалось Stilet; 04.08.2011 в 09:16.
Assemblerru вне форума Ответить с цитированием
Старый 04.08.2011, 09:06   #2
sergey_dmitrievich
Пользователь
 
Регистрация: 13.07.2011
Сообщений: 40
По умолчанию

Сообщение нажатия на кнопку должно быть таким:
Код:
SendMessage(H,BM_CLICK,0,0);
sergey_dmitrievich вне форума Ответить с цитированием
Старый 06.08.2011, 18:55   #3
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

Благодарю за подсказку. Но к сожалению я так уже пробовал и не работало...

H = FindWindow(NULL,Edit2->Text.c_str());
SendMessage(H,BM_CLICK,0,0);

Подскажите еще как завершить запущенное приложение функцией
ShellExecute (NULL, "open", SOpenFail.c_str(), NULL, NULL, SW_SHOW);
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 06.08.2011, 21:16   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Подскажите еще как завершить запущенное приложение функцией
А почему именно ей? Может лучше через CreateProcess?
Код:
if (!CreateProcess(nil,pchar('c:\моя прога.exe'), nil, nil, true,
    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, pchar(p), si, pi)
Где pi: TPROCESSINFORMATION;
А завершать теперь:
Код:
TerminateProcess(pi.hProcess,0);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.08.2011, 00:04   #5
Programmer.
 
Регистрация: 19.02.2011
Сообщений: 5
По умолчанию

Так ваше приложение не закроется!
для етого надо исползовать параиметр WM_DESTROY, в от так будет примерно:
Код:
SendMessage(H,WM_DESTROY*/или WM_CLOSE*/,0,0);
Programmer. вне форума Ответить с цитированием
Старый 07.08.2011, 01:34   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Так ваше приложение не закроется!
так это как показал Stilet?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.08.2011, 02:53   #7
Programmer.
 
Регистрация: 19.02.2011
Сообщений: 5
По умолчанию

Пепел Феникса
нет я Assemblerru у сказал по поводу первого поста!
Programmer. вне форума Ответить с цитированием
Старый 07.08.2011, 11:40   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
для етого надо исползовать параиметр WM_DESTROY
Тоже не выход Вернее не особо надежный. Тады уж лучшовее
Код:
SendMessage(H,WM_SYSCOMMAND,SC_CLOSE,0);
Ито даже это не всегда спасает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.08.2011, 19:07   #9
Programmer.
 
Регистрация: 19.02.2011
Сообщений: 5
По умолчанию

Stilet
А CloseWindow(); не прокатит?
Programmer. вне форума Ответить с цитированием
Старый 07.08.2011, 19:12   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
The CloseWindow function minimizes (but does not destroy) the specified window.
Хотя могли бы микрососовцы назвать эту функу адекватно
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Win API ( CИ) ПроГрам Помощь студентам 0 29.04.2010 21:43
Win Forms Api Cdevelop Windows Forms 1 22.03.2009 01:01
Win Api alexov Общие вопросы C/C++ 4 29.01.2009 13:33
Win API aleks_n Общие вопросы Delphi 0 15.09.2008 11:07