Windows mobile 杀死Skype进程

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

代码
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;
using System.Runtime.InteropServices;

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

        
public bool KillProcessByWindowsTitle(string title)
        {
            IntPtr hWnd 
= SafeNativeMethods.FindWindow(null, title);
            
if (hWnd != IntPtr.Zero)
            {
                
int processId = 0;
                SafeNativeMethods.GetWindowThreadProcessId(hWnd, 
ref processId);
                IntPtr hProcess 
= IntPtr.Zero;
                hProcess 
= SafeNativeMethods.OpenProcess(SafeNativeMethods.PROCESS_ALL_ACCESS, 0, processId);
                
if (hProcess != IntPtr.Zero)
                {
                    
if (SafeNativeMethods.TerminateProcess(hProcess, 1))
                    {
                        SafeNativeMethods.CloseHandle(hProcess);
                        
return true;
                    }
                    
else
                    {
                        SafeNativeMethods.CloseHandle(hProcess);
                        
return false;
                    }
                }
                
else
                {
                    
return false;
                }
            }
            
return false;
        }

        
private void button1_Click(object sender, EventArgs e)
        {
            KillProcessByWindowsTitle(
"填入窗体标题即可");
            MessageBox.Show(
"okOK");
        }

    }

    
internal sealed class SafeNativeMethods
    {
        [DllImport(
"coredll.dll")]
        
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        
public const int PROCESS_ALL_ACCESS = 0x000F0000 | 0x00100000 | 0xFFF;
        [DllImport(
"coredll.dll")]
        
public extern static int GetWindowThreadProcessId(IntPtr hWnd, ref int lpdwProcessId);
        [DllImport(
"coredll.dll")]
        
public extern static IntPtr OpenProcess(int fdwAccess, int fInherit, int IDProcess);
        [DllImport(
"coredll.dll")]
        
public extern static bool TerminateProcess(IntPtr hProcess, int uExitCode);
        [DllImport(
"coredll.dll")]
        
public extern static bool CloseHandle(IntPtr hObject);
    }

}

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");
        }

    }
}

/Files/tt_mc/Mobile.rar

原文地址:https://www.cnblogs.com/tt_mc/p/1659081.html