Запущено-ли приложение ?
Функция is_run32 была написана в свете проблем определения активности приложения. Конечно существует API функция FindWindow, которая как раз для этого и служит, но у нее есть большие недоработки.
Вообще,FindWind служит для определения активности окна, а не приложения, но это понятия достаточно близкие, поэтому она используется и для определения активности окна, и для определения активности приложения.
Но FindWindows требует указания полного заголовка окна или имени класса. А множество приложений имеют динамический заголовок (например отражающий имя открытого файла). И ко всему прочему, эта функция чувствительна к регистру. Имя класса также определеяется нелегко: функция API GetClassName требует указания хэндла (handle) окна, который может меняться.
Is_run32 использует функции API для своей работы. Если приложение запущено, то функция возвращает хэндл окна. Если приложение не запущено, то функция возвращает ноль.
Как использовать:
Is_run32 работает только с 32-битными приложениями Windows. Для ее использования, просто передайте известную часть заголовка окна в функцию:
handle=Is_run32('word')
**** IS_RUN32.prg
LPARAMETER pctitle
DECLARE INTEGER GetActiveWindow IN Win32API
DECLARE INTEGER GetWindow IN Win32API;
INTEGER hwnd, INTEGER dflag
DECLARE INTEGER GetWindowText IN Win32API ;
INTEGER hwnd, STRING @lptstr, INTEGER cbmax
LOCAL lnhwnd, lnnext, lldone, lctitle_bar, lcsearchfor,;
lntext_len
lcsearchfor = UPPER(ALLTRIM(pctitle))
lnhwnd = GetActiveWindow()
lnnext = 2
lldone = .F.
lctitle_bar = ""
DO WHILE NOT lldone
IF NOT EMPTY(lnhwnd)
lctitle_bar = SPACE(200) + CHR(0)
lntext_len = GetWindowText(lnhwnd, @lctitle_bar, 200)
lctitle_bar = UPPER(LEFT(lctitle_bar, lntext_len))
lldone = (lcsearchfor $ lctitle_bar)
IF NOT lldone
lnhwnd = GetWindow(lnhwnd, lnnext)
ENDIF
ELSE
lldone = .T.
ENDIF
ENDDO
RETURN lnhwnd