zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Oracle 实现数据表插入时主键列自增
    Java BigDecimal 加减乘除用法
    php最常见最经典的算法题(1)
    2、php-选择排序方法
    1、php-冒泡排序方法
    65G-一系列Go语言课程Go基础知识高级Go项目战斗New Go语言和区块链开发实践课程
    css
    python基础
    SEO优化指南
    转载GXT之旅
  • 原文地址:https://www.cnblogs.com/tt_mc/p/1659081.html
Copyright © 2011-2022 走看看