Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Закрытие внешнего приложения  [new]
NewBorn
Guest
Имеется программа внешняя которая выполняет опрации по закачиванию файлов с фтп из разных мест, места задаются в командной строке, необходимо последовательно запускать программу причем каждый последущий запуск тока после успешного завершения предыдущей задачи.
с помощью CreateProcess запускаю программу (могу отслеживать время выполнения и т.д. )(тренируюсь на калькуляторе (calc.exe)) но вот закрыть её не могу. я явно что то не понимаю в функциях апи, пробовал соыет тов. Погодина
DECLARE LONG SendMessage IN win32api LONG whWnd,LONG Msg,LONG wParam,LONG lParam
WM_DESTROY=2
SendMessage(hwndapp,WM_DESTROY,0,0)
CLEAR DLLS

не поможет WM_DESTROY, пробуй WM_CLOSE.

не закрывается

пробовал такую
автор
DECLARE LONG FindWindow IN Win32API STRING lpClassName,STRING WindowName
lhWnd = FindWindow(NULL,'Калькулятор')
?"Калькулятор F",lhWnd
DECLARE INTEGER CloseHandle IN kernel32.DLL ;
INTEGER hObject
CLOSEhandle(lhWnd)


не закрывается, что надо сделать что бы закрыть этот блин калькулятор ?

и вообще есть ли где справка по winApi и vfp типа как есть winApi и delphi и с++ ,(просто там функци немного по другому вызываются с описанием возвращаюмых значений?)
21 май 07, 14:42    [4163424]     Ответить | Цитировать Сообщить модератору
 Re: Закрытие внешнего приложения  [new]
Погодин
Member

Откуда:
Сообщений: 117
Вот так работает:

DECLARE LONG FindWindow IN win32api STRING @lpClassName,STRING @lpWindowName
DECLARE LONG SendMessage IN win32api LONG whWnd,LONG Msg,LONG wParam,LONG lParam
lpClassName=.null.
lpWindowName='Калькулятор'
hwind=FindWindow(@lpClassName,@lpWindowName)
IF hwind=0
MESSAGEBOX('Окно не найдено !')
ELSE
WM_CLOSE=16
SendMessage(hwind,WM_CLOSE,0,0)
ENDIF
21 май 07, 15:07    [4163637]     Ответить | Цитировать Сообщить модератору
 Re: Закрытие внешнего приложения  [new]
Станислав С
Guest
NewBorn
Имеется программа внешняя которая выполняет опрации по закачиванию файлов с фтп из разных мест, места задаются в командной строке, необходимо последовательно запускать программу причем каждый последущий запуск тока после успешного завершения предыдущей задачи.
с помощью CreateProcess запускаю программу (могу отслеживать время выполнения и т.д. )(тренируюсь на калькуляторе (calc.exe)) но вот закрыть её не могу. я явно что то не понимаю в функциях апи, пробовал соыет тов. Погодина
DECLARE LONG SendMessage IN win32api LONG whWnd,LONG Msg,LONG wParam,LONG lParam
WM_DESTROY=2
SendMessage(hwndapp,WM_DESTROY,0,0)
CLEAR DLLS

не поможет WM_DESTROY, пробуй WM_CLOSE.

не закрывается

пробовал такую
автор
DECLARE LONG FindWindow IN Win32API STRING lpClassName,STRING WindowName
lhWnd = FindWindow(NULL,'Калькулятор')
?"Калькулятор F",lhWnd
DECLARE INTEGER CloseHandle IN kernel32.DLL ;
INTEGER hObject
CLOSEhandle(lhWnd)


не закрывается, что надо сделать что бы закрыть этот блин калькулятор ?

и вообще есть ли где справка по winApi и vfp типа как есть winApi и delphi и с++ ,(просто там функци немного по другому вызываются с описанием возвращаюмых значений?)


А вот так почему-то работает:
DECLARE LONG FindWindow in Win32Api STRING lpClassName, STRING WindowName
DECLARE LONG SendMessage in Win32Api LONG lhWnd,LONG Msg,LONG wParam,LONG lParam
WM_CLOSE=16
lhWnd=FindWindow(0,'Калькулятор')
? "Searched window number: ",lhWnd
SendMessage(lhWnd,WM_CLOSE,0,0)
Clear Dlls
21 май 07, 15:12    [4163679]     Ответить | Цитировать Сообщить модератору
 Re: Закрытие внешнего приложения  [new]
NewBorn
Guest
Спасибо! большое!!!

значение wm_close = 16 вот что мне надо было!!!
нигде не увидел!!!!

ещё раз спасибо!

(просьба про ссылочку на какой нибкдь онлайн справочник по winApi+VFP по прежнему актуален :))
21 май 07, 15:21    [4163717]     Ответить | Цитировать Сообщить модератору
 Re: Закрытие внешнего приложения  [new]
Станислав С
Guest
NewBorn
Спасибо! большое!!!

значение wm_close = 16 вот что мне надо было!!!
нигде не увидел!!!!

ещё раз спасибо!

(просьба про ссылочку на какой нибкдь онлайн справочник по winApi+VFP по прежнему актуален :))

1. Все значения есть в *.h файлах (заголовочные файлы для С/С++; 0x00 - применяется для обозначения 16-ричного числа)
...
#define WM_DESTROY  0x0002
...
#define WM_CLOSE 0x0010
....
2. http://msdn2.microsoft.com/en-us/default.aspx
21 май 07, 15:29    [4163753]     Ответить | Цитировать Сообщить модератору
 Re: Закрытие внешнего приложения  [new]
po2
Member

Откуда:
Сообщений: 121
www.news2news.com
21 май 07, 15:30    [4163759]     Ответить | Цитировать Сообщить модератору
 Re: Закрытие внешнего приложения  [new]
NewBorn
Guest
Это опять я. есть форма на неё лежит класс в котором создаётся процесс. Скажем у меня запускает calc.exe. Затем надо приложение закрыть. закрывать поолучилось благодаря советам выше, Но это если знаем заголовок сообщения, а если заголовок не известен ?
в результате createProcess получаем четырёх значное число которое не является хендлом окна процесса (а как я понял является хендлом непосредственно процесса что ли, уфф), вообщем вопрос тот же, как закрыть калькулятор если мы не знаем загаловок окна, но однако запускаем приложение через createprocess.... (я сам то в основном занимаюсь больше с базами, там отчетики, формочки, гридики, селектики а тут вот заполз маленько не в мою степь, но интересно очень...)
21 май 07, 17:47    [4164796]     Ответить | Цитировать Сообщить модератору
 Re: Закрытие внешнего приложения  [new]
Dima T
Member

Откуда:
Сообщений: 15279
Вот пример для запуска, ожидания завершения, или убиение процесса.
Только учти, дочерний процесс убивается без всякого оповещения, т.е., если там происходит в этот момент изменение каких-либо данных, то все остановится на полпути.

К сообщению приложен файл (Exec.zip - 5Kb) cкачать
21 май 07, 19:49    [4165395]     Ответить | Цитировать Сообщить модератору
 Re: Закрытие внешнего приложения  [new]
NewBorn
Guest
Супер! Спасибо! то что надо (пока)). именно на основе опубликованного Вами класса 23 января я и начал свои эксперементы однако в той версии не было метода с Terminate process, а правильно оформить его у меня не получалось, теперь всё получилось спасибо !
22 май 07, 12:35    [4167959]     Ответить | Цитировать Сообщить модератору
 Re: Закрытие внешнего приложения  [new]
Dima T
Member

Откуда:
Сообщений: 15279
Я этот класс как раз доделал для запуска всяких роботов в автоматическом режиме.

Обрати внимание что у метода Execute() есть второй параметр - tnWaitToKill время ожидания до убивания дочернего процесса в секундах. Сообщение об ошибке возвращается через метод GetLastError() если Execute() = .f.
примерно так:
if !loEx.Execute('notepad.exe', 10)
? loEx.GetLastError() && я в лог пишу
endif
* Когда дойдет до сюда блокнот уже закрыт
22 май 07, 21:09    [4171219]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить