要做这么一个功能:鼠标左键单击一个窗体,然后这个窗体从屏幕的左边滑到右边,其实就是一个窗体滑动的动画。这个窗体在被单击的时候,会调用一个.exe文件,现在就是要求作这个exe。
已知条件:被控制窗体的句柄。
限制:最好使用SendMessage和PostMessage来控制窗体,当然其他的API也可以使用。只能使用C#编写这个exe。MSDN读了3天也没有解决,对Windows的API实在没有天赋,求教~

解决方案 »

  1.   

    你的需求是不是这样:1.用C#编写一个exe
    2.启动这个exe, 拦截鼠标消息
    3.检测到wm_mouseleftdown|wm_mouseleftup消息以后,获取foregroudwindow的handle
    4.将这个window位置由左滑动至右边
      

  2.   

    如果是像我说的那种需求.
    其实你直接调用user32.dll里面的SetWindowPos就行了.如果你非得要用SendMessage,那么就是发WM_WindowPosChanging这个消息.
      

  3.   

    有些技术上的问题,要求这个问题是通过模拟鼠标拖动来完成这个效果的,也就是说通过发送鼠标消息来拖动窗体,不知道能不能够办到。但是不能够使用SetCursorPos和MouseEvent来完成,因为这样就“劫持”了用户的鼠标了
      

  4.   

    模拟鼠标拖动?是要鼠标跟着移动还是说只显示虚线框就行了?如果要有鼠标跟着移动那明显只有劫持鼠标,使用SetCaptrue函数.如果只是像"有鼠标拖动"一样显示一个虚线框,鼠标本身并不跟着移动,那么发送WM_Moving消息.
      

  5.   

    就是需要这样一个虚线框,能给一个完整的实例么?我对那几个wParam和lParam比较模糊,发出去的消息总是会出现异常
      

  6.   

    恩,既然你对Win32不熟悉,那么用.Net的方法好了,就直接在桌面上绘虚线框.
    下面是一个在桌面绘制虚线框的例子,你自己稍加改动即可.using System;
    using System.Collections.Generic;
    using System.Runtime.InteropServices;
    using System.Drawing;public class MyClass
    {
       [DllImport("user32.dll")]
       public static extern IntPtr GetDesktopWindow();
       [DllImport("user32.dll")]
       public static extern IntPtr GetForegroundWindow();
       [DllImport("user32.dll")]
       public static extern IntPtr GetWindowDC(IntPtr hwnd);
       [DllImport("user32.dll")]
       public static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc); public static void Main()
    {
            IntPtr desktop = GetForegroundWindow();
                IntPtr hDC=GetWindowDC(desktop);
                using (Pen pen = new Pen(Color.DarkGray, 1))
                {
                    pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
                    using (Graphics g=Graphics.FromHdc(hDC))
                    {
                        g.DrawRectangle(pen, 100,100,100,100);
                    }
                }
                ReleaseDC(desktop, hDC);

    }
    }
      

  7.   

    谢谢。但是这个还是不符合我的需要,我还是想要WM_WindowPosChanging的方法
      

  8.   

    其实不需要作钩子
    你不是滑动嘛?movewindow这个函数就能解决你的问题了关于postmessage和sendmessage两个函数,如果想了解的更详细,我可以教你.他们作用是一样的,本质却不同.
      

  9.   

    没有说要做钩子。只是想利用postMessage、sendMessage来移动一下窗口,可以办到吗?
      

  10.   

    1, 自定义一个私有消息值
    2,使用PostMessage/sendMessage发送这个消息
    3,定义该私有消息的处理方法,在该方法中实现窗体移动
      

  11.   

    对调用Windows里的dll 调用有点了解了