求一个将c#代码一键生成exe的工具

如题。我让chatgpt帮忙写一个功能简单的小程序,代码只有几十行,但是安装vs,还有net sdk都试了,还是没学会使用。太复杂的软件界面眼花缭乱,功能都找不到在哪。

在线的编译器也试了不少,都只能在线运行,但没有生成exe的功能。

所以想求一个比较简单的工具,能像记事本一样简单,把代码复制进去,点击 生成exe ,就能直接生成。

这是个能用cmd调用该exe直接控制鼠标在屏幕上点击的小工具。下面是代码,希望有大佬能帮我生成一下,谢谢。用c#是因为gpt推荐的。它说这个需求用c#最高效。因为我确实不会编程,只是需要这个小功能,

using System.Runtime.InteropServices;
using System.Windows.Forms; // 引用System.Windows.Forms以使用Cursor.Position

class Program
{
    // Win32 API 声明
    [DllImport("user32.dll")]
    static extern bool SetCursorPos(int x, int y);

    [DllImport("user32.dll")]
    static extern int MapWindowPoints(IntPtr hWndFrom, IntPtr hWndTo, ref POINT lpPoints, uint cPoints);

    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr WindowFromPoint(int x, int y);

    [DllImport("user32.dll")]
    static extern IntPtr PostMessage(IntPtr hWnd, int Msg, UIntPtr wParam, UIntPtr lParam);

    [DllImport("user32.dll")]
    static extern IntPtr SendMessage(IntPtr hWnd, int Msg, UIntPtr wParam, UIntPtr lParam);

    [DllImport("gdi32.dll")]
    static extern IntPtr GetDC(IntPtr hWnd);

    [DllImport("user32.dll")]
    static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);

    [StructLayout(LayoutKind.Sequential)]
    struct POINT
    {
        public int X;
        public int Y;
    }

    private const int WM_LBUTTONDOWN = 0x0201; // 鼠标左键按下消息
    private const int WM_LBUTTONUP = 0x0202;   // 鼠标左键抬起消息
    private const int WM_RBUTTONDOWN = 0x0204; // 鼠标右键按下消息
    private const int WM_RBUTTONUP = 0x0205;   // 鼠标右键抬起消息
    private const int HWND_BROADCAST = 0xFFFF; // 发送消息到所有窗口

    static void Main(string[] args)
    {
        if (args.Length < 3)
        {
            Console.WriteLine("Usage: MouseClick <left|right> <X> <Y>");
            return;
        }

        string buttonType = args[0].ToLower();
        int X = int.Parse(args[1]);
        int Y = int.Parse(args[2]);

        // 根据DPI调整坐标
        ScaleCoordinates(ref X, ref Y);

        // 移动鼠标到指定位置
        SetCursorPos(X, Y);

        // 发送鼠标点击消息
        if (buttonType == "left")
        {
            SendMouseClick(WM_LBUTTONDOWN, WM_LBUTTONUP, X, Y);
        }
        else if (buttonType == "right")
        {
            SendMouseClick(WM_RBUTTONDOWN, WM_RBUTTONUP, X, Y);
        }
        else
        {
            Console.WriteLine("Invalid button type. Use 'left' or 'right'.");
        }
    }

    // 根据系统DPI设置调整坐标
    static void ScaleCoordinates(ref int x, ref int y)
    {
        float dpiScale = GetDpiScaleFactor();
        x = (int)(x * dpiScale);
        y = (int)(y * dpiScale);
    }

    // 获取DPI缩放因子
    static float GetDpiScaleFactor()
    {
        float dpiScale = 1.0f;
        try
        {
            using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
            {
                dpiScale = g.DpiX / 96f; // 96 DPI是Windows的默认值
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error getting DPI scale factor: " + ex.Message);
        }
        return dpiScale;
    }

    // 发送鼠标点击消息
    static void SendMouseClick(int downMsg, int upMsg, int x, int y)
    {
        PostMessage(IntPtr.Zero, downMsg, new UIntPtr(0), new UIntPtr(MAKELPARAM(x, y)));
        PostMessage(IntPtr.Zero, upMsg, new UIntPtr(0), new UIntPtr(MAKELPARAM(x, y)));
    }

    // Win32 API: 将逻辑坐标转换为物理坐标
    static void ConvertToPhysicalCoordinates(ref int x, ref int y)
    {
        IntPtr desktopHwnd = GetDC(IntPtr.Zero);
        POINT point = new POINT { X = x, Y = y };
        MapWindowPoints(desktopHwnd, IntPtr.Zero, ref point, 1);
        ReleaseDC(IntPtr.Zero, desktopHwnd);
        x = point.X;
        y = point.Y;
    }

    // Win32 API: MAKELPARAM宏
    static UIntPtr MAKELPARAM(int low, int high)
    {
        return new UIntPtr((uint)((low & 0xFFFF) | ((high & 0xFFFF) << 16)));
    }
}
在此处键入或粘贴代码

没有那么简单的事…我看你一点编程基础都没有,也没打算自己学,就别用c#了
我就问你,你那个c#代码是用老版net framework框架还是新版的 .Net ?如果这个问题你都回答不上来,那你真别用c#了

想简单就去用python呗,直接pyinstaller打包就是了,分分钟的事

2 个赞

生成exe也会报毒,用python吧

自动点击工具……这玩意不是很多现成的吗?干嘛要自己写

建议先去搜现成工具,再去问智障ai

建议更换aardio,小白式操作堪比易语言,入门级绝对够用,同时语法也略正规一些

C#编译用dotnet sdk就行了,又不是没有命令行用法。主要就是dotnet new创建项目,把代码写进去,之后dotnet build构建。
aardio那种一停止维护二作者比较抽象三不开源四极其小众的玩意还是建议别碰。

找不到按键可以用软件自带的搜索功能

1 个赞

建议直接用鼠标精灵,如果是AI生成的代码而自己一点都没有代码基础的话,要修改一些地方或者它给出代码有问题,调试会非常麻烦

有一些軟件,你查關鍵字"滑鼠錄製"就能找到了
還是建議不要重造輪子 (不介意的話另說

0基础用chatgpt写程序没那么简单的,别看网上一堆教程,实操的时候各种问题。gpt更适合拿来辅助,省的翻一些第三方库冗长的英文文档了

通常情况下. 你的电脑路径下会自带这么一个工具:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe

其中v4.0.30319 可能随系统不同略有不同. 关键在 csc.exe

只要系统里有这个, 就可以不用vs来编译c#代码.

基本语法如下:

csc test.cs

1 个赞

如果你没有编程基础,但又想自己完成一些小脚本,那我推荐你可以试试quicker可视模块化组合,难度不大,能完成的东西很多 且能引入c# python

1 个赞

没基础别碰C#,建议python和autohotkey。
GPT只能是辅助建议,写个EXCEL的宏都得来回搞几遍,完全没基础的还是去学一学或者用各种点击器,例如:按键精灵。

尝试过aardio,发现这个工具的文档比较简陋,试了一下还不如写C#……
如果有较完善的文档和更多示例源码那可以一试。

零基礎用 GPT 協同編程還是可行的
不過有其適合的人群,需具備基本的編程邏輯思維

然後態度一定要好,目標明確且口齒清晰
出問題了能根據所謂的編程邏輯去推演問題所在
然後客氣的請GPT幫你修正,一來一往,還是能寫出你想要的東西

就像我以前寫的程序,有一個BUG
我自己想修又覺得麻煩,因為還需要研究一番
但是我請GPT幫我改,它居然一下子就把BUG修掉了
省的我跑去翻查工具書還是啥的

用GPT解決問題的最大痛點是,它很會瞎掰
有時候礙於程序的基本框架,有些東西天然無法實現
但是使用者如果沒有察覺這點,問GPT到天荒地老
還是搞不出對的結果,這是需要注意的部分

2 个赞

你如果只是需要个exe的话,不如让chatgpt生成python代码了,然后打包就一行命令就行了

1 个赞

可以用dotnet script, 是c#的一个nuget包: https://github.com/dotnet-script/dotnet-script, 具体看Creating DLLs or Exes from a CSX file主题。可以简单的运行单文件, 也能一键打包为exe, 也支持引入其他nuget依赖。缺点是没有支持的编辑器, vsc官方的c#拓展最近重写更新之后不再支持script的csx文件

这个很搞笑哈哈。Win7 带的是 dotnot 3.5,而 Win10 带的是 dotnot 4.0.

所以发布一个 dotnot 程序,如果能在 Win7 里面运行,那么在 Win10 要安装 dotnot runtime,反之也需要在 Win7 里面安装 dotnot 4.0

确实可以用这个 csc 编译,但是程序大了就不方便。而且发布总不能发个源代码给用户吧?没有 exe 很不方便。

所以没事还是别碰这个 c# 了。

对于楼主来说, 他是为了解决自己的需求, 不涉及多个系统兼容性和运行库的问题.

不能因为运行库的原因, 就阻止楼主学习编程.

不论是哪种语言, 都有合适的用途和场景.

对于初学者, 我们更多的应该是鼓励. :fist:

初学者别走歪路啊。如果是科班的,学 cpp 去,如果是非科班的学 python 去。折腾 c# 折腾个几年才发现这东东没前途就挺浪费时间的。

cpp/java/python 这三门语言都属于没有太坡脚的语言。也就是说不会在一些地方特别弱,无论怎么努力都做不好的那种。在各种领域,就算做不好,也不算差。

这种语言最适合初学者见个世面。初学者入门以后会根据行业不同做很多事情。而 c# 会明显限制发挥非常不推荐。

首先你要能跑起来,至少使用 dotnet命令行环境的 , dotnet 可以搜搜命令一件编译成exe。