我想写一个虚拟键盘,就像触摸屏电脑的Windows屏幕键盘一样.但是我的虚拟键盘在使用正在使用的应用程序中窃取焦点时遇到了问题.即使用户点击它,Windows屏幕键盘也会将焦点集中在当前应用程序上.有没有办法在C#中使用Windows窗体做同样的事情?
我现在唯一能做的就是将键盘事件发送到特定的应用程序,例如以下代码中的记事本.如果我可以使表单不可聚焦,我可以使用GetForegroundWindow获取当前聚焦窗口.
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
private void button1_Click(object sender, EventArgs e)
{
IntPtr calculatorHandle = FindWindow("notepad", null);
SetForegroundWindow(calculatorHandle);
SendKeys.SendWait("111");
}
Run Code Online (Sandbox Code Playgroud)
有没有办法可以做到这一点?有没有更好的方法让表格将键盘事件发送到正在使用的应用程序?
谢谢!!
我想在C#中创建一个无法接受焦点的表单,即当我单击表单上的按钮时,焦点不会从当前具有焦点的应用程序中被盗.
有关此示例,请参阅Windows屏幕键盘.请注意,单击按钮时,焦点不会从您当前使用的应用程序中获取.
我该如何实现这种行为?
更新:
事实证明它就像覆盖CreateParams属性和添加WS_EX_NOACTIVATE到扩展窗口样式一样简单.谢谢你指点我正确的方向!
不幸的是,这会带来不良的副作用,它会因形状移动而混乱,即您仍然可以在屏幕上拖放窗体,但拖动时窗口的边框不会显示,因此难以精确定位.
如果有人知道如何解决这个问题,将不胜感激.
我正在设计一个始终在屏幕上,大约20%不透明的窗口.它被设计成一种状态窗口,因此它始终位于顶部,但我希望人们能够通过窗口点击下面的任何其他应用程序.我现在输入的是这个SO帖子顶部的不透明窗口:
看到灰色吧?这会阻止我在此刻输入标签框.
(这个问题是基于进一步调查这个其他的问题,但不相同的问题,这是关于绘画的问题非常具体的问题.)
我正在尝试在目标窗口上绘制一个重叠的透明表面,问题是我不知道如何将其涂成透明的,所以到目前为止我的表面是黑色的,我看不清楚正确的方法来清除黑色下面代码中该表面的颜色.
我读过有关pixelformats和alphamodes的内容,但是,似乎我不能使用AlphaMode.Straight所谓的允许透明度.
我知道一个可以做到这一点的免费软件应用程序,它的名字是TurboHUD(一个在游戏客户端的窗口上绘制透明表面以绘制对象的应用程序,即HUD).说实话,也许是荒谬的:我试图从两年多前开始做到这一点,我仍然不知道如何通过做透明度来开始这样做,我需要开始在透明表面上绘制物体.
我做错了什么?这个示例代码是用VB.NET编写的,但我在C#中也接受了一个解决方案.
Imports SharpDX
Imports SharpDX.Direct2D1
Imports SharpDX.Direct3D
Imports SharpDX.DXGI
Imports SharpDX.Mathematics.Interop
Imports SharpDX.Windows
Public NotInheritable Class Form1 : Inherits Form
Private factory As New Direct2D1.Factory(Direct2D1.FactoryType.SingleThreaded)
Private render As WindowRenderTarget
Private renderProps As HwndRenderTargetProperties
Private renderThread As Thread = Nothing
Private Sub Form1_Load() Handles MyBase.Shown
Dim hwnd As IntPtr = Process.GetProcessesByName("notepad").Single().MainWindowHandle
Me.renderProps = New HwndRenderTargetProperties()
Me.renderProps.Hwnd = hwnd
Me.renderProps.PixelSize = New Size2(1920, 1080)
Me.renderProps.PresentOptions = PresentOptions.None
Me.render = New WindowRenderTarget(Me.factory, New …Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio中的C#,我正在尝试制作一个透明的表单 - 完全透明,但不是点击 - 不会使标题栏透明,所以还有一些东西要移动(不可见)窗口周围和(最重要的是)关闭它.
如果窗口有可见边框也很好,但这可能是一个单独的问题.