Wine QQ 安装等问题
来源:互联网 发布:淘宝主图要求规范2017 编辑:程序博客网 时间:2024/06/02 23:03
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
…
解决办法:
使得这个函数返回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;}
结语:
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 安装等问题
- wine中文问题及wine下QQ安装问题
- wine安装QQ
- wine qq安装
- Ubuntu 安装 wine-qq
- Wine QQ 安装
- Ubuntu安装wine和Wine QQ
- wine qq安装及问题记录与解决
- ubuntu安装wine qq 2010
- ubuntu12下安装wine QQ
- 详细的wine qq安装
- linux 安装 wine qq 2012
- ubuntu下安装wine qq
- ubuntu14.04 安装wine qq
- Ubuntu14.04安装wine QQ
- Ubuntu 安装wine和QQ
- linux mint wine 安装qq
- wine 运行QQ的问题
- 合并两个集合 union
- ABAP 开发物料接口
- syntax error
- 获得文件的最后修改日期
- arcgis 创建网络数据集
- Wine QQ 安装等问题
- java有用链接
- eclipse常用快捷键和调试
- 用opencms创建首页时页眉和页脚没出现?
- regex强大工具:org.apache.oro.text.regex中的PatternMatcher使用之contains()与matchs()的区别
- Android开发指南-窗口小部件(App Widgets)
- Linq 的 Case
- JDK 中KERTOOL工具的使用方法
- C# 判断文件名中是否有非法字符