问题标签 [winforms-interop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 从低级鼠标钩 C# 返回的错误鼠标坐标
我正在构建一个 WPF 应用程序,其中涉及一些骇客,以便在同一渲染层上嵌入 Form 元素。本质上,我所做的是将表单呈现在屏幕外,并在 WPF 图像中制作表单的模型。我还有一个低级鼠标钩子,如果 WPF 应用程序的事件注定要用于 Form 模型,则它会从它们中窃取事件,而是使用 PostMessage(...) 将事件发送到隐藏的表单元素。
如果我从我的钩子程序返回一个非零值,指示吃掉事件(即使我仍然调用队列中的所有鼠标钩子),光标会停留在一个位置。我假设这是因为光标位置在事件未到达的某种 WPF 应用程序层中得到处理。
我认为完全可以防止 WPF 应用程序知道该事件,因为我可以自己设置光标位置——毕竟有坐标附加到鼠标事件。不幸的是,这些鼠标坐标似乎非常不正确。事实上,无论我的光标在哪里,我总是收到相同的坐标。
这是我的代码:
}
然后在 user.SystemMouseHookProc(...) 中,我打印出正确的光标位置,然后是鼠标钩子拉出的坐标,输出总是如下所示:
光标:523,578
{X=1985777551,Y=1985777602} //这个坐标永远不会改变
该输出显然是错误的。如何从鼠标钩中获取正确的鼠标坐标?
谢谢你。
PS这个解决方案来源于网上流行的一个。不幸的是,该解决方案无法满足我的需求,因此我不得不将其更改为这种形式。
winforms - 在通过 Interop 访问的表单上使用时,我们如何处理 DataGridView 不正确地失去焦点
我们发现了一个可能涉及 DataGridView 的错误。DataGridView 有一个属性 StandardTab,默认设置为 False。此默认设置意味着 TAB 键在网格内的单元格之间移动。当它到达网格中的最后一个单元格时,TAB 键将焦点移动到下一个控件。这是我们在项目中使用的设置。
DataGridView 连接到我们项目中的绑定源,这可能相关也可能不相关。
当 DataGridView 位于从基于 COM 的项目(在我们的例子中为 VB6)中显示的窗体上时,当用户尝试在网格中进行选项卡时,网格控件会失去焦点。如果您按住 tab 键,焦点将在表单上的其他控件之间循环,直到它返回到网格。当它返回到网格时,选定的单元格就是用户正在切换到的单元格。
因此,当用户从一个单元格移动到另一个单元格时,用户可以通过绕过表单上的其余控件来浏览所有单元格。这不会让用户满意。
我确实找到了一个似乎描述了这个问题的MSDN 论坛问题,但它的唯一答案并不是很有帮助。
我可以将此作为 Microsoft Connect 上的错误提交,但我怀疑他们是否会修复它。有没有办法在代码中处理这个问题?
c# - 桌面上的窗口/winforms 中最底部的窗口
我试图在启动时启动一个表单,并让它在我的应用程序运行的整个过程中一直作为背景。本质上,我想隐藏所有桌面图标并拥有空白背景。此外,当用户单击某些按钮时,我希望表单 BackColor 发生变化。
我搜索了一堆,我一直在寻找一半的解决方案。这是我迄今为止尝试过的:
创建了一个覆盖 WndProc 事件的 BackBaseForm,如果它WM_WINDOWPOSCHANGING
,我不调用base.WndProc(ref m)
,而是发送以下消息:
SetWindowPos(Handle, new IntPtr(1), 0, 0, this.width, this.height, SWP_NOZORDER);
但是,每当我单击表单时,它仍然会将其带到前面。我还尝试创建一个WINDOWPOS
结构,编组指向该结构的指针,然后修改该结构。我不认为这会改变lParam
消息中的实际情况。
c# - 在 Windows 窗体中托管 IDeskBand
我正在尝试在我自己的 WinForm 中从 Windows 任务栏中显示地址工具栏。{01E04581-4EEE-11d0-BFE9-00AA005B4383}
我可以获取地址栏 ( )的 CLSID ,并且可以获取IDeskBand
对它的引用。但是……然后呢?
我尝试将它托管在 中AxHost
,但地址工具栏不是 ActiveX 控件。我试过打电话
或者
以及各种其他接口及其方法,但我所做的一切似乎都没有让我到任何地方。如果我真的可以看到工具栏出现在任何地方,我会非常高兴。但我似乎无法弥合拥有IDeskBand
参考和将其插入我的 Windows 窗体之间的差距。
以前有没有人尝试过,并且比我走得更远?
c# - 运行控制台的 WinForm 应用程序 - 在控制台问题上禁用最小化/最大化/关闭按钮
我正在编写一个可以启动控制台进行调试的 Windows 窗体应用程序。我想禁用控制台的关闭按钮,以便无法通过控制台的关闭按钮关闭 windows 窗体应用程序。我已经构建了测试代码框架并且它可以工作。代码如下:
代码工作正常,除了:
当代码第一次编译和运行时,控制台上的 X 不是灰色的,但它在 Windows 窗体应用程序上是灰色的。但是,当代码关闭并再次运行时,代码会正常运行;也就是说,控制台上的 X 是灰色的,Windows 窗体应用程序应该是这样的。任何想法为什么以及如何解决这个问题?
有时控制台会出现在获胜表格的后面。有什么方法可以强制控制台始终排在首位?
顺便说一句,有什么方法可以将控制台固定到 WinForm 上的特定位置?应用程序?我可以设置它的大小,所以如果我可以将它固定在一个特定的位置,我可以在表格上为它创建一个位置。
c# - 当用户单击表单外时如何使“叮”声静音?
我正在使用 显示一个表单Form.ShowDialog()
,在此表单中我已覆盖void WndProc(ref Message m)
,因为我想在用户单击表单区域外时关闭此表单。
此代码按我的预期工作,但有一个小问题,DING
每次用户在表单区域外单击时,Windows 都会播放声音,我想DING
在处理此代码时“静音”。
UPDATE
我设法使这个表单按照我的意愿工作,使用来自 的建议Hassan Mujtaba
,但我仍然想知道DING
如果我使用Form.ShowDialog
.
c# - c#: Winform App 运行控制台性能问题
我有一个 Windows 窗体应用程序,它能够打开控制台以进行调试。除了我注意到以下与控制台相关的问题外,一切都运行良好:
- 控制台窗口打开。我打开一个 csv 文件,读取它,然后将其内容直接写入控制台。csv 文件有大约 1200 行数据。即使所有数据行都被读取和写入到控制台,但实际上只有最后 500 行 csv 文件数据在控制台窗口中是可见和可访问的。为什么?是否可以更改此设置,以便在控制台窗口中可以访问所有数据?
另外,我需要注意任何与性能相关的问题吗?
谢谢你的帮助。
c# - C#:Windows 应用程序读取 CSV 文件并写入控制台问题
我有一个能够启动调试控制台的 Windows 窗体应用程序。在应用程序中,通过单击菜单,我读取了一个 CSV 文件并将其写入控制台。执行此操作的函数如下。
除以下内容外,一切正常: csv 文件有大约 1200 行代码。执行此代码时,OpenFileDialog() 窗口仅在 csv 文件内容开始写入控制台窗口之前部分关闭。因此,我可以看到写入控制台窗口的数据,并且我的表单上显示了对话窗口的一个小矩形部分。有什么方法可以确保在将数据写入控制台之前关闭对话框?我应该打开一个新线程来与控制台通信吗?任何建议或帮助将不胜感激。谢谢你。
c# - Wpf WindowsFormsHost 缩小/缩小 winforms 用户控件
我在一个 dll 中有一个 WinForms UserControl,它的最大尺寸和最小尺寸设置为 600x500。
当出现在一个获胜表格应用程序中时,这些是它所需要的维度/一切都很好。
但是当我尝试使用windowsformshost在 wpf 中使用该 winforms 用户控件时:
- 我将 windowsformshost 放在 wpf 网格中
- 整个 windowsformshost 的尺寸正好是 600x500
- 但是windowsformshost中的用户控件缩小了一点,不多,大约10像素左右
- winforms用户控件在windowsformshost内左上角对齐,windowsformshost的底部和右侧有一些空白,因为winforms用户控件缩小了
- 我给windowsformshost多少空间都没关系,windowsformshost是600x500,而里面的winforms usercontrol是缩小的
如何让 winforms 用户控件以 600x500 的预期大小显示?
c# - 无法加载 DLL “OraOps10.dll”
我遇到了一个特殊的问题。我正在开发一个连接到 Oracle 数据库的基于 Windows 的应用程序。
对于初始测试,我创建了安装程序并在我拥有的不同机器上进行了测试。每台机器都安装了 Oracle 客户端,我在运行应用程序时没有发现任何问题。
但是当我与客户共享此安装程序时,他收到错误“无法加载 DLL OraOps10.dll”。当被问到时,他提到并展示了安装在他的机器上的 Oracle 客户端,并且他能够运行连接到 Oracle 数据库的其他 C# 应用程序。
我不明白为什么我的应用程序只会出现上述错误。我什至尝试了在https://forums.oracle.com/forums/thread.jspa?threadID=67364上分享的建议,但仍然没有运气。
我什至尝试在客户的机器上手动复制可执行文件和 DLL。但仍然面临同样的问题。
所以请帮我看看我还能做什么。
感谢和最好的问候
Sudhakar Chavali
PS:
我使用的是 Windows XP 操作系统,客户也使用相同的操作系统。两台机器都只有 32 位操作系统。
这是客户的 oracle 客户端安装的位置:C:\oracle\product\10.2.0\client_1\bin,我的版本也是如此。
我们都使用 Oracle 10g。