DataMaster
چهارشنبه 25 آذر 1388, 18:38 عصر
سلام
امکانش هست یه پروسس که در ویندوز در حال اجرا هست رو به صورت معلق در اورد؟؟
فقط توجه داشته باشین میخوام یه پروسه ای که کاربر اجرا کرده رو معلق کنم
مرسی
AliRezaPro
چهارشنبه 25 آذر 1388, 20:32 عصر
اینجا ها را نگاه کنید
http://www.codeproject.com/KB/threads/pausep.aspx
DataMaster
دوشنبه 30 آذر 1388, 20:18 عصر
راستش این نمونه کد با c بود زیاد ازش سر در نیارودم
نمونه کد دات نت سراغ ندارید؟؟؟
AliRezaPro
دوشنبه 30 آذر 1388, 21:34 عصر
با این کد هم میشه ساسپند کرد پروسز رو
[Flags]
public enum ThreadAccess : int
{
TERMINATE = (0x0001),
SUSPEND_RESUME = (0x0002),
GET_CONTEXT = (0x0008),
SET_CONTEXT = (0x0010),
SET_INFORMATION = (0x0020),
QUERY_INFORMATION = (0x0040),
SET_THREAD_TOKEN = (0x0080),
IMPERSONATE = (0x0100),
DIRECT_IMPERSONATION = (0x0200)
}
[DllImport("kernel32.dll")]
static extern IntPtr OpenThread(ThreadAccess dwDesiredAccess, bool bInheritHandle, uint dwThreadId);
[DllImport("kernel32.dll")]
static extern uint SuspendThread(IntPtr hThread);
[DllImport("kernel32.dll")]
static extern int ResumeThread(IntPtr hThread);
private void SuspendProcess(int PID)
{
Process proc = Process.GetProcessById(PID);
if (proc.ProcessName == string.Empty)
return;
foreach (ProcessThread pT in proc.Threads)
{
IntPtr pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)pT.Id);
if (pOpenThread == IntPtr.Zero)
{
break;
}
SuspendThread(pOpenThread);
}
}
public void ResumeProcess(int PID)
{
Process proc = Process.GetProcessById(PID);
if (proc.ProcessName == string.Empty)
return;
foreach (ProcessThread pT in proc.Threads)
{
IntPtr pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)pT.Id);
if (pOpenThread == IntPtr.Zero)
{
break;
}
ResumeThread(pOpenThread);
}
}
این رو هم نگاه کن
private void menuPlay_Click(object sender, System.EventArgs e)
{
//(...)
MethodInvoker mi = new MethodInvoker(Execute);
mi.BeginInvoke(null, null);
}
private void Execute()
{
//(...)
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();
while (! myProcess.HasExited)
{
Thread.Sleep(500);
if (PauseRequested == true)
{
//???
}
}
}
private bool IsPaused;
private void menuPause_Click(object sender, System.EventArgs e)
{
if (menuPause.Checked == true)
menuPause.Checked = false;
else
menuPause.Checked = true;
lock(this)
{
IsPaused = menuPause.Checked;
}
}
protected bool PauseRequested
{
get
{
lock(this)
{
return IsPaused;
}
}
}
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.