C#窗体问题 我做了一个软件让他总是最前端显示。。但是我需要一个功能。。就是点击这个软件的位置。会自动点击这个软件窗口的下面的那个窗口的相对位置 而不是这个软件的位置不知道大家理解了没。。我找了好久都不知道如何实现 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 通过调用ShowDialog()方法使窗体获得焦点 鼠标穿透?private const uint WS_EX_LAYERED = 0x80000; private const int WS_EX_TRANSPARENT = 0x20; private const int GWL_STYLE = -16; private const int GWL_EXSTYLE = -20; private const int LWA_ALPHA = 0x2; [DllImport("user32")] private static extern uint SetWindowLong(IntPtr hwnd, int nIndex, uint dwNewLong); [DllImport("user32")] private static extern uint GetWindowLong(IntPtr hwnd, int nIndex); [DllImport("user32")] private static extern uint SetLayeredWindowAttributes(IntPtr hwnd, int crKey, int bAlpha, int dwFlags); public void SetThrough() { uint temp = GetWindowLong(this.Handle, GWL_EXSTYLE); uint oldGWLEx = SetWindowLong(this.Handle, GWL_EXSTYLE, WS_EX_LAYERED | WS_EX_TRANSPARENT); SetLayeredWindowAttributes(this.Handle, 0, 100, LWA_ALPHA); } YEah 没错 就是穿透我试试 谢谢了 using System.Runtime.InteropServices; #region API [DllImport("user32.dll")] static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo); [Flags] enum MouseEventFlag : uint { Move = 0x0001, LeftDown = 0x0002, LeftUp = 0x0004, RightDown = 0x0008, RightUp = 0x0010, MiddleDown = 0x0020, MiddleUp = 0x0040, XDown = 0x0080, XUp = 0x0100, Wheel = 0x0800, VirtualDesk = 0x4000, Absolute = 0x8000 } #endregion//以上代码放在Class 任意处 mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);//执行左键按下 mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);//执行左键松开//完成一个单击动作//之后执行以上代码便可模似鼠标单击一次 void Form1_Click(object sender, EventArgs e) { int x = Control.MousePosition.X - this.Left; int y = Control.MousePosition.Y - this.Top; MessageBox.Show(x.ToString()+ ','+y.ToString()); } 获取相对窗体的坐标 循环字符串拼接问题。。。救急,谢谢!!~~ byte转为string 乱码 通过索引器获得容器总的元素,但是不能立即修改,求解! C#中怎样改变splitcontainer中拖动条的背景颜色(也就是splitterwidth的背景颜色) SQL 查询语句怎么写? 如何获取系统时间改变(service程序)? 存储过程中能不能写循环语句!急!进进! C#中通过组件SQLDMO来强制恢复数据库 紧急求助:控件截图。 VS2012 窗体 代码 分步调试可以运行 但是直接运行没有结果 新手求解答 C#中控件怎么按窗口比例改变大小??? System.Net.Mail发送邮件老是异常不成功
private const int WS_EX_TRANSPARENT = 0x20;
private const int GWL_STYLE = -16;
private const int GWL_EXSTYLE = -20;
private const int LWA_ALPHA = 0x2;
[DllImport("user32")]
private static extern uint SetWindowLong(IntPtr hwnd, int nIndex, uint dwNewLong);
[DllImport("user32")]
private static extern uint GetWindowLong(IntPtr hwnd, int nIndex);
[DllImport("user32")]
private static extern uint SetLayeredWindowAttributes(IntPtr hwnd, int crKey, int bAlpha, int dwFlags); public void SetThrough()
{
uint temp = GetWindowLong(this.Handle, GWL_EXSTYLE);
uint oldGWLEx = SetWindowLong(this.Handle, GWL_EXSTYLE, WS_EX_LAYERED | WS_EX_TRANSPARENT);
SetLayeredWindowAttributes(this.Handle, 0, 100, LWA_ALPHA);
}
#region API [DllImport("user32.dll")]
static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
[Flags]
enum MouseEventFlag : uint
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
XDown = 0x0080,
XUp = 0x0100,
Wheel = 0x0800,
VirtualDesk = 0x4000,
Absolute = 0x8000
} #endregion//以上代码放在Class 任意处 mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);
//执行左键按下
mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
//执行左键松开//完成一个单击动作//之后执行以上代码便可模似鼠标单击一次
{
int x = Control.MousePosition.X - this.Left;
int y = Control.MousePosition.Y - this.Top;
MessageBox.Show(x.ToString()+ ','+y.ToString());
} 获取相对窗体的坐标