Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
09.12.2010, 14:47
|
|||
---|---|---|---|
|
|||
Как запустить мой EXE, чтобы не терялся фокус предыдущего приложения? |
|||
#18+
Здравствуйте! Возникла потребность в программе, которая бы запускалась, не отнимая фокуса от предыдущего окна (приложения). Например, работает 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) Вот так. Самое интересное, что на моём компе всё работает как надо, а на других нет! Не подскажете, что я делаю не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=41&tablet=1&tid=1584729]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
others: | 289ms |
total: | 403ms |
0 / 0 |