#Define GW_HWNDLAST 1
#Define GW_HWNDNEXT 2
#Define GW_CHILD 5
Do Declare
Local lnProcessHwnd, lnPID
lnPID = 8120 && for my test, this was _vfp.processid of a second VFP IDE.
lnProcessHwnd = FindProcessWindow(lnPID)
SetForegroundWindow(lnProcessHwnd)
Function FindProcessWindow()
Lparameters tnTargetPID
Local lnHDesktop, lnHFirstChild, lnHLastChild, lnVisible, lnPID, lnReturnHwnd, lpdwProcessId
lnHDesktop = GetDesktopWindow()
lnHFirstChild = GetWindow(lnHDesktop, GW_CHILD)
lnHLastChild = GetWindow(lnHFirstChild, GW_HWNDLAST)
lnHCurrent = lnHFirstChild
lpdwProcessId = 0
Do While .T.
lnVisible = IsWindowVisible(lnHCurrent)
If lnVisible=1
GetWindowThreadProcessId(lnHCurrent, @lpdwProcessId)
If lpdwProcessId = tnTargetPID
lnReturnHwnd = lnHCurrent
Exit
Endif
Endif
If lnHCurrent = lnHLastChild
lnReturnHwnd = -1
Exit
Endif
lnHCurrent = GetWindow(lnHCurrent, GW_HWNDNEXT)
Enddo
Return lnReturnHwnd
Procedure Declare
Declare Integer GetDesktopWindow In user32
Declare Integer GetWindow In user32 Integer HWnd, Integer wFlag
Declare Integer IsWindowVisible In user32 Integer HWnd
Declare Integer GetWindowThreadProcessId In user32.Dll Integer HWnd, Integer @lpdwProcessId
Declare Integer SetForegroundWindow In user32.Dll Integer HWnd