使运行进程成为活动窗口

问题描述:

好吧,我有三个Microsoft Access数据库。我希望能够以编程方式切换这些内容。我有一个void方法,它接受一个名为dbName(我的数据库名称)的字符串参数。使运行进程成为活动窗口

public void SwitchDatabase(string dbName) 
{ 

} 

我知道我的Access数据库的MainWindowTitle是什么,每个数据库都有一个不同的MainWindowTitle这样我就可以创建Process类的数组,使这个相等,从而System.Diagnostics.Process.GetProcesses()。然后我可以通过我的正在运行的进程循环,直到我找到了一个在ProcessName是MSACCESS和MainWindowTitle是正确的,像这样:

Process[] processList = Process.GetProcesses(); 

foreach (Process theProcess in processList) 
{ 
    string processName = theProcess.ProcessName; 
    string mainWindowTitle = theProcess.MainWindowTitle; 
} 

有一次,我发现这一点,我可以再抢进程ID,现在我想使这个过程成为我的活动窗口。我该怎么做呢?

感谢

+2

如果.laccdb创建是因为某人用Access打开数据库而不是您的应用程序?或者,如果文件存在是因为打开它的应用程序在清除之前崩溃了?我不认为这是一种可靠的工作方式。 – 2012-02-16 11:11:36

+0

好吧,问题的关键是切换到我认为是开放的数据库,所以如果不是,它会抛出一个我可以处理的异常 – JMK 2012-02-16 11:15:13

+0

结合Eric在下面的答案中的信息,以下链接帮助我获得这工作 - http://*.com/questions/4566632/maximize-another-process-window-in-net – JMK 2012-02-16 15:07:44

试试这个:

[DllImport("user32.dll", CharSet=CharSet.Auto,ExactSpelling=true)] 
public static extern IntPtr SetFocus(HandleRef hWnd); 


[TestMethod] 
public void PlayAround() 
{ 
    Process[] processList = Process.GetProcesses(); 

    foreach (Process theProcess in processList) 
    { 
     string processName = theProcess.ProcessName; 
     string mainWindowTitle = theProcess.MainWindowTitle; 
     SetFocus(new HandleRef(null, theProcess.MainWindowHandle)); 
    } 

} 

Eric的回答并没有为我工作。我用SetForegroundWindow发现了一个更好的解决方案here on SO。 首先我想知道,为什么有一次这样做,下次它没有。然后我从列表中排除当前进程。所以,这是我的最终版本:

static void BringWindowToFront() 
{ 
    var currentProcess = Process.GetCurrentProcess(); 
    var processes = Process.GetProcessesByName(currentProcess.ProcessName); 
    var process = processes.FirstOrDefault(p => p.Id!=currentProcess.Id); 
    if (process == null) return; 

    SetForegroundWindow(process.MainWindowHandle); 
} 

[DllImport("user32.dll")] 
static extern bool SetForegroundWindow(IntPtr hWnd); 
+0

我想不通为什么'var process = processes.FirstOrDefault(p => p.Id!= currentProcess.Id);'正在检查不平等。根据我的理解,这应该是平等检查。请改正。 – skjoshi 2016-04-23 15:20:53