*--yposition_any_window.prg *-- startig with Listing child windows for the Windows desktop-Nesw2News *--adapted to search a specific window done with its title caption . *--browse the result with informations on hwnd,window dimensions,title window,visibility,class (as option) *--suppose 1 single instance of window with mycaption title.(it takes the first window) *--window caption is localized (microsoft windows)...must put the exact localized title to search.change *--titles below (for french locale) *--the setwindoxPos API can position any window given by its handlecan set left,top,width & height *begin code _Screen.WindowState=1 Local mycaption *mycaption="Sans titre - Paint" *run/n mspaint *myCaption="Sans titre - Bloc-notes" *run/n notepad mycaption="Explorateur de fichiers" &&warning loclized (here french---in english: files explorer... must be exact title. Run/N explorer.Exe Inke(3) &&wait to make window appear for positionning it #Define GW_HWNDLAST 1 #Define GW_HWNDNEXT 2 #Define GW_CHILD 5 Do Declare Create Cursor csResult (HWnd N(12), isvisible N(1),; leftpos I, toppos I, rightpos I, botpos I, wincap C(100), classname C(64)) Local hDesktop, hFirstChild, hLastChild, rc, cWinCap, cWinClass,; nVisible, nLeft, nTop, nRight, nBottom hDesktop = GetDesktopWindow() hFirstChild = GetWindow(hDesktop, GW_CHILD) hLastChild = GetWindow(hFirstChild, GW_HWNDLAST) hCurrent = hFirstChild Do While .T. cWinCap = GetWinText(hCurrent) cWinClass= GetClsName(hCurrent) nVisible = IsWindowVisible(hCurrent) rc = Repli(Chr(0),16) = GetWindowRect(hCurrent, @rc) nLeft = buf2dword(Substr(rc, 1,4)) nTop = buf2dword(Substr(rc, 5,4)) nRight = buf2dword(Substr(rc, 9,4)) nBottom = buf2dword(Substr(rc, 13,4)) ***********test searched window here If Allt(Lower(mycaption)) == Allt(Lower(cWinCap)) Insert Into csResult Values (hCurrent, nVisible,; nLeft, nTop, nRight, nBottom, cWinCap, cWinClass) Endi If hCurrent = hLastChild Exit Endif hCurrent = GetWindow(hCurrent, GW_HWNDNEXT) Enddo Locate *BROWSE NORMAL NOWAIT && for isvisible=1 If Reccount()=0 Messagebox("Window ["+mycaption+" ] not found...cancelling",16+4096,"error",1500) Return .F. Endi lnHandle=HWnd If HWnd=0 Messagebox("fails! no window on desktop....cancelling!",16+4096,"error",1500) Return .F. Endi *position window here-this is tests for 6 positions Local xleft,xtop,xwidth,xheight &&as you want m.xwidth=500 m.xheight=200 SetWindowPos(m.lnHandle,0, 0,0,m.xwidth+100,m.xheight-50,64) Inke(1) SetWindowPos(m.lnHandle,0, 100,0,m.xwidth,m.xheight+100,64) Inke(1) SetWindowPos(m.lnHandle,0, 100,300,m.xwidth-50,m.xheight,64) Inke(1) SetWindowPos(m.lnHandle,0,400,50,m.xwidth,m.xheight+40,64) Inke(1) SetWindowPos(m.lnHandle,0, 50,500,m.xwidth+100,m.xheight+100,64) Inke(1) m.xwidth=xwidth+200 m.xheight=m.xheight+200 SetWindowPos(m.lnHandle,0,(Sysmetric(1)-xwidth)/2,(Sysmetric(2)-xheight)/2,m.xwidth,m.xheight,64) &¢ered on screen Retu Function GetClsName(hWindow) Local nBufsize, cBuffer cBuffer = Repli(Chr(0), 250) nBufsize = GetClassName(hWindow, @cBuffer, Len(cBuffer)) Return Substr(cBuffer, 1, nBufsize) Function GetWinText(hWindow) * returns window title bar text -- Win9*/Me/XP/2000 Local cBuffer, nResult cBuffer = Space(250) nResult = GetWindowText(hWindow, @cBuffer, Len(cBuffer)) Return Substr(cBuffer, 1, nResult) endfunc Function buf2dword(lcBuffer) Return Asc(Substr(lcBuffer, 1,1)) + ; BitLShift(Asc(Substr(lcBuffer, 2,1)), 8) +; BitLShift(Asc(Substr(lcBuffer, 3,1)), 16) +; BitLShift(Asc(Substr(lcBuffer, 4,1)), 24) endfunc Procedure Declare Declare Integer GetDesktopWindow In user32 Declare Integer GetWindow In user32 Integer HWnd, Integer wFlag Declare Integer GetWindowRect In user32 Integer HWnd, String @lpRect Declare Integer IsWindowVisible In user32 Integer HWnd Declare Integer GetWindowText In user32; INTEGER HWnd, String @lpString, Integer cch Declare Integer GetClassName In user32; INTEGER HWnd, String lpClassName, Integer nMaxCount Declare Integer SetWindowPos In user32; INTEGER HWnd, Integer hWndInsertAfter,; INTEGER x, Integer Y, Integer cx, Integer cy,; INTEGER wFlags endproc *endcodenote : can use findwindow API but i prefer this code .