PDA

View Full Version : سوال: Pause کردن یک پروسس



DataMaster
چهارشنبه 25 آذر 1388, 17:38 عصر
سلام
امکانش هست یه پروسس که در ویندوز در حال اجرا هست رو به صورت معلق در اورد؟؟

فقط توجه داشته باشین میخوام یه پروسه ای که کاربر اجرا کرده رو معلق کنم
مرسی

AliRezaPro
چهارشنبه 25 آذر 1388, 19:32 عصر
اینجا ها را نگاه کنید

http://www.codeproject.com/KB/threads/pausep.aspx

DataMaster
دوشنبه 30 آذر 1388, 19:18 عصر
راستش این نمونه کد با c بود زیاد ازش سر در نیارودم
نمونه کد دات نت سراغ ندارید؟؟؟

AliRezaPro
دوشنبه 30 آذر 1388, 20: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;

}

}

}