2010-11-25 13 views
0

私はその人気のある質問を知っています。とにかく 私は他のプロセスのフォーム上のボタンをクリックしたい、私はスパイ++を介してボタンのハンドルを取得することはできませんので、マウスのクリックをシミュレートします。 私は何を得る:.net winapi postmessage

これはポイントのグローバル座標である、私はをクリックします:その後

doubleclickcoords = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT)); 

を、私は、フォームの座標を取得し、それは「mspaint」こと、及びポイントのローカル座標を見つけてみましょう、とポストメッセージを介して "クリック"を送信しようとしましたが、何も起こりません。私は??行方不明です:

public static void SendDoubleMouseClick() 
     { 
      IntPtr iHandle = GetWnd("mspaint"); 
      Rectangle myRect = new Rectangle(); 
      RECT rct; 
      if (!GetWindowRect(iHandle, out rct)) 
      { 
       MessageBox.Show("ERROR"); 
      } 
      else 
      { 
       myRect.X = rct.Left; 
       myRect.Y = rct.Top; 
       myRect.Width = rct.Right - rct.Left; 
       myRect.Height = rct.Bottom - rct.Top; 
      } 
      PostMessage(iHandle, 0x0201, 0, new IntPtr((doubleclickcoords.pt.y - myRect.Y) * 0x10000 + (doubleclickcoords.pt.x - myRect.X))); 
      PostMessage(iHandle, 0x0202, 0, new IntPtr((doubleclickcoords.pt.y - myRect.Y) * 0x10000 + (doubleclickcoords.pt.x - myRect.X))); 

     } 

EDIT:言語は、C#、WINAPIはあなたが別のアプリケーションを自動化したい場合は、私はあなたがオートメーションAPIのウィッヒに見てみる示唆P /呼び出し

答えて

1

経由で意味していますこの特定の目的のために、ポストメッセージでWindowsをハックしようとするのではなく、たいていの場合、PostMessageはセキュリティ上の理由から異なるプロセスで動作しません。これは、Windows Vista、7およびUAC(ユーザーアカウント設定)でより真実です。

これは良い記事ですhttp://msdn.microsoft.com/en-us/magazine/cc163465.aspxです。

0

小さなアプリケーション用であり、より大きなアプリケーションの一部ではない場合は、AutoIt(他のプロセスを制御するために特別に設計されたスクリプト言語)の使用を検討することができます。スタンドアロンの実行可能ファイルを生成することもできます。

+0

私はそれを試みます。どうも – eba