Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.46.18] |
|
Сообщ.
#1
,
|
|
|
допустим мы открыли "черное" окно, при помощи WinExec. Можно потом программно его закрыть? и как? :
|
Сообщ.
#2
,
|
|
|
Что за "черное окно"? Консоль что ли?
|
Сообщ.
#3
,
|
|
|
конечно...
|
Сообщ.
#4
,
|
|
|
BOOL TerminateProcess(
HANDLE hProcess, // handle to the process UINT uExitCode // exit code for the process ); |
Сообщ.
#5
,
|
|
|
это всё хорошо. а как сделать так:
нажали на кнопку с WinExec(... , SW_SHOW); какой код должен быть у второй кнопки, которая должна закрыть это, только что открытое, окно? |
Сообщ.
#6
,
|
|
|
Ьожет лучше через процессы? Примерно так
var fSI : TStartupInfo; fPI : TProcessInformation; CommandString : string; ............. Вызов: CreateProcess(Nil, PChar(CommandString), Nil, Nil, False, CREATE_NEW_CONSOLE, Nil, Nil, FSi, FPi); Завершение: TerminateProcess(fPI.hProcess, 0); CloseHandle(fPI.hThread); CloseHandle(fPI.hProcess); |
Сообщ.
#7
,
|
|
|
[Удалено модератором]
Новый вопрос - новая тема. |
Сообщ.
#8
,
|
|
|
2peter
C WinExec'ом сложнее. Надо определить хэндл программы. Везде здесь есть условности. Например, если программа видима и активна и запускается с фокусом ввода (обычно) - значит GetForeGroundWindow. Если нет, то всё зависит от конкретных условий. Если делать всё по уму, то здесь также куча условностей. Надо запускать чтобы получить хэндл процесса или потока. Это можно сделать через CreateProcess() или ShellExecuteEx() Далее надо во всех потоках этого процесса найти главное окно и послать ему WM_CLOSE. Так можно закрыть программу. Но самое сложное, найти нужное окно. Точного диагноза что именно это окно главное - нет. |