编程杂记 2010-03-26 18:47:12 阅读304 评论0 字号:大中小 订阅
有时根据实际需要可能希望应用程序每次只有一个实例在运行,当再次点击同一个应用程序的可执行文件时并不生成一个新的实例,而是将相应的用户界面激活,显示在屏幕最前面。要解决这个问题主要是考虑如何判断应用程序是否已经有实例在运行。最直接的想法是当启动应用程序时,我们获得该应用程序对应的进程信息,然后和当前运行的所有进程进行信息比对,如果发现有信息相同的进程存在就认为已有实例在运行,否则直接创建新的实例。新建一个类InstanceManager,该类的具体实现如下:
class InstanceManager {
[DllImport("user32.dll")] //使用user32.dll中提供的两个函数实现显示和激活
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
private const int WS_SHOWNORMAL = 1;
public static Process RunningInstance() { //查找是否有同名的进程并比对信息
Process