递归火山软件开发平台

标题: 解决部分电脑拖放功能失效的问题 [打印本页]

作者: 乐易论坛    时间: 2022-11-16 09:32
标题: 解决部分电脑拖放功能失效的问题
本帖最后由 乐易论坛 于 2022-11-16 14:15 编辑

这个问题,实际上在易语言的时候就已经出现了.
主要的原因就是UAC隔离导致的..
因此的话,注册拖放功能之后,要用 ChangeWindowMessageFilterEx 进行改变

主要修改的是 w_wtl_ui_base.v 和 w_mfc_ui_base.v 2个文件



如果下个版本 吴总能加上最好 因为我电脑 没办法 测试这个问题.所以 不敢保证是否能够成功(理论上成功)
不能成功,肯定是我代码的问题,跟API没什么关系..

(, 下载次数: 6)   覆盖到 \plugins\vprj_win\classlib\sys\mfc_ui_base  
  1. CWnd* pWnd = GetMfcWndPtrWithValidHWnd ();
  2.     if (pWnd != NULL){
  3.         pWnd->DragAcceptFiles (rg_是否允许6);
  4.     HMODULE hUser32 = ::GetModuleHandle(L"User32.dll");
  5.     INT_P pChangeWindowMessageFilterEx = (INT_P)::GetProcAddress(hUser32, "ChangeWindowMessageFilterEx");
  6.     if(pChangeWindowMessageFilterEx <= 0) return ;
  7.     ((INT_P(*)(INT_P,...))pChangeWindowMessageFilterEx)((INT_P)pWnd->m_hWnd,0X233,1,0);
  8.     ((INT_P(*)(INT_P,...))pChangeWindowMessageFilterEx)((INT_P)pWnd->m_hWnd,0x4A,1,0);
  9.     ((INT_P(*)(INT_P,...))pChangeWindowMessageFilterEx)((INT_P)pWnd->m_hWnd,0x49,1,0);
  10.      }
复制代码


(, 下载次数: 7) 覆盖到  \plugins\vprj_win\classlib\sys\wtl_ui_base

之前抄易语言代码抄错了,导致少了参数 哈哈 重新修改了一下 自己在虚拟机测试了一下 是没什么问题的



附带上自己修改的 2个 文件  请注意备份之前的文件,避免出错...



附带视频演示效果  @飞扬工作室  视频网址 https://www.bilibili.com/video/BV1gP411g77s/





作者: suyan    时间: 2022-11-16 09:36
好像WIN10不能用管理员模式
作者: 67564226    时间: 2022-11-16 09:49

作者: 乐易论坛    时间: 2022-11-16 10:11
suyan 发表于 2022-11-16 09:36
好像WIN10不能用管理员模式

我一直都是管理员....
作者: 飞扬工作室    时间: 2022-11-16 10:45
大家有条件的可以帮助测试一下,如果能解决问题我就加到系统库里面去. 我这里没有问题没法测试确定.
作者: 大有可为    时间: 2022-11-16 10:59
感谢分享 来测试一下
作者: server    时间: 2022-11-16 11:28
来了。         
作者: server    时间: 2022-11-16 12:12
无效,
1/带管理员权限,就会无法得到消息。
作者: Xelloss0618    时间: 2022-11-16 12:21
这个网上早就有资料了吧,右键以管理员身份运行此程序的时候就会无法拖放。
主要是两个 API,ChangeWindowMessageFilter 和 ChangeWindowMessageFilterEx
前者改全局,后者改指定窗口句柄
因为这两个 API 都是 Windows Vista 之后才能用,所以要自行定义
我这个写法不需要改动核心库的代码,不过火山修改了最好

(, 下载次数: 32)

(, 下载次数: 24)


作者: server    时间: 2022-11-16 12:56
Xelloss0618 发表于 2022-11-16 12:21
这个网上早就有资料了吧,右键以管理员身份运行此程序的时候就会无法拖放。
主要是两个 API,ChangeWindowM ...

手打,测试没问题。
作者: 乐易论坛    时间: 2022-11-16 14:15
飞扬工作室 发表于 2022-11-16 10:45
大家有条件的可以帮助测试一下,如果能解决问题我就加到系统库里面去. 我这里没有问题没法测试确定. ...

视频效果演示 https://www.bilibili.com/video/BV1gP411g77s/
作者: qzone    时间: 2022-11-16 15:54
本帖最后由 qzone 于 2022-11-16 16:05 编辑

(, 下载次数: 15)

我的测试结果是这样的,如果以管理员权限运行,就不能获取拖放内容了。


(, 下载次数: 15)

修改之后,可以使用管理员权限了

作者: 飞扬工作室    时间: 2022-11-16 16:58
已经修正,请下载覆盖压缩包内的文件: (, 下载次数: 34)

作者: shentantan    时间: 2022-11-18 14:30
飞扬工作室 发表于 2022-11-16 16:58
已经修正,请下载覆盖压缩包内的文件:

<Y:\vol_dev\win_android_chs_person\plugins\vprj_win\classlib\sys\mfc_ui_base\w_mfc_ui_base.v>, 346: 错误:
    error C2039: "MyDragAcceptFiles": 不是 "`global namespace'" 的成员
    error C3861: “MyDragAcceptFiles”: 找不到标识符
作者: uuyyhhjj    时间: 2022-11-18 18:24
https://learn.microsoft.com/zh-c ... p-ole?view=msvc-170
说到拖放,这个火山有例子吗
作者: 飞扬工作室    时间: 2022-11-18 19:18
shentantan 发表于 2022-11-18 14:30
, 346: 错误:
    error C2039: "MyDragAcceptFiles": 不是 "`global namespace'" 的成员
    error C38 ...

没有更新完全,或者更新后没有清理解决方案.
作者: shentantan    时间: 2022-11-19 00:18
飞扬工作室 发表于 2022-11-18 19:18
没有更新完全,或者更新后没有清理解决方案.

然后我把楼主的那两个文件覆盖之后解决了。




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4