发个新版的USkin
首先感谢非虫老大给我们介绍这么好的东东 一下子解决了我写的程序的界面问题不过总看那个就有些厌倦了 于是上网上找了一下 发现这个USkin好像有新版 转了半天弄了一个 发过来罢
不过这个inc文件俺没写 就用非虫老大的罢~
[attach]45991[/attach] 貌似现在的用的是.msstyles 发几个偶找的罢
全是网上找的
[attach]45992[/attach] 发个例子罢 就是那个查询在线状态的 偶把这些都复制到那个目录里了 换着看看罢
[attach]45993[/attach] 自己顶 美化界面 呵呵 牛,一点多钟还没睡! [quote][b]以下是引用[u]春色三分[/u]在2009-8-4 11:45的发言:[/b]
牛,一点多钟还没睡! [/quote]
呵呵 夜猫子~ 这么好的帖子,我都没顶,支持个!! 发现了一个超级‘酷’的SkinLib。没有声明支持A64但X64却支持。牛啊。
http://www.skincrafter.com/
[[i] 本帖最后由 东海一鱼 于 2009-9-12 13:49 编辑 [/i]] 楼上的skincrafter怎么用在汇编里啊?
我是新手,他们主页上没有用在汇编和sdk里的例子,你能否说下
回复 10楼 zjjzff1
使用方法很简单:他支持两种接口:API COM对汇编程序原来说API方式更简单一些:
API接口: (用Pe Explorer察看:)
[attach]47522[/attach]
COM接口:
[attach]47523[/attach]
官方有很多高级语言调用COM接口的例子。API接口语义与COM一致。
如果你想尝试使用COM借口方式,可以参考我的Midi库的代码。
最后:
这个库效果很好,但不适合汇编使用,原因是太庞大了(DLL本身还可以忍受,但是还需要VC2005 or VC2008的RunTime环境[em06])。 我还是不清楚,能否加个qq,或者邮件方式联系
版主一定要帮帮忙啊 抱歉,我没有QQ.
我写了一个测试,你可以参考一下。
头文件
[code]include windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc
includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib
BSTR typedef DWORD
DlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM
InitLcenKeys typedef PROTO C :BSTR,:BSTR,:BSTR,:BSTR
InitDecoration typedef PROTO C :BOOL
LoadSkinFromFile typedef PROTO C :BSTR
ApplySkin typedef PROTO C
RemoveSkin typedef PROTO C
DeInitDecoration typedef PROTO C
DecorateAs typedef PROTO C :LONG, :LONG
IncludeWnd typedef PROTO C :LONG,:LONG
ExcludeWnd typedef PROTO C :LONG,:LONG
SetCustomSkinWnd typedef PROTO C :LONG,:BSTR,:BOOL
GetSkinCopyRight typedef PROTO C :BSTR,:BSTR,:BSTR,:BSTR,:BSTR
UpdateControl typedef PROTO C :LONG
UpdateWnd typedef PROTO C :LONG
AddAdditionalThread typedef PROTO C
DeleteAdditionalThread typedef PROTO C
pInitLicn typedef ptr InitLcenKeys
pInitDec typedef ptr InitDecoration
pLoadSkin typedef ptr LoadSkinFromFile
pAppSkin typedef ptr ApplySkin
pMoveSkin typedef ptr RemoveSkin
pDeInitDec typedef ptr DeInitDecoration
pIncludeWnd typedef ptr IncludeWnd
pExcludeWnd typedef ptr ExcludeWnd
pSetCustWnd typedef ptr SetCustomSkinWnd
pGetSkinCopyRight typedef ptr GetSkinCopyRight
pUpdateControl typedef ptr UpdateControl
pAddAdditionalThread typedef ptr AddAdditionalThread
pDeleteAdditionalThread typedef ptr DeleteAdditionalThread
CTEXT MACRO y:VARARG
LOCAL sym
CONST segment dword private 'DATA'
IFIDNI <y>,<>
sym db 0
ELSE
sym db y,0
ENDIF
CONST ends
EXITM <OFFSET sym>
ENDM
IDD_DIALOG1 equ 101
IDC_BTN1 equ 1001
IDC_SBR1 equ 1006
IDC_PGB1 equ 1002
;#########################################################################
.data?
hInstance dd ?
hDll dd ?
FunInitLicn pInitLicn ?
FunInitDec pInitDec ?
FunLoadSkin pLoadSkin ?
FunAppSkin pAppSkin ?
FunDecInitDec pDeInitDec ?
Buf db 1024 dup(?)
[/code]
调用跟普通WIN32API没有区别,只是因为它内部使用Unicode的关系,一些函数没有直接Invoke 而采用了call手工入栈方式。
再有要注意的就是所有函数声明全部为C调用方式,手工入栈的话注意调用后清栈。
[code].386
.model flat, stdcall ;32 bit memory model
option casemap :none ;case sensitive
include CSkinDll.inc
.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke InitCommonControls
invoke LoadLibrary,CTEXT("SkinDll.dll") ;加载DLL
mov hDll,eax
invoke GetProcAddress,hDll,CTEXT("InitLicenKeys") ;获得API地址
mov FunInitLicn,eax
invoke GetProcAddress,hDll,CTEXT("InitDecoration")
mov FunInitDec,eax
invoke GetProcAddress,hDll,CTEXT("LoadSkinFromFile")
mov FunLoadSkin,eax
invoke GetProcAddress,hDll,CTEXT("ApplySkin")
mov FunAppSkin,eax
invoke GetProcAddress,hDll,CTEXT("DeInitDecoration")
mov FunDecInitDec,eax
invoke MultiByteToWideChar,CP_ACP,0,CTEXT("DEMOSKINCRAFTERLICENCE"),-1,addr Buf,128 ;都是Unicode字串
lea eax,Buf
push eax
invoke MultiByteToWideChar,CP_ACP,0,CTEXT("support@skincrafter.com"),-1,addr Buf + 128,128
lea eax,Buf
add eax,128
push eax
invoke MultiByteToWideChar,CP_ACP,0,CTEXT("SKINCRAFTER.COM"),-1,addr Buf + 128 * 2,128
lea eax,Buf
add eax,128 * 2
push eax
invoke MultiByteToWideChar,CP_ACP,0,CTEXT("SKINCRAFTER"),-1,addr Buf + 128 * 3,128
lea eax,Buf
add eax,128 * 3
push eax
;invoke MultiByteToWideChar,CP_ACP,0,CTEXT("0"),-1,addr Buf + 128 * 4,128
;lea eax,Buf
;add eax,128 * 4
;push eax
Call FunInitLicn ;调用函数
add esp,16
mov eax,1
push eax
Call FunInitDec ;调用函数
pop ecx
invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
invoke ExitProcess,0
;########################################################################
DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
;LOCAL Buf[1024]:byte
mov eax,uMsg
.if eax==WM_INITDIALOG
.elseif eax==WM_COMMAND
mov eax,wParam
.if eax == IDC_BTN1
invoke MultiByteToWideChar,CP_ACP,0,CTEXT("Stylish.skf"),-1,addr Buf + 128 * 5,128
lea eax,Buf
add eax,128 * 5
push eax
Call FunLoadSkin ;调用函数
pop ecx
invoke FunAppSkin
invoke SendDlgItemMessage,hWin,IDC_PGB1,PBM_SETPOS,50,0
.endif
.elseif eax==WM_CLOSE
.if hDll
invoke FunDecInitDec ;调用函数
invoke FreeLibrary,hDll
.endif
invoke EndDialog,hWin,0
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc endp
end start[/code]写得匆忙,很多地方没有很好处理,你领会一下意思好了。详细使用参考官方帮助。
[[i] 本帖最后由 东海一鱼 于 2009-10-29 19:35 编辑 [/i]] 太谢谢你了,版主,希望你不要嫌我烦哦
这个版块我太喜欢了.
最后一个问题,我下载的是skincrafter3,他里面有SkinCrafterDll_vs2005.dll,SkinCrafterDll_vs2005_VB.dll,SkinCrafterDll_vs2008.dll这么三个
没有直接的SkinDll.dll
我应该用哪个? 啊,文档里有说明的。
SkinCrafterDll_vs2005.dll、SkinCrafterDll_vs2008.dll这两个分别使用vc2005、vc2008编译的的库文件。你用哪个都行。注意分发给用户使用的时候要带上各自的Runtime环境包。
SkinCrafterDll_vs2005_VB.dll我没仔细看,估计不是双接口。可能是纯COM接口的Activex控件封装形式。 不能不顶 干什么用的?
能不能简单介绍一下啊? 什么用的饿 谢谢分享.
页:
[1]
2