当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 14 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [问题] 有人知道 Wine 是如何提取 Windows 程序中的图标的吗?
帖子发表于 : 2008-09-03 21:32 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
如果在网上搜索 “Wine icon”,会得到很多关于如果用 icoutils 或者其它工具提取 Windows 程序图标的链接。
但是我总认为 Wine 本身就可以做到,但不知道它是如果做的。
理由是:
如果有个 Windows 应用程序 App,它提供了一个安装程序 setup.exe。在 Windows 下安装会在桌面生成一个快捷方式,查看快捷方式的属性,可以看到它的图标是 App.exe 或者某个 DLL 库中的一个图标。而如果用 Wine 来运行这个 setup.exe,安装完也会在桌面生成一个 .desktop 文件,它的图标跟 Windows 桌面上的一样,但是是一个独立的图标文件(在~/.local 目录下),说明它是 Wine 提取出来的。
问题是,如果不带安装程序,有什么办法用 Wine 的这一功能把图标提取出来吗?


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-09-04 13:14 

注册: 2008-01-09 22:41
帖子: 18311
送出感谢: 0 次
接收感谢: 6
:shock:

lz理论依据充分!

但是不知道如何做……

可以尝试读wine源码…………


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-09-04 13:21 
头像

注册: 2007-09-29 3:09
帖子: 5773
送出感谢: 0 次
接收感谢: 3
win的程序,一般有自带ico的和编译到exe中两种,前者转成png就可以用的,后者嘛,用读取资源之类的软件dump出来就是了,crack范畴了...不知道ubuntu下有没有能解析exe资源构成的软件,或者谁给wine个试试 :lol:


_________________
HUNT Unfortunately No Talent...


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-09-04 14:08 
头像

注册: 2006-08-06 16:58
帖子: 618
地址: 北海
送出感谢: 0 次
接收感谢: 1
http://ftp.ubuntu.org.cn/home/windowssux/

自己下载wineicons_1.0.6.tar.gz,解压,用Wine运行exe文件就可以了。
在网上搜索wineicons可以找到官网。


_________________
Wine与中文显示补丁的安装
Wine注册表设置


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-09-04 17:44 
头像

注册: 2008-07-14 22:42
帖子: 8078
地址: Beijing
送出感谢: 0 次
接收感谢: 0 次
windowssux 写道:
http://ftp.ubuntu.org.cn/home/windowssux/

自己下载wineicons_1.0.6.tar.gz,解压,用Wine运行exe文件就可以了。
在网上搜索wineicons可以找到官网。

就是这样弄的


_________________
Ubuntu User


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-09-14 11:04 

注册: 2008-01-18 19:13
帖子: 6
送出感谢: 0 次
接收感谢: 0 次
WINE自动生成的Foobar和Offlinelist的图标快捷方式的脚本如下
从中你可以观察到Icon一项前边的4位16进制应该是一个32位的偏移地址,
估计就是图标在EXE文件的实际地址,
所以获得该地址的话就不用再去提取图标,而可以直接显示

代码:
[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=foobar2000
Exec=env WINEPREFIX="/home/leekindo/.wine" wine "C:\\Program Files\\foobar2000\\foobar2000.exe"
Type=Application
StartupWMClass=Wine
Path=/home/leekindo/.wine/dosdevices/c:/Program Files/Foobar2000
Icon=7498_foobar2000.0
GenericName[zh_CN]=



代码:
[Desktop Entry]
Name=OfflineList
Exec=env WINEPREFIX="/home/leekindo/.wine" wine "C:\\Program Files\\OfflineList\\OfflineList.exe"
Type=Application
StartupWMClass=Wine
Path=/home/leekindo/.wine/dosdevices/c:/Program Files/OfflineList
Icon=c16d_offlinelist.0


最后由 leekindo 编辑于 2008-09-14 11:20,总共编辑了 1 次

页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-09-14 11:14 
头像

注册: 2007-02-18 19:33
帖子: 2180
地址: lyric.im
系统: OSX
送出感谢: 0 次
接收感谢: 1
其实图标是作为“资源”放在Windows的可执行文件中。
Windows的exe文件有资源节,M$提供了一套API来进行资源读写。
由于在Windows中对资源操作很频繁,所以Wine对这些API都模拟实现了。
所以Wine只要在Windows编译一个提取图标资源的程序,再自己Wine一下就搞定了(最后一句是我的猜测,如果是我,我会这么干的)。


_________________
既然你诚心诚意地问了
我就大慈大悲地告诉你
为了防止世界被破坏
为了维护世界的和平
贯彻爱与真实的罪恶
可爱而又迷人的反派角色
武藏,小次郎
我们是穿越银河的火箭队,白洞白色的明天在等着我们。就是这样!!喵~~


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2008-09-14 12:01 
头像

注册: 2007-09-23 13:36
帖子: 364
送出感谢: 0 次
接收感谢: 2
wine 是一个 windows 虚拟机, windows 下提取图标都需要用到工具, wine下当然也需要工具了, 不存在用 wine 直接提取的. 不知道楼主是否这个意思, 想用个脚本提取图标.


页首
 用户资料  
 
9 楼 
 文章标题 : Re: [问题] 有人知道 Wine 是如何提取 Windows 程序中的图标的吗?
帖子发表于 : 2008-09-25 18:30 

注册: 2008-06-29 5:27
帖子: 16
送出感谢: 0 次
接收感谢: 0 次
:em06 我也想知道怎么提取到的!


页首
 用户资料  
 
10 楼 
 文章标题 : Re: [问题] 有人知道 Wine 是如何提取 Windows 程序中的图标的吗?
帖子发表于 : 2008-09-25 18:39 
头像

注册: 2006-07-15 11:20
帖子: 990
地址: 枫叶刀市
送出感谢: 2
接收感谢: 0 次
aerofox 写道:
如果在网上搜索 “Wine icon”,会得到很多关于如果用 icoutils 或者其它工具提取 Windows 程序图标的链接。
但是我总认为 Wine 本身就可以做到,但不知道它是如果做的。
理由是:
如果有个 Windows 应用程序 App,它提供了一个安装程序 setup.exe。在 Windows 下安装会在桌面生成一个快捷方式,查看快捷方式的属性,可以看到它的图标是 App.exe 或者某个 DLL 库中的一个图标。而如果用 Wine 来运行这个 setup.exe,安装完也会在桌面生成一个 .desktop 文件,它的图标跟 Windows 桌面上的一样,但是是一个独立的图标文件(在~/.local 目录下),说明它是 Wine 提取出来的。
问题是,如果不带安装程序,有什么办法用 Wine 的这一功能把图标提取出来吗?


应该有困难

应该是程序调用了某个系统API完成从资源中提取图表的效果,Wine应该也是从系统dll里调用了这个API,如果单独用的话要考虑如何单独调用这个API,恐怕需要一个单独的程序,这应该不是wine的独立功能。

懂win32编成的请进!


_________________
Thinkpad T400


页首
 用户资料  
 
11 楼 
 文章标题 : Re:
帖子发表于 : 2008-09-25 20:45 

注册: 2008-06-29 5:27
帖子: 16
送出感谢: 0 次
接收感谢: 0 次
leekindo 写道:
WINE自动生成的Foobar和Offlinelist的图标快捷方式的脚本如下
从中你可以观察到Icon一项前边的4位16进制应该是一个32位的偏移地址,
估计就是图标在EXE文件的实际地址,
所以获得该地址的话就不用再去提取图标,而可以直接显示

代码:
[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=foobar2000
Exec=env WINEPREFIX="/home/leekindo/.wine" wine "C:\\Program Files\\foobar2000\\foobar2000.exe"
Type=Application
StartupWMClass=Wine
Path=/home/leekindo/.wine/dosdevices/c:/Program Files/Foobar2000
Icon=7498_foobar2000.0
GenericName[zh_CN]=



代码:
[Desktop Entry]
Name=OfflineList
Exec=env WINEPREFIX="/home/leekindo/.wine" wine "C:\\Program Files\\OfflineList\\OfflineList.exe"
Type=Application
StartupWMClass=Wine
Path=/home/leekindo/.wine/dosdevices/c:/Program Files/OfflineList
Icon=c16d_offlinelist.0


不知有什么方法得到该地址呢? :em11


页首
 用户资料  
 
12 楼 
 文章标题 : Re: [问题] 有人知道 Wine 是如何提取 Windows 程序中的图标的吗?
帖子发表于 : 2008-09-25 22:04 
头像

注册: 2006-12-01 23:02
帖子: 622
送出感谢: 0 次
接收感谢: 0 次
看来我的办法太笨了 :em06 ,我如果想提取都是先安装,然后ls -l查看链接的原文件位置再直接cp,我只干过一次,不要被鄙视的体无完肤就好 :em06


页首
 用户资料  
 
13 楼 
 文章标题 : Re: [问题] 有人知道 Wine 是如何提取 Windows 程序中的图标的吗?
帖子发表于 : 2012-03-02 0:29 

注册: 2012-03-02 0:14
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
根本不用下载wineicons什么的那么麻烦, 直接用归档管理器(File Roller)打开主程序exe文件(不要吃惊:P), 就可以从ICONS目录里面提取ICO图标文件了。 ICONS目录包含了程序用到的所有图标, 可以先全部提取出来, 在文件管理器里面图标显示一下就可以找到所要的图标了。 还有个小技巧, 桌面启动项右键->属性修改图标时, 文件对话框只能列出PNG的文件, 不管它直接暴力Ctrl-L输入文件名.ICO, 回车搞定 !


页首
 用户资料  
 
14 楼 
 文章标题 : Re: [问题] 有人知道 Wine 是如何提取 Windows 程序中的图标的吗?
帖子发表于 : 2012-03-02 14:30 

注册: 2012-01-14 22:22
帖子: 10
送出感谢: 0 次
接收感谢: 0 次
wine实现这个功能的代码在program/winemenubuilder/winemenubuilder.c里。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 14 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译