0

基本的に、この小型の Windows フォーム C# (.NET 3.5) アプリケーションは、イベントのリッスン中に問題を抱えています。

フォームに 2 つのボタンを設定して、2 つの主要な機能を直接呼び出します (これらはキーストロークを別のプロセス ウィンドウに送信し、ブール値を切り替えて送信済みかどうかを表示します)。

問題が発生している部分は、2 つのボタンと同じ機能を自動的に起動するために監視している実際のイベントです。イベントハンドラーは、含まれていない場合にのみ成功しません MessageBox.Show("Blah Blah");

例:

public tester()
InitializeComponent();
wsiRemote.clsWsiEventsClass Events = new wsiRemote.clsWsiEventsClass();
Events.AuthorRecordStarted += new __clsWsiEvents_AuthorRecordStartedEventHandler(Events_AuthorRecordStarted);
private static bool _pedcheck = false;
    public static void SendkeyT()
    {
        foreach (Process w in System.Diagnostics.Process.GetProcessesByName("WinScribe Internet Author"))
        {
            IntPtr hwnd = w.MainWindowHandle;
            SetForegroundWindow(hwnd);
        }

        if (_pedcheck == false)
        {
            foreach (Process p in System.Diagnostics.Process.GetProcessesByName("Pedable"))
            {
                    IntPtr hWnd = p.MainWindowHandle;
                    SetForegroundWindow(hWnd);
                InputSimulator.SimulateKeyDown(VirtualKeyCode.CONTROL);
                InputSimulator.SimulateKeyPress(VirtualKeyCode.VK_D);
                InputSimulator.SimulateKeyUp(VirtualKeyCode.CONTROL);
                _pedcheck = true;
            }
        else
        {
            MessageBox.Show("Boolean Failure");
        }

    }
    public void button1_Click(object sender, EventArgs e)
    {
        SendkeyT();
    }

    public void Events_AuthorRecordStarted(string msg)
    {
       // MessageBox.Show("Recording Started");
        SendkeyT();
    }

MessageBox のコメントを外すと、起動してボックスがユーザーに表示されます。ユーザーが [OK] をクリックすると、関数が適切に起動します。メッセージボックスを含めないと、キーが送信されてアクティブになっているウィンドウがタスクバーで点滅し始めることに気づきました。したがって、フォアグラウンド設定に関係していると想定しています。

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern bool SetForegroundWindow(IntPtr hWnd);

誰か提案があれば、私はそれを大いに感謝します。

ありがとう!

4

2 に答える 2

1

場合によっては、「アプリケーション」のメイン ウィンドウ ハンドルが「論理」メイン ウィンドウ (フォーカスを設定したい) のハンドルではなく、ほとんどの場合、メイン ウィンドウが非表示になっているため、フォーカスを設定します。違いはありません。

プロセスのウィンドウを反復して、フォアグラウンドに設定する必要があるものを見つけてください。

Process Explorerを使用してアプリを調査できます。(アクションを実行したい特定のアプリの場合。)

使用:プロセス内のすべてのウィンドウを列挙する方法は? 子ウィンドウの取得を支援します。

于 2013-07-15T13:32:03.153 に答える
0
MessageBox.Show(this, "my message");

「これ」を MessageBox.Show メソッドに渡すと、問題が解決しました。

于 2013-08-16T16:38:26.767 に答える