问题标签 [sendmessage]

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.

0 投票
1 回答
561 浏览

api - SendMessage 到 Windows 资源管理器地址栏

如何在 C# 中向 Windows 资源管理器地址栏发送消息?

0 投票
3 回答
1982 浏览

c# - 如何使用 sendmessage(C#) 将退格键发送到 cmd.exe

我正在尝试将击键发送到从我的应用程序启动的 cmd.exe。这样做,我可以发送所有键盘字符,但如果我尝试发送 Backspace,它似乎没有生效。以下是向 cmd.exe 发送消息的代码片段:

知道为什么这不起作用吗?从 C# 应用程序发送到 cmd.exe 的标准输入的最佳方法是什么?

提前致谢

0 投票
4 回答
7240 浏览

c# - 在另一个应用程序中模拟按键和按键释放?

我需要与正在运行的外部应用程序交互,并发送特定的按键和释放。我尝试使用 SendKeys 类,但它只完成了一半的工作,因为按键被立即释放到外部应用程序。

我需要能够为外部应用程序模拟“按键”。我现在正在尝试使用 SendMessage 的东西,但现在它根本不起作用:(而且我什至没有收到错误。

0 投票
1 回答
145 浏览

vb.net - 使用 SendMessage 功能对显示器的任何伤害

我开发了一个小应用程序,它使用SendMessage功能来关闭显示器。我的朋友问我经常使用该应用程序是否会损害他的显示器。当他使用类似的应用程序时,他的主板出现了一些问题。使用该功能执行此类操作是否有任何危害(对于硬件)?

0 投票
2 回答
1581 浏览

c# - 如何使用 P/Invoke SendMessage 设置边距?

该线程取决于如何将按钮添加到文本框?.

谢谢。

0 投票
4 回答
26220 浏览

c# - 从另一个应用程序获取文本

我想从另一个应用程序的文本框中检索文本。第二个应用程序的 ProcessName 是“TestTextBox”,TextBox 的名称是“textBox1”。

我的代码,它返回空字符串:

0 投票
1 回答
2238 浏览

session - 不需要解锁会话的 SendKeys 替代方案

情况:

GUI 应用程序包含生成频繁更新的图像到目录的功能(关闭菜单选项)。

已登录并运行的应用程序实例是此图像的唯一来源(功能“依赖于”显示设备)。我已经研究到死了——这是一个可悲的事实。

GUI 应用程序提供 COM 接口,但不提供生成图像的接口。

GUI 代码至少不能更改(大惊喜)。

要求:

其他进程在不同时间需要这些当前图像。

明显的解决方案:

创建 GUI 应用程序实例并使用 SendKeys 操作控件以生成图像的过程。

障碍(我需要详细说明)

除了 Sendkeys 的脆弱性 - 假设 Sendkeys 是可靠的......

当控制台会话被锁定时,Sendkeys 无法工作(锁定是生产要求)

SendMessage API 无法发送诸如“shift/letter”之类的组合键(调用菜单选项时需要)。

问题

当会话被锁定时,是否有任何其他方式以编程方式与应用程序交互?

Windows 服务能否在预定时间解锁/锁定会话 - 足够长以允许生成图像。

我知道,我知道,这是废话。任何高层次的想法和​​大多数意见都表示赞赏;)

0 投票
4 回答
1261 浏览

winapi - 如果接收线程开始发送消息,SendMessage 可以提前返回吗?

windows 如何准确地决定 SendMessage 应该返回 - 也就是说,它如何决定接收线程已完成对发送的消息的处理?

详细场景:我让线程 A 使用 SendMessage 向线程 B 发送一个线程。显然,直到线程 B 处理完消息,SendMessage 才会返回。线程B弹出一个对话框,开始抽消息。在我的场景中,队列上有一条 WM_KILLFOCUS 消息,由线程 B 抽取。结果是线程 B 上的 WM_COMMAND 消息。线程 B 将此 WM_COMMAND 消息传递给默认窗口 proc。当它这样做时,SendMessage 返回到线程 A,即使原始消息还没有完成处理!到底是怎么回事?看起来默认窗口进程以某种方式混淆了窗口,使其认为原始发送的消息已完成。

那么有没有已知的场景,其中泵送消息和调用默认窗口 proc 可以欺骗 SendMessage 返回?

谢谢!菲尔

0 投票
3 回答
2864 浏览

c# - RichTextBox:如何确定文本是否超出控件范围?

我扩展了 RichTextBox 控件以实现本地 RichEdit 类中提供的许多缺失功能。

我遇到了一个问题,如果控件设置为换行到窗口或换行到打印机,水平滚动条会出现,即使在调整控件大小时它不应该出现。

将 wordwrap 循环到 none 并返回似乎可以解决问题,但在换行到打印机时可能会相对较慢(即:调用每个 Resize 事件的速度太慢了)。

这是我的自动换行代码:

最初我认为问题可能与我正在释放图形句柄的事实有关,但是当我包装到控件并且不需要句柄时也会出现问题。

添加截图:

正确行为:

替代文字 http://www.charltonfamily.net/temp/RTB_EM_SETTARGETDEVICE/WrapToPrinter_Correct_Horizo​​ntal_Scrollbar.png

不正确的行为(在非常轻微地调整表单大小之后):

替代文字 http://www.charltonfamily.net/temp/RTB_EM_SETTARGETDEVICE/WrapToPrinter_Inappropriate_Horizo​​ntal_Scrollbar.png

换行到窗口/无换行代码来自http://msdn.microsoft.com/en-us/library/bb774282(VS.85).aspx上的评论

调用 ::SendMessage(hwnd, EM_SETTARGETDEVICE, NULL, 0) 会将文本换行到窗口,而 ::SendMessage(hwnd, EM_SETTARGETDEVICE, NULL, 1) 将完全禁用自动换行。我不确定这是否记录在其他任何地方。

我的 p/invoke:

相关常数:

编辑:

我一直在研究这个,我相信 .NET RichTextBox 控件在调整控件大小时可能会发送带有不正确值的 SetScrollRange()。这是有道理的,因为它不一定知道 EM_SETTARGETDEVICE 消息。

我可能会在调整大小后执行 SetScrollRange() 或类似的东西,但我的问题是我不知道正确的值是什么,也不知道如何弄清楚。

我注意到的另一件事是,当问题发生时,我可以将控件的大小调整为实际包裹文本的大小。此时滚动条回到功能状态,我可以调整大小,直到自动换行循环为无并返回。

编辑:(下面我的非功能性答案中还有更多细节)

看起来 EM_GETRECT 不是我真正想要的,因为当控件大小发生变化时它的大小也会发生变化。这是 MSDN 的描述:

EM_GETRECT 消息

获取编辑控件的格式矩形。格式化矩形是控件在其中绘制文本的限制矩形。限制矩形与编辑控制窗口的大小无关。您可以将此消息发送到编辑控件或富编辑控件。

我最初的理解是,这是整个文本的矩形,从中我可以确定客户端窗口是否小于格式化矩形,因此应该显示滚动条。

看起来这个格式化矩形的真正目的是使文本显示在一个小于编辑控件的区域(即:边距)。

新问题:

那么,有没有我认为 EM_GETRECT 会给我的矩形?一个矩形会告诉我文本(包括超出屏幕的部分)有多宽?例如,如果我有一个 400 像素的控件和一行 800 像素长的文本,我想获得 800 像素的值,以便我可以将它与控件宽度进行比较并显示/不显示滚动条。

实际上,我并不关心非控制文本的长度,而是关心知道IF文本超出了控件的范围。

感谢到目前为止的所有帮助。

0 投票
1 回答
3338 浏览

c# - SendMessage 的问题

我正在使用 C# 开发一个应用程序,它具有与 Windows 中类似的复制、粘贴功能。我添加了菜单项并与相应的应用程序链接。

请查看下图以获得更多想法。

添加到 shell 菜单的项目 http://softwaregenius.net/myimages/menu.jpg

就像我们在 Windows 资源管理器中选择多个项目一样,您需要选择多个文件和/或文件夹,然后选择 OS Util->FastCopy。打开一个表格,如下图所示

FastCopy 上显示的表格 http://softwaregenius.net/myimages/fastcopy1.jpg

该应用程序运行良好。这里的主要问题是,在选择文件后,所有这些文件都在各自的软件中打开。也就是说,如果我选择了 Word 文档,则文件名将添加到 FastCopy 表单中,但也会在 Word 中打开。

当我调查时,我发现这个问题是由 SendMessage 引起的。我必须使用 PostMessage 而不是 SendMessage。但是当我这样做时,应用程序无法正常工作。

下面是我在 C# 2005 中的主要功能编码

}


以下是表单中 WndProc 和其他代码的副本

公共部分类 frmFastCopy : Form { delegate void AddItemToListDelegate(string itm);


这是 NativeCode 类

我知道你们是天才。有人可以告诉我应该在哪里更改应该打开选定的文件,或者更确切地说我应该如何使用 postmessage。

感谢您分享您宝贵的时间。

问候

伊尔凡