Windows mobile 杀死Skype进程

1:当wm下GetProcesses不好用了,要杀特定的进程就只能通过窗体的标题了:

代码

2:也许大部分设备上,GetProcesses是好用的

using System;
using System.Linq;
// using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Collections;

namespace Mobile
{
class Process
{
#region Process class
private string processName;
private IntPtr handle;
private int threadCount;
private int baseAddress;


// default constructor
public Process()
{

}

private Process(IntPtr id, string procname, int threadcount, int baseaddress)
{
handle
= id;
processName
= procname;
threadCount
= threadcount;
baseAddress
= baseaddress;
}

// ToString implementation for ListBox binding
public override string ToString()
{
return processName;
}

public int BaseAddress
{
get
{
return baseAddress;
}
}

public int ThreadCount
{
get
{
return threadCount;
}
}

public IntPtr Handle
{
get
{
return handle;
}
}

public string ProcessName
{
get
{
return processName;
}
}

public int BaseAddess
{
get
{
return baseAddress;
}
}


public void Kill( IntPtr handle)
{
IntPtr hProcess;

hProcess
= OpenProcess(PROCESS_TERMINATE, false , ( int )handle);

if (hProcess != (IntPtr)INVALID_HANDLE_VALUE)
{
bool bRet;
bRet
= TerminateProcess(hProcess, 0 );
CloseHandle(hProcess);
}
}

public static Process[] GetProcesses()
{
ArrayList procList
= new ArrayList();

IntPtr handle
= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0 );

if (( int )handle > 0 )
{
try
{
PROCESSENTRY32 peCurrent;
PROCESSENTRY32 pe32
= new PROCESSENTRY32();
// Get byte array to pass to the API calls
byte [] peBytes = pe32.ToByteArray();
// Get the first process
int retval = Process32First(handle, peBytes);

while (retval == 1 )
{
// Convert bytes to the class
peCurrent = new PROCESSENTRY32(peBytes);
// New instance
Process proc = new Process( new IntPtr(( int )peCurrent.PID), peCurrent.Name, ( int )peCurrent.ThreadCount, ( int )peCurrent.BaseAddress);

procList.Add(proc);

retval
= Process32Next(handle, peBytes);
}
}
catch (Exception ex)
{
throw new Exception( " Exception: " + ex.Message);
}

// Close handle
CloseToolhelp32Snapshot(handle);

return (Process[])procList.ToArray( typeof (Process));

}
else
{
// throw new Exception("Unable to create snapshot");
return null ;
}
}

#endregion


#region PROCESSENTRY32 implementation

private class PROCESSENTRY32
{
// constants for structure definition
private const int SizeOffset = 0 ;
private const int UsageOffset = 4 ;
private const int ProcessIDOffset = 8 ;
private const int DefaultHeapIDOffset = 12 ;
private const int ModuleIDOffset = 16 ;
private const int ThreadsOffset = 20 ;
private const int ParentProcessIDOffset = 24 ;
private const int PriClassBaseOffset = 28 ;
private const int dwFlagsOffset = 32 ;
private const int ExeFileOffset = 36 ;
private const int MemoryBaseOffset = 556 ;
private const int AccessKeyOffset = 560 ;
private const int Size = 564 ;
private const int MAX_PATH = 260 ;

// data members
public uint dwSize;
public uint cntUsage;
public uint th32ProcessID;
public uint th32DefaultHeapID;
public uint th32ModuleID;
public uint cntThreads;
public uint th32ParentProcessID;
public long pcPriClassBase;
public uint dwFlags;
public string szExeFile;
public uint th32MemoryBase;
public uint th32AccessKey;

// Default constructor
public PROCESSENTRY32()
{


}

// create a PROCESSENTRY instance based on a byte array
public PROCESSENTRY32( byte [] aData)
{
dwSize
= GetUInt(aData, SizeOffset);
cntUsage
= GetUInt(aData, UsageOffset);
th32ProcessID
= GetUInt(aData, ProcessIDOffset);
th32DefaultHeapID
= GetUInt(aData, DefaultHeapIDOffset);
th32ModuleID
= GetUInt(aData, ModuleIDOffset);
cntThreads
= GetUInt(aData, ThreadsOffset);
th32ParentProcessID
= GetUInt(aData, ParentProcessIDOffset);
pcPriClassBase
= ( long )GetUInt(aData, PriClassBaseOffset);
dwFlags
= GetUInt(aData, dwFlagsOffset);
szExeFile
= GetString(aData, ExeFileOffset, MAX_PATH);
th32MemoryBase
= GetUInt(aData, MemoryBaseOffset);
th32AccessKey
= GetUInt(aData, AccessKeyOffset);
}

#region Helper conversion functions
// utility: get a uint from the byte array
private static uint GetUInt( byte [] aData, int Offset)
{
return BitConverter.ToUInt32(aData, Offset);
}

// utility: set a uint int the byte array
private static void SetUInt( byte [] aData, int Offset, int Value)
{
byte [] buint = BitConverter.GetBytes(Value);
Buffer.BlockCopy(buint,
0 , aData, Offset, buint.Length);
}

// utility: get a ushort from the byte array
private static ushort GetUShort( byte [] aData, int Offset)
{
return BitConverter.ToUInt16(aData, Offset);
}

// utility: set a ushort int the byte array
private static void SetUShort( byte [] aData, int Offset, int Value)
{
byte [] bushort = BitConverter.GetBytes(( short )Value);
Buffer.BlockCopy(bushort,
0 , aData, Offset, bushort.Length);
}

// utility: get a unicode string from the byte array
private static string GetString( byte [] aData, int Offset, int Length)
{
String sReturn
= Encoding.Unicode.GetString(aData, Offset, Length);
return sReturn;
}

// utility: set a unicode string in the byte array
private static void SetString( byte [] aData, int Offset, string Value)
{
byte [] arr = Encoding.ASCII.GetBytes(Value);
Buffer.BlockCopy(arr,
0 , aData, Offset, arr.Length);
}
#endregion

// create an initialized data array
public byte [] ToByteArray()
{
byte [] aData;
aData
= new byte [Size];
// set the Size member
SetUInt(aData, SizeOffset, Size);
return aData;
}

public string Name
{
get
{
return szExeFile.Substring( 0 , szExeFile.IndexOf( ' /0 ' ));
}
}

public ulong PID
{
get
{
return th32ProcessID;
}
}

public ulong BaseAddress
{
get
{
return th32MemoryBase;
}
}

public ulong ThreadCount
{
get
{
return cntThreads;
}
}
}
#endregion

#region PInvoke declarations
private const int TH32CS_SNAPPROCESS = 0x00000002 ;
[DllImport(
" toolhelp.dll " )]
public static extern IntPtr CreateToolhelp32Snapshot( uint flags, uint processid);
[DllImport(
" toolhelp.dll " )]
public static extern int CloseToolhelp32Snapshot(IntPtr handle);
[DllImport(
" toolhelp.dll " )]
public static extern int Process32First(IntPtr handle, byte [] pe);
[DllImport(
" toolhelp.dll " )]
public static extern int Process32Next(IntPtr handle, byte [] pe);
[DllImport(
" coredll.dll " )]
private static extern IntPtr OpenProcess( int flags, bool fInherit, int PID);
private const int PROCESS_TERMINATE = 1 ;
[DllImport(
" coredll.dll " )]
private static extern bool TerminateProcess(IntPtr hProcess, uint ExitCode);
[DllImport(
" coredll.dll " )]
private static extern bool CloseHandle(IntPtr handle);
private const int INVALID_HANDLE_VALUE = - 1 ;

#endregion



}
}

 

using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Mobile
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click( object sender, EventArgs e)
{
Process[] a
= Process.GetProcesses();
for ( int i = 0 ; i < a.Length; i ++ )
{
MessageBox.Show(a[i].ProcessName);
if (a[i].ProcessName == " Skype-PPC.exe " )
{
Process pp
= new Process();
pp.Kill(a[i].Handle);
MessageBox.Show(
" kill clean " );
}

}

MessageBox.Show(
" OK " );
}

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值