冰楓論壇

標題: C#寫入CE數據請益 [打印本頁]

作者: u11334342    時間: 2023-8-3 19:00
標題: C#寫入CE數據請益
小弟因為私服不能使用CE,所以開始研究如何用其他方式寫入數據,目前嘗試使用C#來引用CE的DLL來達到CE數據的功能,但是遇到一個問題,雖然已經可以得到遊戲的視窗ID與PID,但是數據開關都沒反應,想請大神們幫小弟解惑QQ
以下是我引用DLL的程式碼:
  1. [DllImport("User32.dll", EntryPoint = "FindWindow")]
  2.         public extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
  3.         [DllImport("User32.dll",CharSet = CharSet.Auto)]
  4.         public extern static int GetWindowThreadProcessId(IntPtr hWnd, out int ID);


  5.         [DllImport("kernel32.dll")]
  6.         public static extern int OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);

  7.         [DllImport(@"C:\path_to_dll\ceautoassembler.dll", EntryPoint = "CEInitialize")]
  8.         public extern static int CEInitialize
  9.             (
  10.                 int ngPassedPID,
  11.                 int Phandle
  12.             );
  13.         [DllImport(@"C:\path_to_dll\ceautoassembler.dll", EntryPoint = "CEAutoAsm")]
  14.         public extern static bool CEAutoAsm
  15.             (
  16.                 string Script,
  17.                 bool AllocID,
  18.                 int Alloc
  19.             );
複製代碼
再來是偵測PID與開啟數據的程式碼:
  1. private void button1_Click(object sender, EventArgs e)
  2.         {
  3.             IntPtr maindHwnd = FindWindow(null, "MapleStory");
  4.             const int PROCESS_ALL_ACCESS = 0x1F0FFF;
  5.             if (maindHwnd != IntPtr.Zero)
  6.             {
  7.                 int ID;
  8.                 int Process;
  9.                 MessageBox.Show("鎖定成功!");
  10.                 GetWindowThreadProcessId(maindHwnd, out ID);
  11.                 Process = OpenProcess(PROCESS_ALL_ACCESS, false, ID);
  12.                 label3.Text = maindHwnd.ToString();
  13.                 label4.Text = ID.ToString();
  14.                 if (ID != 0)
  15.                 {
  16.                     CEInitialize(ID, Process);
  17.                 }
  18.             }
  19.             else
  20.             {
  21.                 MessageBox.Show("鎖定失敗!");
  22.             }
  23.         }

  24.         private void label1_Click(object sender, EventArgs e)
  25.         {

  26.         }

  27.         private void checkBox1_CheckedChanged(object sender, EventArgs e)
  28.         {
  29.             if(checkBox1.Checked)
  30.             {
  31.                 //取出字串
  32.                 label2.Text = Properties.Resources.script;
  33.                 CEAutoAsm(Properties.Resources.script, true, 0);

  34.             }
  35.             else
  36.             {
  37.                 label2.Text = "";
  38.                 CEAutoAsm(Properties.Resources.script, false, 0);
  39.             }

  40.         }

  41.         private void checkBox2_CheckedChanged(object sender, EventArgs e)
  42.         {
  43.             if (checkBox2.Checked)
  44.             {
  45.                 CEAutoAsm(Properties.Resources.script2, true, 0);


  46.             }
  47.             else
  48.             {
  49.                 CEAutoAsm(Properties.Resources.script2, false, 0);
  50.             }
  51.         }
複製代碼
補充:CE數據已經從resources建立,並可以正常使用呼叫,所以不太可能是數據寫錯的問題
作者: smilelin0419    時間: 2023-8-3 20:13
現在 X64 的楓谷 「好像」不能用ceautoassembler.dll (?)
有請專業的來回答 @qwas963563

作者: u11334342    時間: 2023-8-3 21:44
smilelin0419 發表於 2023-8-3 20:13
現在 X64 的楓谷 「好像」不能用ceautoassembler.dll (?)
有請專業的來回答 @qwas963563
  ...

對對我現在就是猜CEautoassembler現在不能用,如果用64位元編譯程式就會報錯,用32位元就沒事但是數據沒反應..
作者: qwas963563    時間: 2023-8-4 19:14
u11334342 發表於 2023-8-3 21:44
對對我現在就是猜CEautoassembler現在不能用,如果用64位元編譯程式就會報錯,用32位元就沒事但是數據沒 ...

https://github.com/fenix01/cheatengine-library
用這個就好辣
複製貼上而已




歡迎光臨 冰楓論壇 (https://bingfong.com/) Powered by 冰楓