Tag: winapi

在C#中禁用屏幕保护程序和电源选项

我正在用C#编写一个播放电影的应用程序。 我需要弄清楚如何使用C#禁用屏幕保护程序和电源选项。 我知道Windows SDK API有一个名为SetThreadExecutionState()的函数可用于执行此操作,但是,我不知道是否有更好的方法来执行此操作。 如果没有,我如何将此function合并到C#中?

多个键盘和低级挂钩

我有一个系统,我有多个键盘,真的需要知道键击来自哪个键盘。 解释设置: 我有一个普通的PC和USB键盘 我有一个带有一些硬键的外部VGA屏幕 硬键映射为标准USB键盘,发送有限数量的键码(F1,F2,Return,+和 – ) 我有一个低级钩子(在C#中,但实际上调用了Win32function),即使我的应用程序没有聚焦,也可以处理输入。 问题是当使用普通键盘时,应用程序拾取的一些映射键码在外部屏幕上被驱动。 外部屏幕发送并用于确认的其中一个按键是VK_RETURN。 除非我能够识别“设备”并对其进行过滤,否则用户可能正在执行操作并在甚至不看的屏幕上确认它们。 我怎么知道哪个键盘负责按键?

.NET 3.5中的RegistryKey.OpenBaseKey有哪些替代方法?

我一直在使用安装程序包并使用RegistryKey.OpenBaseKey来处理自定义操作,这些操作可以打开和从64位注册表添加/删除密钥或从MSI包中删除32位注册表,但这需要我在运行我的安装程序之前,使用引导程序或其他东西在目标计算机上安装.NET Framework 4,因为OpenBaseKey仅在.NET Framework 4中引入。理想情况下,我想仅针对.NET Framework 3.5并且仍然能够修改OpenBaseKey中的64位或32位注册表配置单元; 然后我不需要.NET 4和安装它的开销。 对于那些不想让.NET 4成为先决条件的人来说, OpenBaseKey还有其他选择吗? 可能是像P /调用某种WinAPI方法这样的东西吗? 我不确定它会采取什么措施。

自由resize处理无边框格式C#

我正在尝试制作从工具栏中弹出的无边框表单。 我希望用户能够抓住右下角(“resize句柄”)并能够调整表单大小,但无法以任何其他方式调整表单大小或重新定位。 我听说我可以拦截发送到表单的WM_NCHITTEST消息并将其结果设置为HTBOTTOMRIGHT ,这将让操作系统处理表单的重新resize,就像它有一个相当大的帧一样。 我的想法是检测鼠标指针是否已进入我在角落中定义的框,如果它已经,则返回HTBOTTOMRIGHT结果。 这并不像我预期的那样有效。 我能够拦截消息,但似乎只有当用户将鼠标光标放在窗体的1px粗边框上时才会发送消息。 这意味着它可以按照我想要的方式工作,如果你非常精确地将光标定位在右下角。 这是我的WndProc覆盖: protected override void WndProc(ref Message m) { const UInt32 WM_NCHITTEST = 0x0084; const UInt32 HTBOTTOMRIGHT = 17; const int RESIZE_HANDLE_SIZE = 40; bool handled = false; if (m.Msg == WM_NCHITTEST) { Size formSize = this.Size; Point screenPoint = new Point(m.LParam.ToInt32()); Point clientPoint = this.PointToClient(screenPoint); Rectangle hitBox […]

更改其他进程的键盘布局

我正在用C#编写一个在后台运行的程序,并允许用户使用热键在活动窗口中切换键盘布局。 (Windows仅支持CTRL + SHIFT和ALT + SHIFT ) 我正在使用RegisterHotKey来捕获热键,它运行正常。 问题是我找不到任何API来改变聚焦窗口的键盘布局。 ActivateKeyboardLayout和LoadKeyboardLayout只能更改调用线程的键盘布局。 有谁知道如何更改不同线程的键盘布局(语言栏的方式)?

外部应用程序中文本框的SetText。 Win32 API

使用Winspector我发现我要更改的子文本框的ID是114.为什么这段代码不能更改TextBox的文本? [DllImport(“user32.dll”)] static extern IntPtr GetDlgItem(IntPtr hDlg, int nIDDlgItem); [DllImport(“user32.dll”)] public static extern int SendMessage(IntPtr hWnd, int msg, int Param, string s); const int WM_SETTEXT = 0x000c; private void SetTextt(IntPtr hWnd, string text) { IntPtr boxHwnd = GetDlgItem(hWnd, 114); SendMessage(boxHwnd, WM_SETTEXT, 0, text); }

获取进程路径时访问被拒绝

我试图通过pid获取进程路径,但我得到Win32Exception(访问ID被拒绝)。 代码如下所示: string path = Process.GetProcessById(pid).MainModule.FileName 我已经尝试使用OpenProcess和GetModuleFileNameEx但是OpenProcess返回0.我甚至尝试根据C#启用SeDebugPrivilege – 如何启用SeDebugPrivilege但它没有帮助。 上面的代码适用于大多数进程,但抛出SynTPHelper.exe(Synaptics Pointing Device Helper)的错误。应用程序在与我的代码相同的用户名下运行。 两者,我的应用程序和进程都以64位运行。 是否可以在不以管理员身份运行我的应用程序的情况下检索路径? 编辑 即使我没有以管理员身份运行它,任务管理器也可以“打开文件位置”。

如何在我的C#应用​​程序中获得与Spy ++类似的function?

我对开源密码管理器Keepass的插件感兴趣。 目前, Keepass目前根据窗口标题检测要为您复制/粘贴的密码。 这可以防止Keepass检测到根据当前站点(例如Chrome)未主动更新其窗口标题的应用所需的当前密码。 如何浏览与Spy ++工作方式类似的其他进程窗口元素(按钮,标签,文本框)? 当您运行Spy ++时,您可以将鼠标hover在其他程序窗口上,并获取有关各种控件(标签,文本框等)的各种属性的各种信息。 理想情况下,我希望我的Keepass插件通过遍历活动窗口的元素来增强当前窗口检测,以便找到匹配的帐户来复制/粘贴密码。 如何使用C#处理其他进程窗口元素并能够检索标签和文本框值?

如何为列表框中的每个项目设置不同的工具提示文本?

我有一个数据绑定到对象集合的列表框。 列表框配置为显示每个对象的标识符属性。 我想展示一个工具提示,其中包含特定于列表框中正在hover的项目的信息,而不是整个列表框的一个工具提示。 我在WinForms中工作,感谢一些有用的博客文章,这是一个非常好的解决方案,我想分享。 我有兴趣看看是否有任何其他优雅的解决方案来解决这个问题,或者在WPF中如何做到这一点。

如何获取本地网络计算机列表?

我正在尝试获取本地网络计算机的列表。 我尝试使用NetServerEnum和WNetOpenEnum API,但两个API都返回错误代码6118 (ERROR_NO_BROWSER_SERVERS_FOUND) 。 不使用本地网络中的Active Directory。 最奇怪的Windows资源管理器显示所有本地计算机没有任何问 是否还有其他方法可以获取局域网中的计算机列表?