powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Winapi
14 сообщений из 14, страница 1 из 1
Winapi
    #32101140
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем

С помощью какой Winapi функции можно из одного приложени закрыть окно другого приложения, зная caption окна ?
Например из какого-нибудь "моего" exe файла закрыть окно Word-а ?

Спасибо
...
Рейтинг: 0 / 0
Winapi
    #32101154
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
см. FindWindow и FindWindowEx
по-моему в форуме по Делфи был код
...
Рейтинг: 0 / 0
Winapi
    #32101160
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да Handler-то я получаю. У меня DestroyWindow не хочет почему-то с этим Handler срабатывать. Т.е. она срабатывает, но окно как висело так и висит.
...
Рейтинг: 0 / 0
Winapi
    #32101170
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а на чём пишешь?
...
Рейтинг: 0 / 0
Winapi
    #32101182
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том, что

A thread cannot use DestroyWindow to destroy a window created by a different thread.

Пришлось использовать EndTask

Спасибо за желание помочь
...
Рейтинг: 0 / 0
Winapi
    #32101186
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
понятно. с нитями вечно какие-то траблы.
u r welcome :)
...
Рейтинг: 0 / 0
Winapi
    #32101281
duha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
привет.

может просто послать программе сообщение wm_close ?
только при помощи sendMessage, PostMessage
в общем напирать на команды "предлагаю закрыться"
(способ на посылке сообщений позволяет осуществлять межпроцессовой общение, например, управлять Winamp'ом)

а использование террористических мер типа TerminateProcess и вообще работа с хендлами будет вместо закрытия просто разрушать приложение, т.к. оно должно прибрать за собой, освободить ресурсы, сохраниться итд.
(по смыслу это как SQL Server отключать кнопкой Reset)

всего хорошего
...
Рейтинг: 0 / 0
Winapi
    #32101289
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы немного поправил предыдущий ответ
Посылать сообщение следует окну, которое хочется закрыть
...
Рейтинг: 0 / 0
Winapi
    #32101353
duha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Точно. и привет землякам :)

Glory, а что за задача? может можно сделать лучше?
...
Рейтинг: 0 / 0
Winapi
    #32101377
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если интересно.
Есть dll-ка, в которую зашита определенная логика. dll-ка получает на вход 2 пареметра - имена входного и выходного файлов - и после отработки открывает окно Ворда с результами работы и возвращает управление в мое приложение. Это удобно когда обрабатываемый файл один.

При пакетной обработке, соответственно, имеем на экране 10, 20, ... окон Ворда. Что конечно несколько неудобно. Сама dll-ка не имеет входных параметров для управления окном с результатами работы. Остается только самостоятельно уничтожать это окно. DestroyWindow не подходит, т.к. окно Ворда я так понял создано в другом thread.

Пока есть только EndTask, что тоже не есть хорошо, т.к. есть вероятность испортить файл, открытый в данный момент в Ворде.

Все это происходит в VFP 7
...
Рейтинг: 0 / 0
Winapi
    #32101501
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, SendMessage - совсем неплохо. Но можно через OLE поключиться к открытому ворду и закрыть его, только делать это надо отдельно для каждого окна. Ну и задержки там, проверки, обработки ошибок и т.д. И, насколько я помню, для word95 не работает.
Код: plaintext
1.
2.
.. && вызов функции из dll
oWord=GETOBJECT(,'word.application') && либо подключится, либо запустит новую копию word
oWord.Quit
...
Рейтинг: 0 / 0
Winapi
    #32101969
duha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, если только с вордом или скажем с Excel (про другие без понятия),
очень удобно использовать OLE.

Хелпы идут вместе с офисом. там язык бейсик, но главное тут названия методов и свойств. Это конечно дельфя. Методика выхода:
Код: plaintext
1.
2.
3.
4.
5.
6.
var save:OleVariant;
begin
   save:=false;
   WordDoc.Close(save);
   WordDoc.Disconnect;
   wordApp.Quit;
end;


при работе без компонентов серверов, напрямую с OLEObject'ами способ тот же.имея на руках OLE-интерфейс для какого-либо окна ворда,
его тихое закрытие - это сказать ему: "закройся без сохранения",
а потом уничтожить уже ненужный Object (в разных языках по-разному: NIL записать, release<так кажись в си> вызвать итд).

удачи.
...
Рейтинг: 0 / 0
Winapi
    #32101988
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Экстремальный способ:

узнаем PID процесса и делаем taskkill /PID или tskill PID.

100% закроется, но данные сохранить юзверь не упеет
...
Рейтинг: 0 / 0
Winapi
    #32102043
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем.
Подошел способ, предложенный NNN
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Winapi
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]