Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вызов приложения VFP9.0 из FPD26 (DOS) / 1 сообщений из 1, страница 1 из 1
10.10.2007, 09:50
    #34859028
UNP
UNP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов приложения VFP9.0 из FPD26 (DOS)
Здравствуйте, коллеги!
Если кто-либо сталкивался с такой проблемой, пожалуйста, подскажите как её решить.
Есть приложение, написанное на FPD26 (DOS). Из него (в цикле) вызывается приложение на VFP9. При старте виндового приложения, окно с DOS приложением должно сворачиваться, а при завершении виндового приложения - окно с DOS приложением должно восстановить свой первоначальный размер.
Если DOS-приложение запущено в оконном режиме, окна сворачиваются и разворачиваются нормально.
Если DOS-приложение запущено в полно экранном режиме (размер DOS-окна во весь экран), то ПЕРВЫЙ РАЗ свернуть DOS-окно можно только с помощью клавиши <WIN> (на клавиатуре справа от <Ctrl>). Почему-то API-функции (см. пример) не видят его. При последующих вызовах DOS-окно сворачивается и разворачивается нормально. В чём у меня ошибка ?

Вызов Windows-приложения из FPD26:
. . .
!D:\TK\TK.exe
. . .
Окна сворачиваю и разворачиваю следующим образом:

. . .
****** Сначала сворачиваем все окна с DOS режимом. После завершения программы
****** восстанавливаем их первоначальный размер

DECLARE Integer GetTopWindow IN Win32API Integer nHwndTop
DECLARE Integer GetWindow IN Win32API Integer nHwndOrig, Integer nRelFlag
DECLARE Integer GetWindowText IN Win32API Integer nHwnd, String cTextBuff, Integer nMaxCountBuff
DECLARE INTEGER CloseWindow IN Win32API INTEGER hWnd
DECLARE INTEGER OpenIcon IN Win32API INTEGER hWnd

LOCAL lcTextBuffer, lnHwndChild
lcTextBuffer = SPACE (100) &&Пустая строка

lnHwndChild = GetTopWindow (0) &&Получить указатель активного окна
lnHwndChild = GetWindow (lnHwndChild, 0) &&Получить указатель активного окна

*** Свернуть все окна с DOS режимом

DO WHILE lnHwndChild # 0 && Просмотреть все окна
lcTextBuffer = SPACE (100) &&Пустая строка
GetWindowText (lnHwndChild, @lcTextBuffer, 100) &&Получить строку заголовка окна
lcTextBuffer = ALLTRIM (lcTextBuffer)
IF "cmd.exe" $ lcTextBuffer && В заголовке окна вызова режима DOS есть такая подстрока
CloseWindow (lnHwndChild) && Свернуть окно с DOS
ENDIF
lnHwndChild = GetWindow (lnHwndChild, 2) && Получить дескриптер следующего окна
ENDDO

DO FORM TK && Вызов приложения на VFP 9.0
READ EVENTS
CLOSE DATABASES ALL

*** Восстановить размеры всех окон с DOS режимом

lnHwndChild = GetTopWindow (0) &&Получить указатель активного окна
lnHwndChild = GetWindow (lnHwndChild, 0)

DO WHILE lnHwndChild # 0 && Просмотреть все окна
lcTextBuffer = SPACE (100) &&Пустая строка
GetWindowText (lnHwndChild, @lcTextBuffer, 100) &&Получить Title окна
lcTextBuffer = ALLTRIM (lcTextBuffer)
IF "cmd.exe" $ lcTextBuffer && В заголовке окна вызова режима DOS есть такая подстрока
OpenIcon (lnHwndChild) && Восстановить первоначальные размеры окна с DOS
ENDIF
lnHwndChild = GetWindow (lnHwndChild, 2) && Получить дескриптер следующего окна
ENDDO

CLEAR DLLS && Закрываем функции API

. . .
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вызов приложения VFP9.0 из FPD26 (DOS) / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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