乐易论坛 发表于 2022-11-16 09:32:53

解决部分电脑拖放功能失效的问题

本帖最后由 乐易论坛 于 2022-11-16 14:15 编辑

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

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



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

覆盖到 \plugins\vprj_win\classlib\sys\mfc_ui_base
CWnd* pWnd = GetMfcWndPtrWithValidHWnd ();
    if (pWnd != NULL){
      pWnd->DragAcceptFiles (rg_是否允许6);
    HMODULE hUser32 = ::GetModuleHandle(L"User32.dll");
    INT_P pChangeWindowMessageFilterEx = (INT_P)::GetProcAddress(hUser32, "ChangeWindowMessageFilterEx");
    if(pChangeWindowMessageFilterEx <= 0) return ;
    ((INT_P(*)(INT_P,...))pChangeWindowMessageFilterEx)((INT_P)pWnd->m_hWnd,0X233,1,0);
    ((INT_P(*)(INT_P,...))pChangeWindowMessageFilterEx)((INT_P)pWnd->m_hWnd,0x4A,1,0);
    ((INT_P(*)(INT_P,...))pChangeWindowMessageFilterEx)((INT_P)pWnd->m_hWnd,0x49,1,0);
   }

覆盖到\plugins\vprj_win\classlib\sys\wtl_ui_base

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



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



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




飞扬工作室 发表于 2022-11-16 16:58:39

已经修正,请下载覆盖压缩包内的文件:

suyan 发表于 2022-11-16 09:36:44

好像WIN10不能用管理员模式

67564226 发表于 2022-11-16 09:49:55

:):):):)

乐易论坛 发表于 2022-11-16 10:11:29

suyan 发表于 2022-11-16 09:36
好像WIN10不能用管理员模式

{:2_34:}我一直都是管理员....{:2_34:}

飞扬工作室 发表于 2022-11-16 10:45:21

大家有条件的可以帮助测试一下,如果能解决问题我就加到系统库里面去. 我这里没有问题没法测试确定.

大有可为 发表于 2022-11-16 10:59:51

感谢分享 来测试一下

server 发表于 2022-11-16 11:28:03

来了。         

server 发表于 2022-11-16 12:12:19

无效,
1/带管理员权限,就会无法得到消息。

Xelloss0618 发表于 2022-11-16 12:21:07

这个网上早就有资料了吧,右键以管理员身份运行此程序的时候就会无法拖放。
主要是两个 API,ChangeWindowMessageFilter 和 ChangeWindowMessageFilterEx
前者改全局,后者改指定窗口句柄
因为这两个 API 都是 Windows Vista 之后才能用,所以要自行定义
我这个写法不需要改动核心库的代码,不过火山修改了最好





server 发表于 2022-11-16 12:56:45

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

手打,测试没问题。
页: [1] 2
查看完整版本: 解决部分电脑拖放功能失效的问题