SetForegroundWindow работает только при открытой Visual Studio

Я пытаюсь с помощью С# установить окно процесса на передний план/в фокус (из приложения, которое не имеет фокуса в этом момент, когда я это делаю), поэтому я использую метод user32.dll static extern bool SetForegroundWindow(IntPtr hWnd):

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd); 
public void setFocus()
{
      SetForegroundWindow(process.MainWindowHandle);       
}

все работает нормально, но только если у меня открыта Visual Studio 2008 , мне даже не нужно запускать приложение из VS08, достаточно открыть с ним проект. В тот момент, когда я закрываю проект, мое приложение не может установить другое окно на передний план.единственный результат в том, что на панели задач другое окно выделено синим цветом. в тот момент, когда я снова открою свой проект с VS08, он будет работать нормально.

я не имею ни малейшего представления, почему... я понял, что проблема может заключаться в том, что он не может импортировать dll, но тогда она не будет выделена, и другие функции win32, такие как static extern bool ShowWindow(IntPtr hWnd, IntPtr status );работают, даже когда проект закрыт.

любые решения или подсказки для этой проблемы?

Редактировать:

я прочитал примечания к функции, и у меня возникла идея, что мое приложение не имеет фокуса, поэтому я попробовал это:

    [DllImport("user32.dll")]
    static extern bool SetForegroundWindow(IntPtr hWnd);
    [return: MarshalAs(UnmanagedType.Bool)]
    [DllImport("user32.dll")]
    static extern bool AllowSetForegroundWindow(int procID);
    [DllImport("user32.dll")]
    private static extern IntPtr GetForegroundWindow();
    [DllImport("user32.dll", SetLastError = true)]
    static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); 
    public void setAUTFocus()
    {
        IntPtr hWnd = GetForegroundWindow();
        uint processID = 0;
        uint threadID = GetWindowThreadProcessId(hWnd, out processID);
        int intID = (int)processID;
        AllowSetForegroundWindow(intID);
        SetForegroundWindow(process.MainWindowHandle); 
    }        

теперь я ищу оконный процесс, который имеет фокус на момент и установить «AllowSetForegroundWindow» для этого окна и попытаться установить фокус на моем окне сейчас. Но та же проблема, в тот момент, когда у меня есть проект в VS, он работает, если нет, я получаю только синюю подсветку на панели задач.

во время работы моего приложения я могу открыть/закрыть проект vs, в момент его открытия все работает, в момент закрытия он не работает, я не взаимодействую с проектом VS во время работы приложения. srssly я не понимаю.

9
задан dontcare 25 May 2012 в 10:01
поделиться