| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 15958 人关注过本帖, 1 人收藏
标题:发个新版的USkin
只看楼主 加入收藏
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
回复 10楼 zjjzff1
使用方法很简单:他支持两种接口:API COM
对汇编程序原来说API方式更简单一些:

API接口: (用Pe Explorer察看:)
图片附件: 游客没有浏览图片的权限,请 登录注册


COM接口:
图片附件: 游客没有浏览图片的权限,请 登录注册


官方有很多高级语言调用COM接口的例子。API接口语义与COM一致。
如果你想尝试使用COM借口方式,可以参考我的Midi库的代码。

最后:
    这个库效果很好,但不适合汇编使用,原因是太庞大了(DLL本身还可以忍受,但是还需要VC2005 or VC2008的RunTime环境)。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-29 13:38
zjjzff1
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2009-3-25
收藏
得分:0 
我还是不清楚,能否加个qq,或者邮件方式联系
版主一定要帮帮忙啊
2009-10-29 18:16
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
抱歉,我没有QQ.

我写了一个测试,你可以参考一下。

头文件

程序代码:
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(?)

调用跟普通WIN32API没有区别,只是因为它内部使用Unicode的关系,一些函数没有直接Invoke 而采用了call手工入栈方式。
再有要注意的就是所有函数声明全部为C调用方式,手工入栈的话注意调用后清栈。

程序代码:
.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@),-1,addr Buf + 128,128 
        lea eax,Buf 
        add eax,128 
        push eax     
         
        invoke MultiByteToWideChar,CP_ACP,0,CTEXT("),-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
写得匆忙,很多地方没有很好处理,你领会一下意思好了。详细使用参考官方帮助。

[ 本帖最后由 东海一鱼 于 2009-10-29 19:35 编辑 ]

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-29 19:33
zjjzff1
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2009-3-25
收藏
得分:0 
太谢谢你了,版主,希望你不要嫌我烦哦

这个版块我太喜欢了.
2009-10-30 12:43
zjjzff1
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2009-3-25
收藏
得分:0 
最后一个问题,我下载的是skincrafter3,他里面有SkinCrafterDll_vs2005.dll,SkinCrafterDll_vs2005_VB.dll,SkinCrafterDll_vs2008.dll这么三个
没有直接的SkinDll.dll
我应该用哪个?
2009-10-31 08:53
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
啊,文档里有说明的。

SkinCrafterDll_vs2005.dll、SkinCrafterDll_vs2008.dll这两个分别使用vc2005、vc2008编译的的库文件。你用哪个都行。注意分发给用户使用的时候要带上各自的Runtime环境包。

SkinCrafterDll_vs2005_VB.dll我没仔细看,估计不是双接口。可能是纯COM接口的Activex控件封装形式。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-31 21:29
GoldenSpider
Rank: 2
等 级:论坛游民
威 望:3
帖 子:17
专家分:77
注 册:2010-5-15
收藏
得分:0 
不能不顶
2010-05-15 19:18
ok100fen
Rank: 2
等 级:论坛游民
帖 子:22
专家分:14
注 册:2010-5-19
收藏
得分:0 
干什么用的?
能不能简单介绍一下啊?
2010-05-19 21:59
通许
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2010-8-24
收藏
得分:0 
什么用的饿
2010-09-01 04:34
w117571782
Rank: 1
等 级:新手上路
帖 子:4
专家分:4
注 册:2010-9-23
收藏
得分:0 
谢谢分享.
2010-10-31 22:38
快速回复:发个新版的USkin
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.061107 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved