社区
C#
帖子详情
C#中如何获得HWND(窗口句柄)?
wwfttelne
2003-10-18 06:02:38
hwnd在Win32 API 中,几乎总是被用到。
如何在C#中得到自己的hwnd?
如果可以在C#中调用某个Win32 API 也行。
可是我也没有找到。
请高手帮忙。
...全文
4537
17
打赏
收藏
C#中如何获得HWND(窗口句柄)?
hwnd在Win32 API 中,几乎总是被用到。 如何在C#中得到自己的hwnd? 如果可以在C#中调用某个Win32 API 也行。 可是我也没有找到。 请高手帮忙。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
solomon2002
2004-02-14
打赏
举报
回复
郁闷
ArLi2003
2003-11-08
打赏
举报
回复
倒分嫌疑....
layershow
2003-11-04
打赏
举报
回复
好贴
佩服呀佩服
每人应该鼓掌三下
ArLi2003
2003-10-21
打赏
举报
回复
其中的 IEXPLORE 是进程名,可以换成需要的
int32 数组是因为可能有多个的IE 进程
ArLi2003
2003-10-21
打赏
举报
回复
楼主只是想要当前窗口啊,你的问题应该开新贴,嘿嘿,答案如下:原理是一样的
Process[] processes = Process.GetProcessesByName("IEXPLORE");
Int32[] hwnd_IE = new Int32[processes.Length];
for (int i=0; i<processes.Length; i++) {
hwnd_IE[i] = processes[i].MainWindowHandle.ToInt32();
}
zhoutiance
2003-10-20
打赏
举报
回复
这些都是获得当前窗口的句柄吧?
如果想获得其他窗口的该怎么办?比如说某个IE窗口的?
ArLi2003
2003-10-20
打赏
举报
回复
Int32 hwnd_fromclass = this.Handle.ToInt32();
Int32 hwnd_Process = System.Diagnostics.Process.GetCurrentProcess().Handle.ToInt32();
不过也可以将API 直接声明成 IntPtr 类型
hjwzr
2003-10-20
打赏
举报
回复
up
Tsiah
2003-10-19
打赏
举报
回复
窗体好象有个叫HWND的属性吧……
不是好像,本来就是有的。
easydone
2003-10-19
打赏
举报
回复
this.Handle不行吗?
weifenluo
2003-10-19
打赏
举报
回复
Control.Handle属性返回的就是控件的窗口句柄。
layershow
2003-10-19
打赏
举报
回复
Handle 属性就是句柄 IntPtr型
引用API时 HWND参数也写成IntPtr
关于IntPtr可以看看MSDN
orcale
2003-10-19
打赏
举报
回复
findmessage
BLGT
2003-10-18
打赏
举报
回复
窗体好象有个叫HWND的属性吧……
jasonhrs
2003-10-18
打赏
举报
回复
需要用到属性
好以下属性调用api函数使喇叭响
using System.Runtime.InteropServices;
[DllImport("user32.dll")]
public static extern bool MessageBeep(uint uType);
MessageBeep(1);//PC喇叭响
zeax
2003-10-18
打赏
举报
回复
顶,关注
losal
2003-10-18
打赏
举报
回复
我也在找
关注!
窗口
控件 获取:
窗口
句柄
,
窗口
类名,
窗口
标题,进程ID,
窗口
ID,程序路径
HWND
hWnd
= FindWindow(L"SandMap (64-bit, PCD3D_SM5))", NULL);//获取
窗口
句柄
SetWindowLong(
hWnd
, GWL_STYLE, WS_VISIBLE);//隐藏边框 MoveWindow(
hWnd
, PosX, PosY, 800, 800, true);//设置位置及分辨率
【VS2010
C#
代码】获取鼠标所在位置的
窗口
句柄
名称和文字及位置
Microsoft Visual Studio 2010做的
C#
获取鼠标所在位置的
窗口
句柄
名称和文字及位置实例,主要代码: [StructLayout(LayoutKind.Sequential)]//定义与API相兼容结构体,实际上是一种内存转换 public struct POINTAPI { public int X; public int Y; } [DllImport("user32.dll", EntryPoint = "GetCursorPos")]//获取鼠标坐标 public static extern int GetCursorPos( ref POINTAPI lpPoint ); [DllImport("user32.dll", EntryPoint = "WindowFromPoint")]//指定坐标处窗体
句柄
public static extern int WindowFromPoint( int xPoint, int yPoint ); [DllImport("user32.dll", EntryPoint = "GetWindowText")] public static extern int GetWindowText( int
hWnd
, StringBuilder lpString, int nMaxCount ); [DllImport("user32.dll", EntryPoint = "GetClassName")] public static extern int GetClassName( int
hWnd
, StringBuilder lpString, int nMaxCont ); [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetWindowRect(IntPtr
hWnd
, ref RECT lpRect); [StructLayout(LayoutKind.Sequential)] public struct RECT { public int Left; //最左坐标 public int Top; //最上坐标 public int Right; //最右坐标 public int Bottom;//最下坐标 }
C#
获取进程的主
窗口
句柄
的实现方法
通过调用Win32 API实现。 代码如下:public class User32API{ private static Hashtable processWnd = null; public delegate bool WNDENUMPROC(IntPtr
hwnd
, uint lParam); static User32API() { if (processWnd == null) { processWnd = new Hashtable(); } } [DllImport(“user
C#
窗体实现热键控制
窗口
隐藏显示
C#
窗体实现热键控制
窗口
隐藏显示 主要类文件 class HotKey { //如果函数执行成功,返回值不为0。 //如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。 [DllImport("user32.dll", SetLastError = true)] public static extern bool RegisterHotKey( IntPtr
hWnd
, //要定义热键的
窗口
的
句柄
int id, //定义热键ID(不能与其它ID重复) KeyModifiers fsModifiers, //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效 Keys vk //定义热键的内容 ); [DllImport("user32.dll", SetLastError = true)] public static extern bool UnregisterHotKey( IntPtr
hWnd
, //要取消热键的
窗口
的
句柄
int id //要取消热键的ID ); //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值) [Flags()] public enum KeyModifiers { None = 0, Alt = 1, Ctrl = 2, Shift = 4, WindowsKey = 8 }
如何获取其它进程
中
窗口
的
窗口
过程
曾经以为获取一个
窗口
的
窗口
过程很简单,不就是GetWindowLong一下吗,看spyxx获取的多么顺利。后来才发现原来不是这么简单。获取本进程内
窗口
的
窗口
过程确实很简单 ,直接调用GetWindowLong(
hWnd
,GWL_WNDPROC)就可以了(注意,根据
窗口
是否是Unicode的,你要判断是调用GetWindowLongA,还是GetWindowLongW,可以用IsWindowUnicode来判断), 但是GetWindowLong这个函数内部会检查调用进程和该
窗口
句柄
是否属于同一进程,如果不是,就简单的返回0了。
C#
110,499
社区成员
642,566
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章