Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как запустить мой EXE, чтобы не терялся фокус предыдущего приложения? / 1 сообщений из 1, страница 1 из 1
09.12.2010, 14:47
    #37004585
Victoriacom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить мой EXE, чтобы не терялся фокус предыдущего приложения?
Здравствуйте!
Возникла потребность в программе, которая бы запускалась, не отнимая фокуса от предыдущего окна (приложения).
Например, работает Word, запускается мой модуль (он показывается на экране), но фокус должен остаться в Worde.
У меня что-то получилось, но работает почему-то только на моём компе.

С помощью следующего кода я определяю окно, которое было активным до меня:
DECLARE INTEGER GetForegroundWindow IN user32.DLL AS WinAPI_GetForegroundWindow
DECLARE INTEGER GetWindow IN user32 AS WinAPI_GetNextWindow INTEGER HWND,INTEGER wFlag
DECLARE INTEGER GetWindowPlacement IN user32 AS WinAPI_GetWindowPlacement INTEGER HWND, STRING @lpwndpl
DECLARE INTEGER IsWindowVisible IN user32 AS WinAPI_IsVisible INTEGER HWND

cString=''
nCur=WinAPI_GetForegroundWindow()
DO WHILE EMPTY(cString)
pnHwndTopWindow=WinAPI_GetNextWindow(nCur,GW_HWNDNEXT)
cString=SPACE(1024)
WinAPI_GetWindowText(pnHwndTopWindow,@cString,1024)
nCur=pnHwndTopWindow
cString=ALLT(STRTRAN(cString,CHR(0),CHR(32)))
ENDDO

Затем определяю свойства этого окна:
=WinAPI_GetWindowPlacement(pnHwndTopWindow, @lcBuffer)
nWindowState=buf2dword(SUBSTR(lcBuffer,9,4))

nVisible=WinAPI_IsVisible(pnHwndTopWindow)

Затем запускается окно со свойством AlwaysOnTop=.T.
И в методе Activate вызывается ф-ция, где должен установиться фокус на предыдущем окне:
#DEFINE SW_HIDE 0
#DEFINE SW_SHOWNORMAL 1
#DEFINE SW_NORMAL 1
#DEFINE SW_SHOWMINIMIZED 2
#DEFINE SW_SHOWMAXIMIZED 3
#DEFINE SW_MAXIMIZE 3
#DEFINE SW_SHOWNOACTIVATE 4
#DEFINE SW_SHOW 5
#DEFINE SW_MINIMIZE 6
#DEFINE SW_SHOWMINNOACTIVE 7
#DEFINE SW_SHOWNA 8
#DEFINE SW_RESTORE 9
#DEFINE SW_SHOWDEFAULT 10
#DEFINE SW_FORCEMINIMIZE 11
#DEFINE SW_MAX 11

IF nVisible=0 OR INLIST(nWindowState,SW_HIDE,SW_SHOWMINIMIZED,;
SW_SHOWNOACTIVATE,SW_MINIMIZE,SW_SHOWMINNOACTIVE,SW_SHOWNA)
RETURN
ENDIF

WinAPI_ShowWindow(pnHwndTopWindow,nWindowState)
WinAPI_SetForegroundWindow(pnHwndTopWindow)

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


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