2012-01-19 20 views
1

実行時にFirefoxを起動し、プロセスとウィンドウのハンドルを取得し、Firefoxの画面キャプチャを行い、ディスク(temp.bmp)に保存して呼び出しますProcessGetWindow。私は基本的にMODIのMiSelectRectsを使用して、私が探している単語の周りの矩形をキャプチャしてから、マウスのクリックでAutoITを使用します。MODI MiSelectRectsの座標が正しくない

問題は、私の座標が上から約10ピクセルずれていることです。

何が間違っている可能性がありますか?処理を行う関数は次のとおりです。私はAutoIT処理をコメントアウトしています。実際の座標を表示するためにMessageBoxを使ってデバッグしています。私はAutoITのWindow Infoツールを使って確認しています。それは間違いありません...私は何か間違っているのですか、またはMODIに悩まされていることはありますか?

public void ProcessGetWindow(Bitmap image) 
     {   
      Document modiDoc = null; 
      MiDocSearch modiSearch = null; 
      IMiSelectableItem modiTextSel = null; 
      MiSelectRects modiSelectRects = null; 
      MiSelectRect modiSelectRect = null; 
      MiRects modiRects = null; 
      int intSelInfoPN; 
      string intSelInfoTop; 
      int intSelInfoBottom; 
      string intSelInfoLeft; 
      int intSelInfoRight;    

      // Load an existing image file. 
      modiDoc = new Document(); 
      modiDoc.Create(@"C:\\temp.bmp"); 

      // Perform OCR. 
      modiDoc.Images[0].OCR(); 

      // Search for the selected word. 
      modiSearch = new MiDocSearch(); 
      modiSearch.Initialize(modiDoc, "Click Me", 0, 0, false, false); 
      modiSearch.Search(null, ref modiTextSel);  

      try 
      {   
       modiSelectRects = modiTextSel.GetSelectRects(); 
      } 
      catch (COMException) 
      { 
       MessageBox.Show("Me thinks that the OCR didn't work right!"); 
      } 

      foreach (MiSelectRect mr in modiSelectRects) 
      { 
       //intSelInfoPN = mr.PageNumber.ToString(); 
       intSelInfoTop = mr.Top.ToString(); 
       //intSelInfoBottom = mr.Bottom; 
       intSelInfoLeft = mr.Left.ToString(); 
       //intSelInfoRight = mr.Right; 

       /*AutoItX3 auto = new AutoItX3(); 
       auto.AutoItSetOption("MouseCoordMode", 2); 
       auto.MouseClick("", intSelInfoLeft, intSelInfoTop, 1, 80);*/ 

       MessageBox.Show("Coordinates: " + intSelInfoLeft + ", " + intSelInfoTop, "Coordinates", MessageBoxButtons.OK);    
      } 

      //string textResult = modiTextSel.Text; 

      //MessageBox.Show(textResult, "Search Results", MessageBoxButtons.OK); 

      // Close this dialog. 
      Application.Exit(); 
     } 
+0

Microsoftでは、MODIの使用を推奨していません。ユーザーがOffice 2010にアップグレードすると、問題が発生します。 – TrueWill

答えて

0

私が提示ツールに慣れていないんだけど、私はGetSelectRects関数は境界の矩形を返します読んだものから、それはこの場合には、あなたが検索単語全体の選択を含む最小の長方形です。私は、中間ではなく、境界の矩形の角をクリックしているということが起こると信じています。

は、長方形の中心のための座標を計算して、それをクリックしてみてください:

int height = mr.Bottom - mr.Top; 
int width = mr.Right - mr.Left; 

AutoItX3 auto = new AutoItX3(); 
auto.AutoItSetOption("MouseCoordMode", 2); 
auto.MouseClick("", width/2, height/2, 1, 80); 
1

私は場所を見つけるために、同じプログラムを使用しています。

int centerwidth = (intSelInfoRight - intSelInfoLeft)/2; 
       centerwidth = intSelInfoLeft + centerwidth; 
       int centerheight = (intSelInfoBottom - intSelInfoTop)/2; 
       centerheight = centerheight + intSelInfoTop; 

uは、それを使用してテキストの正確な中間点を見つけることができます。

しかし、このプログラムは常に単語の最初の出現箇所を示し、次の出現箇所は表示しません。どのようにしてテキストの場所を見つけるか教えてください。

0
MODI.Document modiDoc = null; 
    MODI.MiDocSearch modiSearch = null; 
    MODI.IMiSelectableItem modiTextSel = null; 
    MODI.MiSelectRects modiSelectRects = null; 
    MODI.MiSelectRect modiSelectRect = null; 
    MODI.MiRects modiRects = null; 
    int intSelInfoPN; 
    int intSelInfoTop; 
    int intSelInfoBottom; 
    int intSelInfoLeft; 
    int intSelInfoRight; 

    // Load an existing image file. 
    modiDoc = new MODI.Document(); 
    modiDoc.Create(@"C:\Users\h117953\Desktop\OCR\1.jpg"); 

    // Perform OCR. 
    //modiDoc.Images[0].OCR(); 
    //MODI.Image image = (MODI.Image)modiDoc.Images[0]; 
    modiDoc.OCR(MiLANGUAGES.miLANG_ENGLISH); 
    MODI.Image modiImage = (modiDoc.Images[0] as MODI.Image); 


    //string ocrtext = @"C:\Users\h117953\Desktop\OCR\Sample.txt"; 

    //File.WriteAllText(ocrtext, modiImage.Layout.Text); 

    // Search for the selected word. 
    //int wordindex 
    modiSearch = new MODI.MiDocSearch(); 
    //date to search 
    modiSearch.Initialize(modiDoc, "Deer", 0, 2, false, false); 
    modiSearch.Search(null, ref modiTextSel); 
    if (modiTextSel == null) 
    { 
     Response.Write("\nText not found \n"); 


    } 
    else 
    { 
     Response.Write("\nText is found \n"); 
     try 
     { 
      modiSelectRects = modiTextSel.GetSelectRects(); 
     } 
     catch (Exception) 
     { 
      Response.Write("Me thinks that the OCR didn't work right!"); 
     } 

     int centerwidth = 0; 
     int centerheight = 0; 

     foreach (MODI.MiSelectRect mr in modiSelectRects) 
     { 
      //intSelInfoPN = mr.PageNumber.ToString(); 
      intSelInfoTop = mr.Top; 
      intSelInfoBottom = mr.Bottom; 
      intSelInfoLeft = mr.Left; 
      intSelInfoRight = mr.Right; 


      // MessageBox.Show("Coordinates: " + intSelInfoLeft + ", " + intSelInfoTop, "Coordinates", MessageBoxButtons.OK); 
      // MessageBox.Show("Coordinates: " + intSelInfoRight + ", " + intSelInfoBottom, "Coordinates", MessageBoxButtons.OK); 
      centerwidth = (intSelInfoRight - intSelInfoLeft)/2; 
      centerwidth = intSelInfoLeft + centerwidth; 
      centerwidth = (intSelInfoBottom - intSelInfoTop)/2; 
      centerheight = centerheight + intSelInfoTop; 

      //MessageBox.Show("Coordinates: " + centerwidth + ", " + centerheight, "Coordinates", MessageBoxButtons.OK); 
      Response.Write("the Widht and Height co-ordinates are (Width,Height)= ({0},{1})" + centerwidth + ","+ centerheight); 



     } 
関連する問題