79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
1

Дожидание закрытия чужого окна

16.04.2013, 23:40. Показов 1497. Ответов 5
Метки нет (Все метки)

Всем доброго времени суток, ситуация следующая: перед выполнением некого действия (копирования файла) мне нужно проверить запущена ли другая программа и если да закрыть ее (дабы она не затерла копируемый файл), и тут 2 проблеммы первая: не могу закрыть окно нормально, а вторая класс главного окна "#32770" (диалоговое окно)
C++
1
2
3
4
5
6
7
HWND g = FindWindow(L"#32770", L"ляляля 1.34");
if(g != 0) 
 if(MessageBox(hwnd, L" Открыто окно , закрыть и продолжить?", L"Вопрос", MB_YESNO) == IDNO) return 0;
 else
   {{if (!CloseWindow(g)) 
    {/// тут извлечение текста ошибки из GetLastError()
    return 0;}}
Итак проблема номер 1: CloseWindow(g) - не закрывает окно, а только сворачивает его, eсли написать DestroyWindow(g) возвращает ощибку "Отказано в доступе."
если заменить if (!CloseWindow(g)) на PostMessage(g, WM_CLOSE, 0, 0); g = FindWindow(L"#32770", L"ляляля 1.34"); if (g != 0) окно закрывается но уже после того как я снова его нахожу g = FindWindow(L"#32770", L"ляляля 1.34"); можно конечно вставить sleep() но это "тупо" на разных машинах будет закрываться с разным интервалом

подскажите как правильно закрыть окно и дождаться когда оно закроется?

а теперь проблема 2: если пишу HWND g = FindWindow(L"#32770", NULL); g всегда возвращает что то, даже если окно закрыто, а если оставить как есть то при изменении заголовка окна его не найдет
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2013, 23:40
Ответы с готовыми решениями:

Сменить цвет чужого окна
Всем привет. Собственно надо сменить цвет чужого окна.

Хук на скролл чужого окна
Доброй ночи. Необходимо отследить события от скролла в чужом окне. Есть dll в которой...

Доступ к контролам чужого окна
Как можно получить доступ к контролам чужого окна, зная его HWND? Конкретно мне нужно тестовое...

Захват дескриптора (handle) чужого окна
Можно ли из моей программы управлять окном которое создано другим приложением (закрывать,...

5
Исследователь
316 / 315 / 24
Регистрация: 06.04.2011
Сообщений: 870
17.04.2013, 12:08 2
А так:
C++ (Qt)
1
2
3
4
5
6
7
HWND g = FindWindow(L"#32770", L"ляляля 1.34");
if(g != 0) 
   if(MessageBox(hwnd, L" Открыто окно , закрыть и продолжить?", L"Вопрос", MB_YESNO) == IDNO) return 0;
   else
   {{if (!EndDialog(g, 0)) 
      {/// тут извлечение текста ошибки из GetLastError()
   return 0;}}
0
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
17.04.2013, 20:45  [ТС] 3
а так выскакивает исключение "Необработанное исключение в "0x77d315de (ntdll.dll)" в "StarFriends Menager.exe": 0xC0000005: Нарушение прав доступа при записи "0x01397b40"."
0
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
18.04.2013, 00:19 4
попробуй WaitForSingleObject( HANDLE hProcess, INFINITE); получить HANDLE hProcess = OpenProcess() пример - http://msdn.microsoft.com/en-u... 85%29.aspx
0
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
18.04.2013, 01:28  [ТС] 5
ssXXss, или я чего то не допонял или OpenProcess() устанавливает доступ к процессу, а как из HWND добраться до процесса этого не заметил... но даже это я нашел
GetWindowThreadProcessId -- получаешь id
OpenProcess -- получаешь HANDLE по id
а вот дельше CloseHandle(); не работает
C++
1
2
3
4
5
6
7
8
9
10
11
HWND g = FindWindow(L"#32770", L"StarFriend 1.31");
            if(g != 0) 
                if(MessageBox(hwnd,MyStr(GetText(g) + L" открыт, закрыть и продолжить?").Data(),L"Вопрос", MB_YESNO|MB_ICONQUESTION) == IDNO) 
                    return 0;
                else {DWORD ID;
                    GetWindowThreadProcessId(g,&ID);
                    HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, ID);
                    if(!hProcess == NULL ){
                        ID = GetPriorityClass( hProcess );
                        if( ID )
                            CloseHandle( hProcess );}}
0
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
18.04.2013, 01:45 6
OpenProcess -- получаешь HANDLE ,этот хэндл пихаешь в WaitForSingleObject и ждешь когда придет событие завершения процесса , я так понял тебе именно это надо?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2013, 01:45

Нарисовать рамку вокруг чужого окна
Во всяких программах для захвата экрана (или в Spy++ ещё) вокруг выбранного окна рисуется рамка,...

Как мне перехватить перерисовку чужого окна
Вариант погугли не подходит ибо там ничего нету. Мне надо узнать только что окно перерисовалось !

Блокировка закрытия окна
Надо дополнить прогу, перерыл весь интернет ничего не нашел по поводу а именно как сделать что...

Иконка кнопки закрытия окна
Как достать иконку кнопки закрытия окна?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.