Я пытаюсь с помощью С# установить окно процесса на передний план/в фокус (из приложения, которое не имеет фокуса в этом момент, когда я это делаю), поэтому я использую метод 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 я не понимаю.