Linux中Wine QQ问题的解决

周围朋友同事都使用QQ,联络上离不开QQ。然而WebQQ的聊天记录和文件传送功能有限,LinuxQQ经常显示备注出错,并且文件传送功能也很有限,无奈选用非常占资源的wine QQ, 最重要的就wine版QQ传送文件文件功能很好用,且可以远程协助他人。.

关于怎么在wine中安装QQ,网上教程很多,不过能搜索到的不少都有点老了,以前用Debian5.0/6.0的时候就是按网上教程并自己实践的。用wine1.2系列安装QQ是非常折腾的,需要安装很多支撑库,而且非常容易崩溃。在wine1.3版本后,相对就容易许多了。

以现在Ubuntu11.10为例,使用的是wine1.3.28版本,安装QQ2010的步骤:

1、sudo apt-get  install cups-bsd gnome-exe-thumbnailer wine1.3 ttf-droid ttf-liberation ttf-unfonts-core wine1.3-gecko winetricks
2、winetricks ie6 vcrun6 riched20
3、wine QQ2010.exe

(更新:如果需要安装QQ2011,则需要使用ppa上面的wine1.3.35版本之后的wine,但本人未测试过。)

QQ(2010)在wine里面的两个问题:

1、“在线”状态时候很快自动切换到”离开“状态,不论“状态切换”的设置如何。
    2、使用gnome的“显示桌面”功能后,QQ主界面无法显示出来。

问题分析及解决:

1、状态切换问题:

根据状态切换原理,首先想到的是GetLastInputInfo这个函数,写了个测试程序,发现这个函数在wine里面运行是正常的。不过在gnome-terminal下启动wine /path_to_qq/qq.exe,发现重复如下信息:

fixme:crypt:SystemFunction041 (0x3d0b728, e78, 1): stub [RtlDecryptMemory]
fixme:crypt:SystemFunction040 (0x5558fc8, e78, 1): stub [RtlEncryptMemory] 
fixme:winstation:OpenInputDesktop (0,0,400001cf): stub 

这个 OpenInputDesktop很可疑,google之发现其常用作检测当前桌面是否处于可输入状态,如果不能输入,通常是桌面被锁或者处理用户切换状态。在QQ的Bin目录下面翻箱倒柜的找了一遍,发现是Common.dll引用了这个函数。下面要有请逆向神器IDA出场~为了表示对IDA的景仰之情,要先沐浴更衣,并斋戒九日,1,2,...,9好,时辰到,启动IDA,打开common.dll,泡茶稍等,查找OpenInputDesktop,看到那个粉红色的OpenInputDesktop了吗?是的,是OpenInputDesktop(激动ing...),它在Util::WinScreenStatus::IsComputerLocked()这个函数里面,看这个函数名字就可以猜测出来它是判断系统是否处于锁屏的状态,返回值应该是int(甚至是bool型),从下图的IDA逆向代码来看,如果OpenInputDesktop失败,则函数提前结束,返回0。

解决办法:

使得这个函数返回true就可以解决问题了。本人采用把OpenInputDesktop之后的那个jnz换成jmp的方法来完成的。使用IDA的HexView,找到jnz对应的机器代码75 xx,把随后的十来个数字一起,作为特征码;用WinHex打开common.dll,使用上面“特征码“定位,并把75改成EB(即jnz->jmp),并把common.dll的头部checksum值清空,保存文件。再次启qq,状态切换问题解决。(缺点是:在Linux真的处于锁屏状态时,QQ仍显示在线。

2、主界面不显示问题:

在Debian下,Ctrl+Alt+d(显示桌面)后,双击托盘的qq图标,qq主界面不显示。本人解决办法是使用ShowWindow,代码如下:

// showQQ.cpp : Defines the entry point for the application.
#include <windows.h>
BOOL CALLBACK EnumWndProc(HWND hWnd,LPARAM lParam)
{TCHAR winTitle[MAX_PATH] = {0};::GetWindowText(hWnd, winTitle, sizeof(winTitle));if( 0 == strcmp(winTitle, "QQ International")|| 0 == strcmp(winTitle, "QQ2011")|| 0 == strcmp(winTitle, "QQ2010")// 请自行添加其它需要的QQ主窗口名){::SendMessage(hWnd, WM_SHOWWINDOW, 0, 0);::SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);::ShowWindow(hWnd, SW_SHOWNORMAL); ::SendMessage(hWnd, WM_SHOWWINDOW, 1, 0); }return TRUE;
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{ ::EnumWindows(EnumWndProc, (LPARAM)0);return 0;
}
用vc6编译后备用,当qq不出现的时候,用wine运行这个showQQ.exe程序就可以了。

结语:

qq是身边人用得比较多的联系工具,但腾讯对非windows用户照顾不周,使用QQ非常艰难。希望有更好的开放协议的通讯工具,让大家有更多的选择。

附:

测试 GetLastInputInfo代码

#define _WIN32_WINNT 0x500
#include <windows.h>
#include <winuser.h>
#include "stdio.h"
#include "time.h"int main(int argc, char* argv[])
{LASTINPUTINFO info;info.cbSize = sizeof(info);while(1) {if(GetLastInputInfo(&info)) {printf ( "%ud\n", info.dwTime);}else {printf("get last input info fail.\n");}Sleep(1000);}return 0;
}




												

Wine QQ 安装等问题相关推荐

  1. Deepin wine QQ 安装

    Linux deepin 系统安装了最新的linux 3.0.0 试用了一下,发现有一些地方不太试用,没有消息提示闪烁,容易造成不能及时回复消息,没有PC版的那种QQ界面,还是不太习惯,无奈回退老版本 ...

  2. Wine QQ 安装

    感谢phpcj downlaod 提取码:f2sn 步骤一: sudo add-apt-repository ppa:wine/wine-builds;sudo apt-get update;sudo ...

  3. Ubuntu14.04安装wine QQ

    一.下载wine QQ国际版 Wine QQ2012基于WineTM版(大小为118.7M),前往下载 二.安装依赖库 sudo apt-get install libgtk2.0-0:i386 如果 ...

  4. 64位Ubuntu kylin 16.04安装wine QQ

    sudo apt install wine Wine QQ 下载 下载解压双击第三个deb安装

  5. Ubuntu16.04通过wine环境安装微信与QQ等软件

    很多双系统用户平时开发项目时会在Ubuntu下进行开发,但是由于Ubuntu下缺少腾讯QQ和微信的官方客户端支持,需要使用微信或者QQ只能使用网页版本,但是有一些用户由于某些原因是无法通过网页登录微信 ...

  6. Kali Linux 2016.1 x86 x64 安装 wine QQ

    安装完成图 i 使用的是longene TM2013 下载地址(百度云):http://pan.baidu.com/s/1dFx8azv 安装: 64位的需要安装32位依赖文件 用这条命令 apt-g ...

  7. ubuntu下 安装 wine QQ

    我们的马化腾叔叔迟迟不做QQ for Linux,然QQ庞大的用户群体使我无奈只能投奔网上的 Wine QQ,话不多说上帖子. 原帖:https://www.cnblogs.com/sangewuxi ...

  8. Ubuntu系列:Ubuntu安装deepin wine QQ, 微信...

    第1步,安装deepin-wine环境:上https://github.com/wszqkzqk/deepin-wine-ubuntu页面下载zip包(或用git方式克隆 git clone http ...

  9. ubuntu安装wine QQ无法启动问题解决

    安装完Wine QQ无法启动 点击桌面启动方式没任何反应,于是我想到了用命令行启动 $/opt/longene/qq $./qq.sh 这个时候提示错误: Application tried to c ...

最新文章

  1. p2v、v2v 转换-windows篇
  2. 【MongoDB】chunk too big to move的解决方案
  3. 幕后常驻嘉宾配音小姐姐的2021年度总结
  4. 非常有用的101道算法部分常见面试题
  5. 机器学习:分类(Classification)算法
  6. sublime php code sniffer,mac下sublime text3的php错误提示插件php code sniffer安装后,无法显示php错误...
  7. Orange部署(Docker容器)
  8. pfc颗粒linux安装包,离散元颗粒流软件(PFC3D/PFC2D)
  9. 动态规划算法(DP)
  10. iOS 打包流程教程
  11. 解析dex2oat的实现
  12. 数独c语言程序设计说明,c语言数独字谜游戏课程设计
  13. iOS 单元测试 Tests 和 UITests
  14. Redis之过期键删除策略
  15. 彩虹物语服务器维护,红手指彩虹物语云手机使用教程_红手指彩虹物语云挂机教程_彩虹物语息屏挂机教程_红手指云手机官网...
  16. c++语言打开文件对话框,C++采用openfilename打开文件对话框用法实例
  17. 可视门铃竟然可以泄露WiFi密码
  18. 左手Python右手R —《白夜行》wordcloud
  19. sufficient statistics
  20. 软件工程与实践(第3版)课后习题(二)

热门文章

  1. 11 个非常有用的 HTML One-Liners
  2. dotnet C# 将 Byte 二进制数组使用不安全代码快速转换为 int 或结构体数组
  3. 【学习笔记】云服务器入门教程(搭建云盘、网站,安装anaconda、WinSCP、宝塔面板等)
  4. thinkpad x12018换固态_【求助】ThinkPad X1Carbon 更换ssd - 笔记本电脑(Notebook)版 - 北大未名BBS...
  5. 程序人生 - 2021浙A区域号牌限行规定(限行时间+限行路段+限行范围图)
  6. 大学物理 期末考试公式集锦
  7. Python3环境安装配置
  8. gem意思_宝石gem的gem什么意思 宝石gem为什么叫老舅
  9. 要点初见:OpenCL 2.0 异构计算 [第三版] 知识点整理
  10. IntelliJ IDEA中class lombok.javac.apt.LombokProcessor (in unnamed module @0x7d968ec1) cannot access..