2012-02-16 37 views
0

好吧,我有三個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://stackoverflow.com/questions/4566632/maximize-another-process-window-in-net – JMK 2012-02-16 15:07:44

回答

1

試試這個:

[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)); 
    } 

} 
6

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