win7系統(tǒng)压状,包括win8、win10,當一個軟件以管理員身份運行后种冬,文件拖放打開功能將失效镣丑,只能從軟件菜單來打開文檔,特別麻煩娱两。原因:win7系統(tǒng)后莺匠,微軟增加了“UI消息隔離機制(UMI)”,低權(quán)限進程無法和高權(quán)限進程進行通信十兢,explorer.exe(圖形外殼進程)進程權(quán)限并非是完全管理員權(quán)限趣竣,所以它不能向管理員(Administrator)權(quán)限進程發(fā)送消息,而文件拖動會發(fā)送一個WM_DROPFILES消息出去旱物,當前進程是高權(quán)限進程遥缕,所以收不到WM_DROPFILES消息。
解決辦法:1.開發(fā)者角度宵呛,win7/8/10单匣,調(diào)用ChangeWindowMessageFilter或者ChangeWindowMessageFilterEx即可,xp下不存在該機制烤蜕,無需調(diào)用封孙,也無法調(diào)用(xp版user32.dll中根本沒有該函數(shù))迹冤。
在程序啟后調(diào)用:
ChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD);? // MSGFLT_ADD=0x1? MSGFLT_REMOVE=0x2
ChangeWindowMessageFilter(WM_COPYGLOBALDATA, MSGFLT_ADD);? // WM_COPYGLOBALDATA=0x0049
2.用戶角度讽营,修改注冊表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System下的EnableLUA值為0,重啟電腦泡徙。該操作用于禁用LUA(Least-privilege User Account橱鹏,最低權(quán)限用戶賬戶),然后運行UserAccountControlSettings.exe堪藐,關(guān)閉UAC(User Account Control莉兰,用戶賬戶控制)。個人感覺UAC和UMI就是累贅礁竞,為了安全糖荒,卻降低工作效率,如今殺軟已經(jīng)爛大街了模捂,系統(tǒng)的保護完全沒必要捶朵。