string name = Assembly.GetExecutingAssembly().GetName().Name;
int currentId=Process.GetCurrentProcess().Id;
EnumThreadDelegate callbackDelegate=new EnumThreadDelegate(Callback);
foreach(Process p in Process.GetProcessesByName(name))
{
if (p.Id != currentId)
{
IntPtr mainwindowHandle = p.MainWindowHandle;
if (mainwindowHandle != IntPtr.Zero)
{
SendMessage(mainwindowHandle,
0x8000 + 1,
(IntPtr)(0), (IntPtr)(0)
);
}
else
{
foreach (ProcessThread thread in p.Threads)
{ EnumThreadWindows(thread.Id, callbackDelegate, (IntPtr)0); }
}
}
}
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EnumThreadWindows(int dwThreadId, EnumThreadDelegate lpfn, IntPtr lParam);
public delegate int EnumThreadDelegate(IntPtr hwnd, IntPtr lParam);
public static int Callback(IntPtr handle,IntPtr garbage)
{
SendMessage(handle, 0x8000+1, (IntPtr)(0), (IntPtr)(0));
return 1;
}
|