0

要件のシナリオを入れましょう...

1. Windowsアプリケーションが実行されており、Form1、Form2 ...のようなフォームがあるとします。2。Outlook-Plugin(カスタムアドイン)から、すでに実行中のWindowsアプリケーションでForm1を開きます。 。

システムから知っているように。システムのアクティブなプロセスを知ることができる対角線。これにより、Windowsアプリケーションを実行するためのプロセスを見つけることができましたが、そのアプリケーションで新しいフォームを開く方法がわかりませんでした。

4

1 に答える 1

0

メイン フォームにボタンを追加Form1して、WinAPI でクリックをシミュレートできます。

[DllImport("user32.dll", EntryPoint="FindWindowExW",  SetLastError=true,
    CharSet=CharSet.Unicode)]

public static extern IntPtr FindWindowEx( IntPtr Ph,IntPtr Ch,
    IntPtr Ph1,
    String lpWindowName);

System.IntPtr hwnd = FindWindowEx(IntPtr.Zero,IntPtr.Zero,IntPtr.Zero,"Form1");
    System.IntPtr ptrChild = GetWindow(this.Handle, GW_CHILD) ;
    while(!ptrChild.Equals(IntPtr.Zero))
    {
        if(ptrChild == FindWindowEx(hwnd,IntPtr.Zero,IntPtr.Zero,"button2"))
        {
            SendMessage(ptrChild, WM_LBUTTONDOWN, 0, IntPtr.Zero); 
            SendMessage(ptrChild, WM_LBUTTONUP, 0, IntPtr.Zero); 
            SendMessage(ptrChild, BM_SETSTATE,1 , IntPtr.Zero);
            break;
        }
        else
        {
            ptrChild = GetWindow(ptrChild, GW_HWNDNEXT) ;
        }
    }

メソッドに関する情報FindWindowEx: http://msdn.microsoft.com/en-us/library/windows/desktop/ms633500(v=vs.85).aspx

于 2013-01-23T08:05:31.623 に答える