Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрыть приложение, Не закрывает 
:(
    Опции темы
Папараццы
Дата 23.10.2007, 13:12 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



Мне надо уничтожить процесс со своей программы.. То есть закрыть другую программу.  Не получается закрыть программу с использованием 
TerminateProcess(00000C2C, 0); 
Где 00000С2С это наш процесс айди.
Ошибка: E2121 Function call missing)
Также через SendMessage(00000C2C , WM_DESTROY, 0, 0);
Таже ошибка. Что делать ?? В чем ошибка.. 



--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
dumb
Дата 23.10.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



Цитата(Папараццы @  23.10.2007,  14:12 Найти цитируемый пост)
Что делать ?
ознакомиться с форматом записи чисел, как минимум. 0x00000C2C.
далее - ты что в одну, что в другую функцию суешь pid процесса, в то время как первой нужен хэндл процесса(получаемый из OpenProcess), а второй - хэндл окна(FindWindow/EnumWindows/etc).

за примерами - фпоиск по слову TerminateProcess или WM_CLOSE.
PM MAIL   Вверх
Папараццы
Дата 23.10.2007, 14:51 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



Процесс ID постоянно меняется..  Как найти программу если незнаем не пид не хендл ? 

Это сообщение отредактировал(а) Папараццы - 23.10.2007, 15:09


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
Папараццы
Дата 23.10.2007, 15:14 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



При 
Код

SendMessage(0x00000CC4, WM_DESTROY, 0, 0);


Can not convert 'int' to 'void*'


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
0lmer
Дата 24.10.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 3.12.2006

Репутация: нет
Всего: -1



Цитата(Папараццы @  23.10.2007,  14:51 Найти цитируемый пост)
Как найти программу если незнаем не пид не хендл ?


Синтаксис 
HWND FindWindow
(
LPCTSTR lpClassName,    // указатель на имя класса
LPCTSTR lpWindowName    // указатель на имя окна
);

Параметры 

lpClassName
Указывает на строку с нулевым символом в конце, которая определяет имя класса или - атом, который идентифицирует строку имени класса. Если этот параметр - атом, он должен быть общим атомом, созданным предыдущим вызовом функции GlobalAddAtom. Атом - это 16-разрядное значение, в котором должно быть помещено в младшем слове lpClassName; старшее слово должно быть нулевое.
lpWindowName
Указывает на строку с нулевым символом в конце, которая определяет имя окна (заголовок окна). Если этот параметр - ПУСТО (NULL), полное соответствие имени окна.

Возвращаемые значения
Если функция завершилась успешно, возвращаемое значение - дескриптор окна, которое имеет определенное имя класса и имя окна. Если функция терпит неудачу, возвращаемое значение - ПУСТО (NULL). Чтобы получить дополнительные данные об ошибках, вызовите GetLastError.
PM   Вверх
Папараццы
Дата 24.10.2007, 15:21 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



Код

HWND hwnd;
 hwnd = FindWindow(NULL,"notepad.exe");
 if ( hwnd != NULL)
{
SendMessage(hwnd,WM_DESTROY,0,0);
}

Будет ли это работать ? 


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
0lmer
Дата 27.10.2007, 13:38 (ссылка)   | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 3.12.2006

Репутация: нет
Всего: -1



Код


HWND hwnd;
 hwnd = FindWindow(NULL,"Безымянный - Блокнот");
 if ( hwnd != NULL)
{
SendMessage(hwnd,WM_DESTROY,0,0);

}



скомпилил в билдере, работает. только если заголовок другой (например файл открыт) то не пашет.
PM   Вверх
THandle
Дата 27.10.2007, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 25
Всего: 372



0lmer,  В состав билдера(у меня BDS2006) входит программа ws32.exe с её помощью можно узнать класс окна.

PM   Вверх
Папараццы
Дата 30.10.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



А вот допустим у меня что то введено  и при закрытие в виде  WM_CLOSE он просит сохранить или не сохранить... Как нажать эту кнопку ? Например кнопку НЕТв диологовом окне "Блакнот" ? 


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
pandrew
Дата 30.10.2007, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.3.2006

Репутация: 3
Всего: 3



Цитата(Папараццы @  30.10.2007,  14:39 Найти цитируемый пост)
А вот допустим у меня что то введено  и при закрытие в виде  WM_CLOSE он просит сохранить или не сохранить... Как нажать эту кнопку ? Например кнопку НЕТв диологовом окне "Блакнот" ?  

Уже упоминали прогу - ws32. Запусти ее и сможешь отследить весь поток сообщений, получаемых, к примеру notepad, при принудительном закрытии.
PM MAIL   Вверх
Папараццы
Дата 31.10.2007, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



Ну я получил Child и т.д. У меня вопрос как нажать кнопку.. WM_ACTIVATE или что ? 


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
0lmer
Дата 31.10.2007, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 3.12.2006

Репутация: нет
Всего: -1



Цитата(Папараццы @  30.10.2007,  14:39 Найти цитируемый пост)
 и при закрытие в виде  WM_CLOSE он просит сохранить или не сохранить... Как нажать эту кнопку ?


а если попробовать не WM_CLOSE а WM_DESTROY? 
Я точно не уверен но может не будет спрашивать про сохранение.

PM   Вверх
Папараццы
Дата 31.10.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



Нет просто после нажатие на ОК в моем приложение будет идти запись в базу данных.


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
Папараццы
Дата 24.4.2008, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



Что делать если WM_DESTROY не работает? А WM_CLOSE закрывает приложение но приложение просит потверждение. Как быть? 


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
586
Дата 24.4.2008, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Для MessageBox'a:
Код
SendMessage(hWnd, WM_COMMAND, IDYES /*IDNO*/ /*IDCANCEL*/, 0);


Это сообщение отредактировал(а) 586 - 24.4.2008, 16:41
PM   Вверх
Папараццы
Дата 29.4.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



Я попробовал на блокноте такое провернуть 
Код

HWND hwnd;
hwnd=FindWindow(0,"Безымянный - Блокнот");
SendMessage(hwnd,WM_CLOSE,0,0);
SendMessage(hwnd,WM_COMMAND,IDYES,0);

Но он у меня вместо "ДА" почему то нажимает на принт. Открываетяс страница печяти. 

Это сообщение отредактировал(а) Папараццы - 29.4.2008, 12:40


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
586
Дата 29.4.2008, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Цитата(Папараццы @  29.4.2008,  13:38 Найти цитируемый пост)
SendMessage(hwnd,WM_COMMAND,IDYES,0);

Надо в окно MessageBox'а это сообщение отправлять.
PM   Вверх
Папараццы
Дата 30.4.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



Я его не могу поймать. FindWindowEx - не работает. 


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
586
Дата 30.4.2008, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Код
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    HWND hWnd = FindWindow(NULL, "Безымянный - Блокнот");
    if(!hWnd) {
        ShowMessage("Window not found");
        return;
    }
    PostMessage(hWnd, WM_CLOSE, 0, 0);
    Sleep(300); // wait for show MessageBox....

    HWND hMsgBox = FindWindow(NULL, "Блокнот");
    if(!hMsgBox) {
        ShowMessage("MessageBox not found");
        return;
    }
    PostMessage(hMsgBox, WM_COMMAND, IDYES, 0);
}

PM   Вверх
Папараццы
Дата 2.5.2008, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



Спасибо за код, сейчас попробую. 


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
Папараццы
Дата 2.5.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



Проблема в том что у меня он не перехватывает окно. Т.е. на блокноте он работает. Но на программе к каторой я хочу применить нет.


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
586
Дата 2.5.2008, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



К каждой программе нужен индивидуальный подход.
Если это диалоговое окно, то можно воспользоваться сообщением WM_COMMAND.
Если это форма VCL (прога написана в билдере или delphi), по лучше перечислять дочерние окна в этой форме, и сравнивать имя класса и текст в окне. Найденной кнопке отправлять сообщение BM_CLICK.
PM   Вверх
Папараццы
Дата 2.5.2008, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



Не как не могу найти часть шде написано закрыть приложение. Win32 Sight оже не чего не показывает. 


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
586
Дата 2.5.2008, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Скачай Spy++, там  есть "прицел" для поиска окон.
PM   Вверх
Sept
Дата 4.5.2008, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



Народ, а как узнать пид процесса по имени ехешника?
Вот прошерстил всю хелпу и форум, а ничего другого так и не нашел..

Код

bool GetProcessByExeName(DWORD* Pid,AnsiString ExeName)
{
HANDLE hProcessSnap = NULL;
PROCESSENTRY32 pe32      = {0};
AnsiString temp="";

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
if(hProcessSnap == (void*)-1)
        {
        MessageBox(NULL, "UNKNOWN", "UNKNOWN", MB_OK|MB_ICONWARNING|MB_SYSTEMMODAL);
        return false;
        }
pe32.dwSize=sizeof(PROCESSENTRY32);

if(Process32First(hProcessSnap,&pe32)) temp=pe32.szExeFile;
if((temp.UpperCase()).Pos(ExeName))
       {
       *Pid= pe32.th32ProcessID;
       CloseHandle (hProcessSnap);
       return true;
       }
pe32.dwSize=sizeof(PROCESSENTRY32);

while(Process32Next(hProcessSnap,&pe32))
        {
        temp=pe32.szExeFile;
        if((temp.UpperCase()).Pos(ExeName))
                {
                *Pid= pe32.th32ProcessID;
                CloseHandle(hProcessSnap);
                return true;
                }
        pe32.dwSize=sizeof(PROCESSENTRY32);
        }
        
CloseHandle(hProcessSnap);
*Pid=0;
return false;
}


ругается в 4 строке
PM MAIL   Вверх
Sept
Дата 4.5.2008, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



оппа! уже не надо. поиск рулит, только пользоваться надо уметь ))
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1396 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.