保证应用程序只有一个实例在运行
2024-07-21 02:20:05
供稿:网友
[c#]
public static process runninginstance()
{
process current = process.getcurrentprocess();
process[] processes = process.getprocessesbyname (current.processname);
//loop through the running processes in with the same name
foreach (process process in processes)
{
//ignore the current process
if (process.id != current.id)
{
//make sure that the process is running from the exe file.
if (assembly.getexecutingassembly().location.replace("/", "//") == current.mainmodule.filename)
{
//return the other process instance.
return process;
}
}
}
//no other instance was found, return null.
return null;
}
[vb.net]
public shared function runninginstance() as process
dim current as process = process.getcurrentprocess()
dim processes as process() = process.getprocessesbyname(current.processname)
'loop through the running processes in with the same name
dim process as process
for each process in processes
'ignore the current process
if process.id <> current.id then
'make sure that the process is running from the exe file.
if [assembly].getexecutingassembly().location.replace("/", "/") = current.mainmodule.filename then
'return the other process instance.
return process
end if
end if
next process
'no other instance was found, return null.
return nothing
end function 'runninginstance
如果检测到已有窗体实例,将此实例显示出来参考:
[stathread]
static void main()
{
//get the running instance.
process instance = runninginstance();
if (instance == null)
{
//there isn't another instance, show our form.
application.run (new form2());
}
else
{
//there is another instance of this process.
handlerunninginstance(instance);
}
}
public static process runninginstance()
{
process current = process.getcurrentprocess();
process[] processes = process.getprocessesbyname (current.processname);
//loop through the running processes in with the same name
foreach (process process in processes)
{
//ignore the current process
if (process.id != current.id)
{
//make sure that the process is running from the exe file.
if (assembly.getexecutingassembly().location.replace("/", "//") ==current.mainmodule.filename)
{
//return the other process instance.
return process;
}
}
}
//no other instance was found, return null.
return null;
}
public static void handlerunninginstance(process instance)
{
//make sure the window is not minimized or maximized
showwindowasync (instance.mainwindowhandle , ws_shownormal);
//set the real intance to foreground window
setforegroundwindow (instance.mainwindowhandle);
}
[dllimport("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