001package org.vishia.windows;
002
003import java.io.BufferedReader;
004import java.io.File;
005import java.io.IOException;
006import java.io.InputStreamReader;
007import java.util.Map;
008import java.util.TreeMap;
009
010import org.vishia.mainCmd.MainCmd_ifc;
011import org.vishia.mainCmd.Report;
012
013public class WindowMng
014{
015        
016        static{
017    //NOTE: it isn't used currently, the dll doesn't exists.
018                File fileDll = new File("exe/windowMng.dll");
019    if(fileDll.exists()){
020                  //System.load(fileDll.getAbsolutePath());
021    }
022                
023        }
024
025  final MainCmd_ifc cmdIfc;     
026
027  public final static native void listAllWindows(); 
028  
029        public static class WindowPropertied
030        {
031                String title;
032                int pid;
033                int window_id;
034        }
035
036        
037        
038        public WindowMng(MainCmd_ifc cmdIfc)
039        {
040                this.cmdIfc = cmdIfc;
041        }
042
043
044
045        /**Searches the windows-handler (hWnd) for the given title of window.
046         * It works with a executable written in C, which produces a list of all windows
047         * with its hWind.
048         * @param sTitle The title, or the start of title.
049         * @return 0 if not found, elsewhere the hWnd.
050         */
051        public static int getWindowsHandler(String sTitle)
052        {
053                //listAllWindows();
054                //Map<String, WindowPropertied> list = new TreeMap<String, WindowPropertied>();
055                int hWnd = 0;
056                
057                ProcessBuilder processBuilder = new ProcessBuilder("exe/getListWindow.exe");
058                //ClassLoader loader = getClass().getClassLoader();
059                //getClass().getPackage().
060                
061                StringBuffer uOut = new StringBuffer();
062                try
063    { Process process = processBuilder.start();
064                        BufferedReader output = new BufferedReader(new InputStreamReader(process.getInputStream()));
065            String sOut;
066            while( (sOut = output.readLine()) != null)
067      { String[] s1 = sOut.split(";");
068              if(s1.length >=4){
069                String sTitleWin = s1[3].trim().substring(1);  //without " 
070                      if(sTitleWin.startsWith(sTitle)
071                                          ){ //||       s1[3].contains("Editor")  )
072                        hWnd = Integer.parseInt(s1[0].trim());
073                      }
074                        if(uOut!=null) uOut.append(sOut + "\n");
075                        
076              }
077      }
078    }
079    catch(Exception exception){ System.out.println(exception.toString()); }
080    //System.out.println("***** ende **********");
081
082                //cmdIfc.executeCmdLine(processBuilder, "getListWindow", null, 0, out, null);
083                //while(processBuilder.)
084                //return list;
085    return hWnd;
086        }
087        
088}