あなたが実行して、プログラムを集中するスタートアップコンソールアプリケーション上で実行することができ、このつまりを解決することができる多くの方法があります。
[STAThread]
static void Main(string[] args)
{
System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo.FileName = "calc";
myProcess.Start();
IntPtr hWnd = myProcess.Handle;
SetFocus(new HandleRef(null, hWnd));
}
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern IntPtr SetFocus(HandleRef hWnd);
あなたのアプリがある場合は、Windowsサービスアプリケーションをホストし、タイマーチェックを使用することができます生きていると集中しているか、あなたはそれを戻すためにホットキーを使用することができますが重視:
http://www.codeproject.com/KB/miscctrl/ashsimplehotkeys.aspx
編集これは生きているあなたのアプリを維持し、(テスト)焦点を当てますコンソールアプリケーションです。私はWindowsサービスのためのウォークアラウンドは、何か変更され、サービスから見つかったときにフォームが見えないので、必要があります:P
static Process myProcess;
[STAThread]
static void Main(string[] args)
{
for (int i = 0; i < 10000; i++)
{
//count how many procesess with this name are active if more than zero its still alive
Process[] proc = Process.GetProcessesByName("myprog");
if (proc.Length > 0)
{
//its alive check if it has focus
if (proc[0].MainWindowHandle != GetForegroundWindow())
{
SetFocus(proc[0].MainWindowHandle);
}
}
//no process start new one and focus on it
else
{
myProcess = new Process();
myProcess.StartInfo.FileName = "C:\\aa\\myprog.exe";
myProcess.Start();
SetFocus(myProcess.Handle);
}
Thread.Sleep(1000);
}
}
private static void SetFocus(IntPtr handle)
{
SwitchToThisWindow(handle, true);
}
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", SetLastError = true)]
public static extern void SwitchToThisWindow(IntPtr hWnd, bool fAltTab);
ありがとうございました。コードを説明することができれば、私のプログラムをスタートアップに追加することと何が違うのでしょうか?また、Windowsサービスアプリケーションのサンプルを追加することが可能な場合。もう一度ありがとう – CaptainNemo
あなたが書きました:コンピュータが起動すると、プログラムはスタートアップメニューに表示されますが、何らかの理由でプログラムがフォーカスしていない状態で起動しています。主な相違点は、SetFocusがあなたのアプリケーションに焦点を当てる方法です。単に "calc"を.exeファイルのパスに置き換えるだけです。 "C:\\ myprog.exe"。私はコードであなたを助けるかもしれませんが、私はどのバージョンのVS/.NET Frameworkを使用しているのか知っている必要がありますか? – Silx
もう一度おねがいします。私はVS 2010と.NET 4を使用しています – CaptainNemo