得到窗口句柄后把窗口关了或者移动C#

得到窗口句柄后把窗口关了或者移动C#,第1张

移动的

[DllImport("user32.dll", EntryPoint = "SendMessage")]

public static extern int SendMessage(int hWnd, int wMsg,int wParam, int IParam)

[DllImport("user32.dll", EntryPoint = "ReleaseCapture")]

public static extern int ReleaseCapture()

public const int WM_SysCommand = 0x0112

public const int SC_MOVE = 0xF012

public static void MoveForm(int pr)

ReleaseCapture()

SendMessage(pr, WM_SysCommand, SC_MOVE,0)

}

SendMessage是窗口行为一个外部定义的函数,没有user32.dll可以去下个,不过开发环境都自带了

需要移动的地方就调用

MoveForm(this.Handle.ToInt32())

this.Handle就是当前窗口句柄

给点分吧...

窗口处理函数中加入WM_MOUSEMOVE消息,然后编写鼠标消息处理函数OnMouseMove,当然,鼠标消息不止这一个,具体请查看msdn

键盘:添加WM_KEYDOWN/WM_KEYUP/WM_CHAR消息,这三个消息的具体请查看msdn,然后就可以编写消息消息处理函数了!

句柄(HANDLE)不是C#中的概念,而是win32 API中的。

C#中常通过DllImport的的方式获取窗体或其它对象的句柄。

句柄可以理解为用于标识内存中的一个“资源”,这些资源如:文件(file)、内存块(block of memory)、菜单(menu)、控件(control)、窗体(window)等等。 *** 作系统通过句柄来定位核心对象和系统资源。

有些人会认为句柄就是指针,其实句柄与C/C++中的指针是完全不同的两个概念。句柄仅仅是一个32位整数,在WIN32中用于管理某个系统或进程的对象,可以理解为对象的“索引”(相当于公民的身份z(ID)一样,一个身份z标识唯一一个对象),这个索引更像是一种映射关系(从句柄到对象指针的映射),而不是纯粹意义上的“指向对象的地址”。

而指针则要相对直观一些,它直接对应着一个数据在内存中的地址,得到了指针就可以自由地修改该地址中的数据。Windows系统为了安全起见,并不希望普通程序轻易修改其内部数据结构,所以Windows给每个使用GlobalAlloc等函数声明的内存区域注册登记一个句柄,平时你只是在调用API函数时利用这个句柄间接访问某个内存区域。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11925911.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存