3

こんにちは、C# を使用して (最小化されていても) 実行中の他のプログラムにウィンドウを切り替えようとしています。

なぜこれがうまくいかないのか疑問に思っています。

エラー メッセージ: 引数 1: 'System.Diagnostics.Process' から 'System.IntPtr' に変換できません

ループに到達するまでに、proc 変数が適切なウィンドウ ハンドラを参照していると思います。これは真実ではありませんか?本当に助かります。

//declarations
using system.IO;
using System.Runtime.InteropServices;
//more

//namespace here

//class here

//initialize method

//related .dll import
[DllImport("user32.dll")]
        public static extern void SwitchToThisWindow(IntPtr hWnd);

String ProcWindow = "itunes";
//function which calls switchWindow() is here but not important

//now we have switch window.
private void switchWindow()
        {
            Process[] procs = Process.GetProcessesByName(ProcWindow);
            foreach (Process proc in procs)
            {
                //switch to process by name
                SwitchToThisWindow(proc);

            }
        }

将来の読者のために: 別の質問からコードのこの時点に到達しました。 フォーカスを別のアプリケーションに切り替える正しい方法 (.NET)

4

2 に答える 2

5

SwitchToThisWindowは、そのプロセスで切り替えるウィンドウへのハンドルを期待しています。

試す

SwitchToThisWindow(proc.MainWindowHandle);
于 2013-08-21T18:03:07.380 に答える
5

あなたが望むものは次のとおりだと思います:

[DllImport("user32.dll")]
public static extern void SwitchToThisWindow(IntPtr hWnd, bool turnon);

String ProcWindow = "itunes";
//function which calls switchWindow() is here but not important

//now we have switch window.
private void switchWindow()
{
  Process[] procs = Process.GetProcessesByName(ProcWindow);
  foreach (Process proc in procs)
  {
     //switch to process by name
     SwitchToThisWindow(proc.MainWindowHandle, false);

  }
}

SwitchToThisWindow は、渡そうとしていたプロセスではなく、ウィンドウへのハンドルである IntPtr を想定しています。

また、SwitchToThisWindow の pinvoke 署名が正しくないように見えたことにも注意してください。bool パラメーターがありませんでした。

于 2013-08-21T18:05:07.903 に答える