//汇编代码
KeyBoardProc proc VKEY:UINT
LOCAL bScan:DWORD
invoke MapVirtualKey,VKEY,0
mov bScan,eax
mov ebx,VKEY
sub bl,91
invoke keybd_event,ebx,bScan,0,0
invoke SleepEx,10,TRUE
invoke keybd_event,ebx,bScan,KEYEVENTF_KEYUP,0
invoke Sleep,10
ret//C#代码
        private void SendKeys(uint keys)
        {
            uint bScan = MapVirtualKey(keys, 0);
            uint k = (keys - 91) & 0x000000ff;
            keybd_event(k, bScan, 0, 0);
            SleepEx(10, true);
            keybd_event(k, bScan, 2, 0);
            Sleep(10);
        }
都是模拟按键. 汇编代码成功. C#代码失败.. 纠结.
调试C#代码 和汇编代码
发现keybd_event函数传递的值完全一样.为什么会出现不同结果??
高手呢? 高高手呢? 来看看吧.

解决方案 »

  1.   

    我是个菜鸟。
    技持楼主sjzlxd
    (最近老迷糊)
      

  2.   

    c#当然“无辜”啦!比如说,如果别人跟你讨论一个使用c#的项目源代码中的设计问题,你给人家说“我还会写几行汇编语句呢!”以此证明你的c#设计是正确的,那么你的老板也就要昏倒了。那么我们就单单讨论c#,不是也很好吗?!
      

  3.   

    [DllImport("user32.dll")]
            public static extern uint MapVirtualKey(uint uCode, uint uMapType);        [DllImport("User32.dll", EntryPoint = "keybd_event")]
            public static extern void keybd_event(uint bVk, uint bScan, Int32 dwFlags, Int32 dwExtraInfo);        [DllImport("kernel32 .dll")]
            public static extern uint SleepEx(uint dwMilliseconds, bool bAlertable);        [DllImport("kernel32 .dll")]
            public static extern uint Sleep(uint dwMilliseconds);
    刚才忘记贴函数声明了.我有现成的汇编代码, 我用RadASM调试的
      

  4.   


    都是调用同一个api 都是传递一样的参数. 为什么汇编的有效果 C#的没效果? 
    现在讨论的是这个问题.
      

  5.   

    ------------------Quote=引用 4 楼 sp1234 的回复:----------------------

    c#当然“无辜”啦!
    比如说,如果别人跟你讨论一个使用c#的项目源代码中的设计问题,你给人家说“我还会写几行汇编语句呢!
    不知楼上要表达什么意思,
    是叫楼主不要搞汇编吗?
      

  6.   

    大哥们., 我错了.. 我找到问题了 ,声明上多了个空格. 刚才Try Catch了 没显示出来.[DllImport("kernel32 .dll")]
    在这里kernel32后面多了个空格... 丢人啊.. 无语了. 埋头睡觉了.