none
调用API返回GetLastWin32Error错误码 : 183 RRS feed

  • 问题

  • 请教一个问题:如题,我在Win10专业版本,x64的电脑上运行我的软件,我的软件需经常频繁调用以下函数:

    [PermissionSet(SecurityAction.Assert, Name = "FullTrust")] private static void SendMouseInput(int x, int y, int data, NativeMethods.SendMouseInputFlags flags) { try { PermissionSet permissions = new PermissionSet(PermissionState.Unrestricted); permissions.Demand(); int intflags = (int)flags; if ((intflags & (int)NativeMethods.SendMouseInputFlags.Absolute) != 0) { // Absolute position requires normalized coordinates. NormalizeCoordinates(ref x, ref y); intflags |= NativeMethods.MouseeventfVirtualdesk; } NativeMethods.INPUT mi = new NativeMethods.INPUT(); mi.type = NativeMethods.InputMouse; mi.union.mouseInput.dx = x; mi.union.mouseInput.dy = y; mi.union.mouseInput.mouseData = data; mi.union.mouseInput.dwFlags = intflags; mi.union.mouseInput.time = 0; mi.union.mouseInput.dwExtraInfo = new IntPtr(0); //mi.union.mouseInput.dwExtraInfo = FindWindow("OpusApp", null); Thread.Sleep(50); WriteLog.WriteLogPack("mouseInput.dwFlags鼠标事件 : " + intflags); if (NativeMethods.SendInput(1, ref mi, Marshal.SizeOf(mi)) == 0) { WriteLog.WriteLogPack("GetLastWin32Error错误码 : " + Marshal.GetLastWin32Error()); WriteLog.WriteLogPack("SendMouseInput异常信息 : " + new Win32Exception(Marshal.GetLastWin32Error())); //throw new Win32Exception(Marshal.GetLastWin32Error()); } } catch (Exception ex) { WriteLog.WriteLogPack("SendMouseInput : " + ex.ToString()); MessageBox.Show(ex.Message); } }


    有调用API函数如下:

    [DllImport("user32.dll", SetLastError = true)]
     internal static extern int SendInput(int nInputs, ref INPUT mi, int cbSize);

    在360安全卫士没有打开(即已经退出)的时候此API是正常执行的,一旦打开360安全卫士

    NativeMethods.SendInput(1, ref mi, Marshal.SizeOf(mi)) == 0成立,

    日志打印的GetLastWin32Error错误码 :183SendMouseInput异常信息 :System.ComponentModel.Win32Exception (0x80004005): 当文件已存在时,无法创建该文件。

    不知道是什么原因导致的,请大神们解答一下。



    2017年11月27日 14:51

答案

  • 通过各种资料查询到原因为360对api有屏蔽处理。

    然后通过对软件的测试,在有360和不启动360两种情况下,不启动正常,启动不正常;可以确定是360对API执行有影响。

    • 已标记为答案 xxyxxb2080 2017年12月5日 7:58
    2017年12月5日 7:58

全部回复

  • Hi xxyxxb2080,

    欢迎在MSDN论坛发帖。

    根据你的错误信息,应该是文件已经存在了,所以再创建的时候,就会失败。 你的代码里面有没有先去检查这个文件是否存在?

    或者是360创建了这个文件,我们不知道? 下面是微软官方给出的错误解释。

    ERROR_ALREADY_EXISTS
    183 (0xB7)

    Cannot create a file when that file already exists.

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年11月28日 8:42
    版主
  • @Hart Wang,感谢您的回答;我调用的这个函数不是执行创建文件的操作,而是执行鼠标事件,比如执行单击双击右键事件等等。所以不知道在哪儿判断是否创建文件。
    2017年11月28日 12:27
  • Hi,

    是不是启动360就会出现这个错误? 如果把360关了,还会出现这个错误吗?

    感觉像是360私底下做了什么事情。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年11月30日 5:48
    版主
  • 通过各种资料查询到原因为360对api有屏蔽处理。

    然后通过对软件的测试,在有360和不启动360两种情况下,不启动正常,启动不正常;可以确定是360对API执行有影响。

    • 已标记为答案 xxyxxb2080 2017年12月5日 7:58
    2017年12月5日 7:58