u11334342 發表於 2023-8-3 19:00:40

C#寫入CE數據請益

小弟因為私服不能使用CE,所以開始研究如何用其他方式寫入數據,目前嘗試使用C#來引用CE的DLL來達到CE數據的功能,但是遇到一個問題,雖然已經可以得到遊戲的視窗ID與PID,但是數據開關都沒反應,想請大神們幫小弟解惑QQ
以下是我引用DLL的程式碼:
        public extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
        
        public extern static int GetWindowThreadProcessId(IntPtr hWnd, out int ID);


        
        public static extern int OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);

        
        public extern static int CEInitialize
            (
                int ngPassedPID,
                int Phandle
            );
        
        public extern static bool CEAutoAsm
            (
                string Script,
                bool AllocID,
                int Alloc
            );再來是偵測PID與開啟數據的程式碼:private void button1_Click(object sender, EventArgs e)
        {
            IntPtr maindHwnd = FindWindow(null, "MapleStory");
            const int PROCESS_ALL_ACCESS = 0x1F0FFF;
            if (maindHwnd != IntPtr.Zero)
            {
                int ID;
                int Process;
                MessageBox.Show("鎖定成功!");
                GetWindowThreadProcessId(maindHwnd, out ID);
                Process = OpenProcess(PROCESS_ALL_ACCESS, false, ID);
                label3.Text = maindHwnd.ToString();
                label4.Text = ID.ToString();
                if (ID != 0)
                {
                    CEInitialize(ID, Process);
                }
            }
            else
            {
                MessageBox.Show("鎖定失敗!");
            }
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

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

            }
            else
            {
                label2.Text = "";
                CEAutoAsm(Properties.Resources.script, false, 0);
            }

        }

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


            }
            else
            {
                CEAutoAsm(Properties.Resources.script2, false, 0);
            }
        }補充:CE數據已經從resources建立,並可以正常使用呼叫,所以不太可能是數據寫錯的問題

smilelin0419 發表於 2023-8-3 20:13:46

現在 X64 的楓谷 「好像」不能用ceautoassembler.dll (?)
有請專業的來回答 @qwas963563

u11334342 發表於 2023-8-3 21:44:42

smilelin0419 發表於 2023-8-3 20:13 static/image/common/back.gif
現在 X64 的楓谷 「好像」不能用ceautoassembler.dll (?)
有請專業的來回答 @qwas963563
  ...

對對我現在就是猜CEautoassembler現在不能用,如果用64位元編譯程式就會報錯,用32位元就沒事但是數據沒反應..

qwas963563 發表於 2023-8-4 19:14:00

u11334342 發表於 2023-8-3 21:44 static/image/common/back.gif
對對我現在就是猜CEautoassembler現在不能用,如果用64位元編譯程式就會報錯,用32位元就沒事但是數據沒 ...

https://github.com/fenix01/cheatengine-library
用這個就好辣
複製貼上而已
頁: [1]
查看完整版本: C#寫入CE數據請益