程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 制作外掛常用的API,

C# 制作外掛常用的API,

編輯:C#入門知識

C# 制作外掛常用的API,


  1. C#做外掛的常用API,本人用了很久,基本沒發現問題  
  2.   
  3. using System;  
  4. using System.Collections.Generic;  
  5. using System.Text;  
  6. using System.Runtime.InteropServices;  //這個肯定要的   
  7.   
  8. namespace WindowsApplication1  
  9. {  
  10.     class win32API  
  11.     {  
  12.         public const int OPEN_PROCESS_ALL = 2035711;  
  13.         public const int PAGE_READWRITE = 4;  
  14.         public const int PROCESS_CREATE_THREAD = 2;  
  15.         public const int PROCESS_HEAP_ENTRY_BUSY = 4;  
  16.         public const int PROCESS_VM_OPERATION = 8;  
  17.         public const int PROCESS_VM_READ = 256;  
  18.         public const int PROCESS_VM_WRITE = 32;  
  19.   
  20.         private const int PAGE_EXECUTE_READWRITE = 0x4;  
  21.         private const int MEM_COMMIT = 4096;  
  22.         private const int MEM_RELEASE = 0x8000;  
  23.         private const int MEM_DECOMMIT = 0x4000;  
  24.         private const int PROCESS_ALL_ACCESS = 0x1F0FFF;  
  25.   
  26.          
  27.   
  28.   
  29.         //查找窗體  
  30.         [DllImport("User32.dll", EntryPoint = "FindWindow")]  
  31.         public extern static IntPtr FindWindow(  
  32.             string lpClassName,  
  33.             string lpWindowName  
  34.             );  
  35.   
  36.         //得到目標進程句柄的函數  
  37.         [DllImport("USER32.DLL")]  
  38.         public extern static int GetWindowThreadProcessId(  
  39.             int hwnd,  
  40.             ref int lpdwProcessId  
  41.             );  
  42.         [DllImport("USER32.DLL")]  
  43.         public extern static int GetWindowThreadProcessId(  
  44.             IntPtr hwnd,  
  45.             ref int lpdwProcessId  
  46.             );  
  47.   
  48.         //打開進程  
  49.         [DllImport("kernel32.dll")]  
  50.         public extern static int OpenProcess(  
  51.             int dwDesiredAccess,  
  52.             int bInheritHandle,  
  53.             int dwProcessId  
  54.             );  
  55.         [DllImport("kernel32.dll")]  
  56.         public extern static IntPtr OpenProcess(  
  57.             uint dwDesiredAccess,  
  58.             int bInheritHandle,  
  59.             uint dwProcessId  
  60.             );  
  61.          
  62.         //關閉句柄的函數  
  63.         [DllImport("kernel32.dll", EntryPoint = "CloseHandle")]  
  64.         public static extern int CloseHandle(  
  65.             int hObject  
  66.             );  
  67.   
  68.         //讀內存  
  69.         [DllImport("Kernel32.dll ")]  
  70.         public static extern Int32 ReadProcessMemory(  
  71.             IntPtr hProcess,  
  72.             IntPtr lpBaseAddress,  
  73.             [In, Out] byte[] buffer,  
  74.             int size,  
  75.             out IntPtr lpNumberOfBytesWritten  
  76.             );  
  77.         [DllImport("Kernel32.dll ")]  
  78.         public static extern Int32 ReadProcessMemory(  
  79.             int hProcess,  
  80.             int lpBaseAddress,  
  81.             ref int buffer,  
  82.             //byte[] buffer,  
  83.             int size,  
  84.             int lpNumberOfBytesWritten  
  85.             );  
  86.         [DllImport("Kernel32.dll ")]  
  87.         public static extern Int32 ReadProcessMemory(  
  88.             int hProcess,  
  89.             int lpBaseAddress,  
  90.             byte[] buffer,  
  91.             int size,  
  92.             int lpNumberOfBytesWritten  
  93.             );  
  94.   
  95.         //寫內存  
  96.         [DllImport("kernel32.dll")]  
  97.         public static extern Int32 WriteProcessMemory(  
  98.             IntPtr hProcess,  
  99.             IntPtr lpBaseAddress,  
  100.             [In, Out] byte[] buffer,  
  101.             int size,  
  102.             out IntPtr lpNumberOfBytesWritten  
  103.             );  
  104.   
  105.         [DllImport("kernel32.dll")]  
  106.         public static extern Int32 WriteProcessMemory(  
  107.             int hProcess,  
  108.             int lpBaseAddress,  
  109.             byte[] buffer,  
  110.             int size,  
  111.             int lpNumberOfBytesWritten  
  112.             );  
  113.   
  114.         //創建線程  
  115.         [DllImport("kernel32", EntryPoint = "CreateRemoteThread")]  
  116.         public static extern int CreateRemoteThread(  
  117.             int hProcess,  
  118.             int lpThreadAttributes,  
  119.             int dwStackSize,  
  120.             int lpStartAddress,  
  121.             int lpParameter,  
  122.             int dwCreationFlags,  
  123.             ref int lpThreadId  
  124.             );  
  125.   
  126.         //開辟指定進程的內存空間  
  127.         [DllImport("Kernel32.dll")]  
  128.         public static extern System.Int32 VirtualAllocEx(  
  129.          System.IntPtr hProcess,  
  130.          System.Int32 lpAddress,  
  131.          System.Int32 dwSize,  
  132.          System.Int16 flAllocationType,  
  133.          System.Int16 flProtect  
  134.          );  
  135.   
  136.         [DllImport("Kernel32.dll")]  
  137.         public static extern System.Int32 VirtualAllocEx(  
  138.         int hProcess,  
  139.         int lpAddress,  
  140.         int dwSize,  
  141.         int flAllocationType,  
  142.         int flProtect  
  143.         );  
  144.   
  145.         //釋放內存空間  
  146.         [DllImport("Kernel32.dll")]  
  147.         public static extern System.Int32 VirtualFreeEx(  
  148.         int hProcess,  
  149.         int lpAddress,  
  150.         int dwSize,  
  151.         int flAllocationType  
  152.         );  
  153.     }  
  154. }  

C語言裡面,這個符號(->)是什,怎使用?

這是結構體指針中的一個符號,給你寫個程序解釋一下吧,例如:
#include<stdio.h>
struct STU //定義一個結構體
{
int num;
}stu;
int main()
{
struct STU *p; //定義一個結構體指針
p=stu; //p指向stu這個結構體變量
stu.num=100; //給結構體成員num附個初值
printf("%d",p->num); //輸出stu中的num的值
return;
}
看到了吧,->的作法就是在引用結構體中的變量!!
形式如:p->結構體成員(如p->num)
他的作用相當於stu.num或(*p).num
不知道這樣解釋你明不明白、、、、、不懂了call我,O(∩_∩)O~
望采納。
 

C語言裡面,這個符號(->)是什,怎使用?

這是結構體指針中的一個符號,給你寫個程序解釋一下吧,例如:
#include<stdio.h>
struct STU //定義一個結構體
{
int num;
}stu;
int main()
{
struct STU *p; //定義一個結構體指針
p=stu; //p指向stu這個結構體變量
stu.num=100; //給結構體成員num附個初值
printf("%d",p->num); //輸出stu中的num的值
return;
}
看到了吧,->的作法就是在引用結構體中的變量!!
形式如:p->結構體成員(如p->num)
他的作用相當於stu.num或(*p).num
不知道這樣解釋你明不明白、、、、、不懂了call我,O(∩_∩)O~
望采納。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved