我试图用 c# 设置一个进程窗口到前景/ 焦点( 来自于一个在进行时没有焦点的应用程序), 因此我使用 us322. dll < code> static Extern bookl SetForegroundow (IntPtr hWnd) code> 方法 :
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
public void setFocus()
{
SetForegroundWindow(process.MainWindowHandle);
}
每件事都很好, 但只有当我拥有2008年的视觉工作室时, 我甚至不需要从 VS08 开始应用程序, 它足以让工程打开。 当我关闭此项目时, 我的程序无法将另一个窗口设置在前景上。 唯一的结果是在任务栏中, 另一个窗口被突出显示为蓝色。 当我要用 VS08 重新打开我的工程时, 它就运作正常 。
我不知道为什么.我认为问题可能是他无法导入该圆层,但不会被突出显示,还有其他的双点32函数,如static Extern bookl ShowWindow (IntPtr hWnd, IntPtr status);
即使在项目关闭时也在起作用。
这个问题有什么解决办法或暗示吗?
Edit: I read the remarks for the function and I had the idea that my application has not the focus, so I tried this one:
[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);
}
现在我正在寻找当前焦点的窗口进程, 并为此窗口设置 < code> AllowSetFororegroundWindow , 并试图现在将焦点设置在我的窗口上。 但同样的问题, 我一在 VS 中工程打开它就起作用了, 如果我没有在任务栏中只获得蓝色亮点 。
在我申请运行期间,我可以打开/关闭 vs 工程, 当它打开了一切工作, 当它关闭了它不起作用, 我运行我的申请时没有与 VS 工程互动。 说真的我不明白它。