zklhp 发表于 2009-8-4 01:02

发个新版的USkin

首先感谢非虫老大给我们介绍这么好的东东 一下子解决了我写的程序的界面问题

不过总看那个就有些厌倦了 于是上网上找了一下 发现这个USkin好像有新版 转了半天弄了一个 发过来罢

不过这个inc文件俺没写 就用非虫老大的罢~

zklhp 发表于 2009-8-4 01:07

先发这个开发包

[attach]45991[/attach]

zklhp 发表于 2009-8-4 01:12

貌似现在的用的是.msstyles 发几个偶找的罢

全是网上找的

[attach]45992[/attach]

zklhp 发表于 2009-8-4 01:15

发个例子罢 就是那个查询在线状态的 偶把这些都复制到那个目录里了 换着看看罢

[attach]45993[/attach]

zklhp 发表于 2009-8-4 01:15

自己顶 美化界面 呵呵

春色三分 发表于 2009-8-4 11:45

牛,一点多钟还没睡!

zklhp 发表于 2009-8-4 19:37

[quote][b]以下是引用[u]春色三分[/u]在2009-8-4 11:45的发言:[/b]

牛,一点多钟还没睡! [/quote]

呵呵 夜猫子~

非虫 发表于 2009-8-7 17:26

这么好的帖子,我都没顶,支持个!!

东海一鱼 发表于 2009-9-12 13:46

发现了一个超级‘酷’的SkinLib。没有声明支持A64但X64却支持。牛啊。

http://www.skincrafter.com/



[[i] 本帖最后由 东海一鱼 于 2009-9-12 13:49 编辑 [/i]]

zjjzff1 发表于 2009-10-29 11:24

楼上的skincrafter怎么用在汇编里啊?
我是新手,他们主页上没有用在汇编和sdk里的例子,你能否说下

东海一鱼 发表于 2009-10-29 13:38

回复 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])。

zjjzff1 发表于 2009-10-29 18:16

我还是不清楚,能否加个qq,或者邮件方式联系
版主一定要帮帮忙啊

东海一鱼 发表于 2009-10-29 19:33

抱歉,我没有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]]

zjjzff1 发表于 2009-10-30 12:43

太谢谢你了,版主,希望你不要嫌我烦哦

这个版块我太喜欢了.

zjjzff1 发表于 2009-10-31 08:53

最后一个问题,我下载的是skincrafter3,他里面有SkinCrafterDll_vs2005.dll,SkinCrafterDll_vs2005_VB.dll,SkinCrafterDll_vs2008.dll这么三个
没有直接的SkinDll.dll
我应该用哪个?

东海一鱼 发表于 2009-10-31 21:29

啊,文档里有说明的。

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

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

GoldenSpider 发表于 2010-5-15 19:18

不能不顶

ok100fen 发表于 2010-5-19 21:59

干什么用的?
能不能简单介绍一下啊?

通许 发表于 2010-9-1 04:34

什么用的饿

w117571782 发表于 2010-10-31 22:38

谢谢分享.

页: [1] 2

编程论坛