admin 发表于 2010-10-28 18:45:38

C#做辅助的常用API


using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;//这个肯定要的

namespace WindowsApplication1
{
    class win32API
    {
      public const int OPEN_PROCESS_ALL = 2035711;
      public const int PAGE_READWRITE = 4;
      public const int PROCESS_CREATE_THREAD = 2;
      public const int PROCESS_HEAP_ENTRY_BUSY = 4;
      public const int PROCESS_VM_OPERATION = 8;
      public const int PROCESS_VM_READ = 256;
      public const int PROCESS_VM_WRITE = 32;

      private const int PAGE_EXECUTE_READWRITE = 0x4;
      private const int MEM_COMMIT = 4096;
      private const int MEM_RELEASE = 0x8000;
      private const int MEM_DECOMMIT = 0x4000;
      private const int PROCESS_ALL_ACCESS = 0x1F0FFF;

      


      //查找窗体
      
      public extern static IntPtr FindWindow(
            string lpClassName,
            string lpWindowName
            );

      //得到目标进程句柄的函数
      
      public extern static int GetWindowThreadProcessId(
            int hwnd,
            ref int lpdwProcessId
            );
      
      public extern static int GetWindowThreadProcessId(
            IntPtr hwnd,
            ref int lpdwProcessId
            );

      //打开进程
      
      public extern static int OpenProcess(
            int dwDesiredAccess,
            int bInheritHandle,
            int dwProcessId
            );
      
      public extern static IntPtr OpenProcess(
            uint dwDesiredAccess,
            int bInheritHandle,
            uint dwProcessId
            );
      
      //关闭句柄的函数
      
      public static extern int CloseHandle(
            int hObject
            );

      //读内存
      
      public static extern Int32 ReadProcessMemory(
            IntPtr hProcess,
            IntPtr lpBaseAddress,
             byte[] buffer,
            int size,
            out IntPtr lpNumberOfBytesWritten
            );
      
      public static extern Int32 ReadProcessMemory(
            int hProcess,
            int lpBaseAddress,
            ref int buffer,
            //byte[] buffer,
            int size,
            int lpNumberOfBytesWritten
            );
      
      public static extern Int32 ReadProcessMemory(
            int hProcess,
            int lpBaseAddress,
            byte[] buffer,
            int size,
            int lpNumberOfBytesWritten
            );

      //写内存
      
      public static extern Int32 WriteProcessMemory(
            IntPtr hProcess,
            IntPtr lpBaseAddress,
             byte[] buffer,
            int size,
            out IntPtr lpNumberOfBytesWritten
            );

      
      public static extern Int32 WriteProcessMemory(
            int hProcess,
            int lpBaseAddress,
            byte[] buffer,
            int size,
            int lpNumberOfBytesWritten
            );

      //创建线程
      
      public static extern int CreateRemoteThread(
            int hProcess,
            int lpThreadAttributes,
            int dwStackSize,
            int lpStartAddress,
            int lpParameter,
            int dwCreationFlags,
            ref int lpThreadId
            );

      //开辟指定进程的内存空间
      
      public static extern System.Int32 VirtualAllocEx(
         System.IntPtr hProcess,
         System.Int32 lpAddress,
         System.Int32 dwSize,
         System.Int16 flAllocationType,
         System.Int16 flProtect
         );

      
      public static extern System.Int32 VirtualAllocEx(
      int hProcess,
      int lpAddress,
      int dwSize,
      int flAllocationType,
      int flProtect
      );

      //释放内存空间
      
      public static extern System.Int32 VirtualFreeEx(
      int hProcess,
      int lpAddress,
      int dwSize,
      int flAllocationType
      );
    }
}

黑泡泡 发表于 2010-10-29 12:19:08

顶起......


补充模拟键盘API
      public static extern void keybd_event(
            byte bVk,       //虚拟键值
            byte bScan,   //硬件扫描码
            int dwFlags,//动作标识 这里是整数类型0 为按下,2为释放
            int dwExtraInfo//与键盘动作关联的辅助信息 这里是整数类型 一般情况下设成为 0
      );
      //调用方法:
      //    keybd_event((byte)Keys.LWin, 0, 0, 0);   //按下LWIN
      //    keybd_event((byte)Keys.D, 0, 0, 0);         //按下D
      //    keybd_event((byte)Keys.LWin, 0, 2, 0);   //释放LWIN
      //    keybd_event((byte)Keys.D, 0, 2, 0);      //释放D

黑泡泡 发表于 2010-10-29 12:20:25

再补充个发送消息的API
可以后台发送
      private static extern bool SendMessage(
            IntPtr hWnd,      //目标窗口句柄
            int msg,            //消息
            int wParam,         //附加的消息特定的信息
            IntPtr lParam       //附加的消息特定的信息
            );

a2331975 发表于 2010-10-29 20:50:35

学习学习!!!~~~~~
页: [1]
查看完整版本: C#做辅助的常用API