Electron检测窗口复制操作时WM_CLIPBOARDUPDATE消息未触发如何解决
问题根因及解决方法
核心原因
你的功能异常是因为Windows剪贴板监听要求注册操作必须和目标窗口属于同一进程,跨进程调用AddClipboardFormatListener即使返回成功也不会生效。
Windows的窗口消息机制对WM_CLIPBOARDUPDATE的投递有严格的进程绑定规则:系统只会把剪贴板变更消息发送给和调用AddClipboardFormatListener注册时同进程的窗口,你将窗口句柄传给独立的.NET进程完成注册,系统会默认把消息投递给.NET进程的消息队列,不会进到Electron主进程的窗口消息循环,所以hookWindowMessage的回调永远不会被触发。
可行解决方案
方案1:Electron主进程内完成注册(推荐)
无需额外的.NET进程,直接在Electron主进程通过ffi-napi调用user32.dll的AddClipboardFormatListener接口,拿到窗口句柄后直接完成注册,再挂载消息钩子即可正常接收消息。
方案2:.NET进程独立监听后同步通知
如果必须保留.NET进程的逻辑,可以在.NET进程内创建一个不可见的隐藏消息窗口,用这个窗口完成剪贴板监听注册,收到WM_CLIPBOARDUPDATE消息后,通过本地IPC(比如命名管道、TCP端口)把事件通知给Electron主进程即可。
内容的提问来源于stack exchange,提问作者pushkin
相关产品推荐
相关产品推荐

