亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? winskindlg.pas

?? delphi控件
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
unit WinSkinDlg;

{$I Compilers.Inc}

{$WARNINGS OFF}
{$HINTS OFF}
{$RANGECHECKS OFF}

interface

uses windows,Messages,SysUtils,Classes,Graphics,WinSkinMenu,
  forms,ExtCtrls;

const
   skin_Creating=0;
   skin_Active=1;
   skin_uninstall=2;
   skin_change=3;
   skin_Destory=4;
   skin_Updating=5;
   skin_Deleted=6;
   skin_update=7;

   m_popup=0;
   m_systemmenu=2;
   m_menuitem=1;

Type
  TSkinThread = class(TObject)
  public
    hook:HHook;
    ThreadID:integer;
  end;

  TSBAPI1=function(ahwnd:hwnd): HResult; stdcall;
  TSBAPI2= function() :HResult; stdcall;

  TSkinManage = class(Tobject)
  protected
    Timer : TTimer;
    SBLib :Thandle;
    pinitApp,pUninitApp:TSBAPI2;
    pinitSB,pUninitSb:TSBAPI1;
    //function  FindSkinForm(aHwnd:THandle):boolean;
    function  FindSkinForm(aHwnd:THandle):dword;
    procedure DeleteAllForms;
    function AddMenu(aHwnd:THandle):boolean;
    function  FindSkinMenu(aHwnd:THandle):boolean;
    function  DeleteMenu(aHwnd:THandle):boolean;
    procedure DeleteAllMenus;
    function  FindTForm(ahwnd:Thandle):Tform;
    procedure OnTimer(Sender: TObject);
    function NestedForm(ahwnd:Thandle):boolean;
    procedure FindSkindata(var adata:pointer;ahwnd:Thandle);
    function OnBeforeSkin(ahwnd:Thandle;aname:string):boolean;
    procedure DeleteAllThreads;
    procedure ActiveForm(aform:Tform);
    procedure DeleteDeleted;
    function IsDllForm(ahwnd:Thandle):boolean;
    procedure DeleteAllSub;
    procedure DeleteSubForm(amode:integer);
//    function AddForm(aHwnd:THandle):boolean;
     procedure WndProc(var Msg: TMessage);
  public
    Flist:Tlist;
    Mlist:Tlist;
    Dlist:Tlist;
    Threadlist:Tlist;
    sublist:Tlist;
    active:boolean;
    skinchildform:boolean;
    state:integer;
    menutype:integer;
    menuactive:boolean;
    MDIMax:boolean;
    WMSetDraw:boolean;
    clienthwnd:Thandle;
    MDIForm : Tform;
    action:integer;
    UpdateData:pointer;
    SBinstall :boolean;
    MainData: pointer;
    mode:integer;
    handle : HWND;
    lpara : integer;
    mmgr:TSkinmanage;
    constructor Create(amode:integer=0);
    destructor Destroy; override;
    procedure InstallHook;
    function AddForm(aHwnd:THandle):boolean;
//    function AddMDIForm(atform:Tform):boolean;
    function DeleteForm(aHwnd:THandle):boolean;
    function  GetMenuBg(amenu:Hmenu):Tbitmap;
    procedure UpdateSkinMenu(amenu:Hmenu);
    procedure  FindPopupMenu(amenu:Hmenu);
    procedure  SetMDIMax(b:boolean);
    procedure  SetMDIMax2(b:boolean);
    procedure  SetCaption(b:boolean);
    function  GetMDIChildNum:integer;
    procedure SetAction(acode:integer;Interval:integer=250);
    procedure AddSkinData(adata: Pointer);
    procedure RemoveSkinData(adata: Pointer);
    procedure DeleteSysbtn;
    procedure InstallThread(aThreadID:integer);
    procedure UnInstallThread(aThreadID:integer);
    function initsb(ahwnd:Thandle):boolean;
    function Uninitsb(ahwnd:Thandle):boolean;
    procedure SetPopMenu;
    procedure DeleteForm2(aHwnd:THandle);
    procedure DeleteForm3;
    procedure AssignData(adata: Pointer);
    procedure SetHMenu(hmenu:Thandle);
    procedure DeleteSub(p:Pointer);
  end;
//var HookCallback,WndCallBack,WndCallRet : HHOOK;
var  SkinManager:TSkinManage;
     RM_GetObjectInstance: DWORD;
     ControlAtom: TAtom;
     PropName:string;
     myinstance:dword;

function SkinHookCallback(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
function SkinHookCallRet(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT;stdcall;
function SkinHookCBT(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
function SkinHookCBT2(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;

implementation

uses winskinform ,WinSkinData,menus,winsubclass;

var
     HookCallback,WndCallBack,WndCallRet : HHOOK;
     appDestory:boolean;


function SkinHookCallRet(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT;
var pwp:PCWPRETSTRUCT;
   s:string;
begin
   if code= HC_ACTION then begin
     pwp:=PCWPRETSTRUCT (lparam);
     case pwp.message of
        WM_DRAWITEM: begin
//              SkinManager.WMDRAWITEM(PDrawItemStruct(pwp.lparam));
           end;
     end;
   end;
   result:=CallNextHookEx( WndCallRet, Code, wParam, lParam );
end;

function SkinHookCallback(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT;
var pwp:PCWPSTRUCT;
   s:string;
   msg:Tmessage;
begin
   if code= HC_ACTION then begin
     pwp:=PCWPSTRUCT(lparam);
{     if skincanlog then begin
        msg.msg:=pwp.message;
        msg.wparam:=pwp.wparam;
        msg.lparam:=pwp.lparam;
        skinaddlog('Hook:'+msgtostr(msg));
     end; }
     case pwp.message of
        WM_CREATE:SkinManager.AddMenu(pwp.hwnd);
        WM_DESTROY,WM_NCDESTROY:SkinManager.DeleteMenu(pwp.hwnd);
        WM_INITMENU: begin
//              skinaddlog('WH_CALLWNDPROC : WM_INITMENU');
              skinmanager.FindPopupMenu(pwp^.wparam);
           end;
{        WM_DRAWITEM: begin
              skinaddlog('WH_CALLWNDPROC : WM_DRAWITEM');
           end;}
     end;
   end;
   result:=CallNextHookEx( WndCallback, Code, wParam, lParam );
end;

function SkinHookCBT(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT;
var s:string;
   hwnd:Thandle;
   ptr:^CBT_CREATEWND;
   sf: dword;
   sd:Tskindata;
begin
//message box WM_ACTIVATE TMessageForm
//Dlg ****WM_ACTIVATE #32770 WA_ACTIVE
   if (appDestory) then begin
     result:=CallNextHookEx( HookCallback, Code, wParam, lParam );
     exit;
   end ;

   if (code>=0) then begin
      case code of
        HCBT_ACTIVATE :begin
           if skinmanager.state=skin_creating then
              inc(skinmanager.state);
           hwnd := Thandle(wParam);
           if  SkinManager.addform(hwnd) then begin
           end;
         end;
         HCBT_DESTROYWND : begin
           hwnd := Thandle(wParam);
           SkinManager.DeleteMenu(hwnd);
           //if SkinManager.deleteform(hwnd) then begin
           //end;
         end;
         HCBT_CREATEWND : begin
           hwnd := Thandle(wParam);
           ptr:=pointer(lparam);
           s:= getwindowclassname(hwnd);
//           skinAddlog(format('***HCBT_CREATEWND %s %1x,%1x',[s,hwnd,ptr^.lpcs^.hwndParent]));
           if (s='ScrollBar') and ((ptr^.lpcs^.style and sbs_sizegrip)>0) then begin
              s:= getwindowclassname(ptr^.lpcs^.hwndParent);
              sf:= SkinManager.findskinform(ptr^.lpcs^.hwndParent);
              if (sf>0)  then begin  //     and (s='#32770')
                  Twinskinform(sf).addcontrolh(hwnd);
//                  skinAddlog(format('*****Scrollbar %s %1x,%1x',[s,hwnd,ptr^.lpcs^.hwndParent]));
//                  result:=10;
//                  exit;
              end;
           end ;
           if (ptr^.lpcs^.style and ws_child)=0 then begin
               //skinAddlog(format('***Form Creater %s %1x (%1d,%1d)',[s,hwnd,ptr^.lpcs^.cx,ptr^.lpcs^.cy]));
               s:= getwindowclassname(hwnd);
               if (s='#32768') and (skinmanager.mmgr=nil) then
                 SkinManager.AddMenu(hwnd)  ;
//               sd:=SkinManager.maindata;
//               sd.DoDebug(s);
{               if (sd<>nil) and assigned(sd.OnNewform) then
                  try
                    sd.OnNewform(sd,hwnd,s);
                  except
                  end;       }
           end;
           if (ptr^.lpcs^.dwExStyle and ws_ex_mdichild)>0 then begin
              SkinManager.addform(hwnd);
           end;
         end;
{         HCBT_MINMAX : begin
           hwnd := Thandle(wParam);
           if lparam = SW_MAXIMIZE then
               skinAddlog(format('***Form MAXIMIZE %1x ',[hwnd]));
         end;}
      end;//endcase
   end else begin
      if (code=HCBT_ACTIVATE) and (skinmanager.state=skin_creating) then
              inc(skinmanager.state);
   end;
   result:=CallNextHookEx( HookCallback, Code, wParam, lParam );
end;

function SkinHookCBT2(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT;
var s:string;
   hwnd:Thandle;
   ptr:^CBT_CREATEWND;
begin
//message box WM_ACTIVATE TMessageForm
//Dlg ****WM_ACTIVATE #32770 WA_ACTIVE
   if code>=0 then begin
      case code of
        HCBT_ACTIVATE :begin
           if skinmanager.state=skin_creating then
              inc(skinmanager.state);
           hwnd := Thandle(wParam);
             if  SkinManager.addform(hwnd) then begin
//               s:='****HCBT_ACTIVATE '+s;
//               skinAddlog(s);
             end;
         end;
         HCBT_DESTROYWND : begin
           hwnd := Thandle(wParam);
           SkinManager.DeleteMenu(hwnd);
           if SkinManager.deleteform(hwnd) then begin
           end;
         end;
         HCBT_CREATEWND : begin
           hwnd := Thandle(wParam);
           ptr:=pointer(lparam);
           s:= getwindowclassname(hwnd);
//           skinAddlog(format('***HCBT_CREATEWND %s %1x,%1x',[s,hwnd,ptr^.lpcs^.hwndParent]));
           if (s='ScrollBar') and (SkinManager.findskinform(ptr^.lpcs^.hwndParent)>0) then begin
//              skinAddlog(format('***Scrollbar %s %1x,%1x',[s,hwnd,ptr^.lpcs^.hwndParent]));
              result:=10;
              exit;
           end ;
           if s='#32768' then
              SkinManager.AddMenu(hwnd); //don't create scrollbar
         end;
      end;//endcase
   end;
   result:=CallNextHookEx( HookCallback, Code, wParam, lParam );
end;

constructor TSkinManage.Create(amode:integer=0);
begin
   inherited create();
   if amode=0 then begin
      flist:=Tlist.create;
      Mlist:=Tlist.create;
      dlist:=Tlist.create;
      threadlist:=Tlist.create;
      sublist:=Tlist.create;
      mode:=0;
   end else
      mode := HInstance;
   active:=false;
   menuactive:=false;
   MDIMax:=false;
   menutype:=0;
   mmgr:=nil;
   Timer := TTimer.create(nil);
   timer.Interval:=100;
   timer.Ontimer:=Ontimer;
   timer.enabled:=false;
   SBinstall :=false;
   skinchildform:=false;
   wmsetdraw:=false;//true;
   maindata:=nil;
   state:=skin_creating;
//   Handle := Classes.AllocateHWnd(WndProc);
   SBLib:=0;
//   SBLib := LoadLibrary('C:\MyFile\MySkin\ARTICLE\coolsb_src\coolsb2\Release\coolsb2.dll');
//   SBLib := LoadLibrary('coolsb2.dll');
   pinitapp:=nil;
   sbinstall:=false;
   if SBLib<>0 then begin
    pinitApp:=GetProcAddress(SBLib,'CoolSB_InitializeApp');
    pUninitApp:= GetProcAddress(SBLib,'CoolSB_UninitializeApp');
    pinitSB:=GetProcAddress(SBLib,'InitializeCoolSB');
    pUninitSb:=GetProcAddress(SBLib,'UninitializeCoolSB');
   end;
   if @pinitapp<>nil then
       SBinstall := boolean(pinitapp);
//   installhook;
end;

destructor TSkinManage.Destroy;
begin
   state:=skin_destory;
   active:=false;
   Timer.free;
   if @pUninitapp<>nil then  pUninitapp;
   if (sblib<>0) then
       FreeLibrary(sblib);
   if mode=0 then begin
       DeleteAllThreads;
       if (sublist.Count>0) or (flist.Count>0) then
           deleteallforms;
      if flist<>nil then flist.free;
      deleteallmenus;
      dlist.free;
      deleteallsub;
   end else if HookCallback<>0 then begin
     if assigned(mmgr) {and (mmgr.state <> skin_destory)} then begin
        mmgr.DeleteSub(self);
        mmgr.DeleteSubForm(mode);
     end;
      //AssignData(nil);
   end;
//   Classes.DeallocateHWnd(Handle);
   if HookCallback<>0 then
     UnhookWindowsHookEx( HookCallback );
   appDestory := true;
   inherited destroy;
end;

procedure TSkinManage.InstallHook;
var dwThreadID:DWORD;
begin
   winversion:=GetVersion();
//   skinaddlog(format('Windows Version %1x',[winversion]));
//   skinaddlog(format('Windows Version %1d %1d',[Win32MajorVersion,Win32MinorVersion]));
//   skinaddlog(format('winversion %1x',[winversion]));
   dwThreadID := GetCurrentThreadId;
//   WndCallback :=SetWindowsHookEx( WH_CALLWNDPROC,SkinHookCallback,0,dwThreadID);
//   WndCallRet :=SetWindowsHookEx( WH_CALLWNDPROCRET,SkinHookCallRet,0,dwThreadID);
   HookCallback :=SetWindowsHookEx( WH_CBT,SkinHookCBT,0,dwThreadID);
//   skinaddlog(format('ThreadId %1x',[dwThreadId]));
//   skinaddlog(format('HookCallback %1x',[HookCallback]));
end;

procedure TSkinManage.InstallThread(aThreadID:integer);
var obj:TSkinThread;
     b: boolean;
     i:integer;
begin
   b:=false;
   for i:= 0 to threadlist.count-1 do begin
      obj:= TSkinThread(threadlist[i]);
      if obj.threadID=aThreadID then begin
        b:=true;
        break;
      end;
   end;
   if b then exit;
   obj:=TSkinThread.create;
   obj.threadID:=aThreadID;
   obj.hook :=SetWindowsHookEx( WH_CBT,SkinHookCBT2,0,aThreadID);
   threadlist.add(obj);
end;

procedure TSkinManage.UnInstallThread(aThreadID:integer);
var obj:TSkinThread;
    i:integer;
begin
   for i:= 0 to threadlist.count-1 do begin
      obj:= TSkinThread(threadlist[i]);
      if obj.threadID=aThreadID then begin
        UnhookWindowsHookEx( obj.hook);
        threadlist.delete(i);
        break;
      end;
   end;
end;

procedure TSkinManage.DeleteAllThreads;
var obj:TSkinThread;
    i:integer;
begin
   for i:= 0 to threadlist.count-1 do begin
      obj:= TSkinThread(threadlist[i]);
      UnhookWindowsHookEx( obj.Hook );
      obj.free;
   end;
   threadlist.clear;
   threadlist.free;
end;


function Tskinmanage.nestedform(ahwnd:Thandle):boolean;
var  style:longword;
     s:string;
     phwnd:Thandle;
begin
   result:=false;
   Style := GetWindowLong( ahwnd, GWL_STYLE );
   if (style and ws_child)=0 then exit;
   Style := GetWindowLong( ahwnd, GWL_EXSTYLE );
   if (style and ws_ex_mdichild)>0 then exit;
   phwnd:=getparent(ahwnd);
   s:=lowercase(getwindowclassname(phwnd));
   if s='mdiclient' then exit;
   result:=true;
end;

procedure Tskinmanage.FindSkindata(var adata:pointer;ahwnd:Thandle);
var s:string;

  function FindOnlyThisForm:boolean;
  var i:integer;
      sd:Tskindata;
      sf:Tform;
  begin
     result:=false;
     for i:= 0 to dlist.count-1 do begin
         sd:=Tskindata(dlist.items[i]);
         sf:=Tform(sd.owner);
         if (sd.skinformtype=sfOnlyThisForm) and (sf.handle=ahwnd) then begin
             adata:=sd;
             result:=true;
         end;
     end;
  end;

  function FindData(atype:TSkinFormType):boolean;
  var i:integer;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91猫先生在线| 亚洲韩国精品一区| 色婷婷av一区二区三区软件 | 欧美日韩大陆在线| 国产精华液一区二区三区| 中文字幕人成不卡一区| 粗大黑人巨茎大战欧美成人| 日本不卡一区二区| 国产精品久久三区| 精品区一区二区| 欧美日韩中文字幕一区| jlzzjlzz亚洲女人18| 国产综合久久久久影院| 亚洲一二三级电影| 国产另类ts人妖一区二区| 亚洲人亚洲人成电影网站色| 久久久五月婷婷| 欧美不卡123| 欧美精品一级二级| 色婷婷精品大视频在线蜜桃视频| 国产成人在线网站| 国产在线视视频有精品| 日韩国产在线一| 亚洲制服丝袜av| 亚洲欧洲一区二区三区| 久久久不卡影院| 国产午夜久久久久| 久久久久亚洲蜜桃| 欧美精品一区二区不卡| 日韩免费视频一区| 精品国产乱码久久久久久蜜臀| 制服丝袜日韩国产| 4438x亚洲最大成人网| 欧美性受xxxx| 欧美日韩日本视频| 欧美日韩激情一区| 欧美三级资源在线| 欧美日韩免费视频| 欧美日韩国产一级二级| 欧美浪妇xxxx高跟鞋交| 欧美日韩精品系列| 欧美性一二三区| 91精品国产全国免费观看| 欧美一区永久视频免费观看| 91精品国产综合久久久蜜臀图片| 欧美精选午夜久久久乱码6080| 在线电影院国产精品| 欧美日韩精品一区二区三区四区| 7878成人国产在线观看| 在线播放中文一区| 日韩免费福利电影在线观看| 日韩欧美国产系列| 国产亚洲人成网站| 国产精品高潮呻吟久久| 1024国产精品| 亚洲观看高清完整版在线观看 | 紧缚捆绑精品一区二区| 精品午夜一区二区三区在线观看 | 日本成人中文字幕| 久久国产尿小便嘘嘘| 国产成人精品影视| 色综合天天性综合| 欧美美女一区二区在线观看| 日韩丝袜情趣美女图片| 久久久亚洲高清| 有码一区二区三区| 麻豆91免费观看| 成人精品国产一区二区4080| 色综合欧美在线| 日韩欧美一二三| 国产精品麻豆视频| 五月激情综合色| 国产精品91一区二区| 欧洲视频一区二区| 精品噜噜噜噜久久久久久久久试看| 国产欧美日韩在线| 亚洲国产一区视频| 国产美女娇喘av呻吟久久| 91在线观看美女| 日韩欧美在线1卡| 国产精品家庭影院| 天天av天天翘天天综合网色鬼国产 | 亚洲二区视频在线| 国产一区二区三区久久久| 99久久久无码国产精品| 欧美一区二区福利在线| 国产精品国产自产拍高清av王其| 午夜免费久久看| 豆国产96在线|亚洲| 欧美三级电影精品| 国产精品网站在线播放| 丝袜亚洲精品中文字幕一区| 福利一区二区在线观看| 91精品久久久久久久久99蜜臂| 中文字幕免费不卡| 奇米影视一区二区三区| 色先锋资源久久综合| 国产亚洲午夜高清国产拍精品| 亚洲永久精品大片| 成人久久视频在线观看| 欧美一二三区在线观看| 亚洲图片欧美一区| 97精品视频在线观看自产线路二| 欧美一区二区三区免费视频| 蜜臀av在线播放一区二区三区| 欧美日韩国产一区二区三区地区| 久久精品一区蜜桃臀影院| 亚洲 欧美综合在线网络| 成人中文字幕合集| 精品国产免费视频| 日韩精品亚洲专区| 日本精品视频一区二区| 中文字幕av不卡| 九九**精品视频免费播放| 欧美日韩国产123区| 亚洲精品午夜久久久| www.久久久久久久久| 久久久欧美精品sm网站| 久久91精品国产91久久小草| 4438亚洲最大| 日本不卡一二三| 欧美日韩免费一区二区三区视频| 一区二区三区自拍| 91首页免费视频| 国产精品美女久久久久久久久久久| 国产一区二区精品久久99| 欧美电影免费观看完整版| 日韩电影在线免费| 欧美一区二区免费视频| 日韩精品亚洲专区| 欧美一区二区三区小说| 舔着乳尖日韩一区| 91精品国产一区二区三区香蕉 | 国内精品嫩模私拍在线| 日韩欧美精品在线| 美腿丝袜亚洲综合| 精品国产欧美一区二区| 久久99国内精品| 久久久久久亚洲综合| 国产精品69久久久久水密桃| 国产视频911| 99re热视频这里只精品| 亚洲精品免费电影| 欧美日韩高清在线播放| 日韩激情视频网站| 精品久久国产老人久久综合| 久久成人18免费观看| 欧美精品一区二区三区蜜臀| 国产精品一区二区在线看| 中文字幕第一区| 在线免费精品视频| 日日噜噜夜夜狠狠视频欧美人| 在线成人高清不卡| 久热成人在线视频| 久久精品亚洲精品国产欧美| 不卡视频在线看| 一区二区三区免费网站| 欧美麻豆精品久久久久久| 久久精品久久精品| 国产日产亚洲精品系列| 色就色 综合激情| 免费成人美女在线观看.| 久久九九全国免费| 日本高清无吗v一区| 婷婷丁香激情综合| 国产欧美一区二区精品性| 91亚洲精品久久久蜜桃| 亚洲福利一区二区| 欧美成人a∨高清免费观看| 成人激情小说网站| 日韩综合在线视频| 国产午夜亚洲精品午夜鲁丝片| 91国偷自产一区二区开放时间 | 在线亚洲免费视频| 精品在线一区二区三区| 亚洲国产成人私人影院tom| 在线看一区二区| 国产在线精品一区二区不卡了| 中文字幕一区二区三区蜜月| 欧美日韩一区二区三区四区| 国产一区二区不卡老阿姨| **性色生活片久久毛片| 日韩亚洲欧美成人一区| kk眼镜猥琐国模调教系列一区二区| 天天综合网天天综合色 | 六月丁香婷婷色狠狠久久| 国产精品网友自拍| 欧美一区二区三区在线电影| 不卡的电影网站| 丝袜美腿亚洲一区二区图片| 国产精品青草综合久久久久99| 欧美丰满少妇xxxxx高潮对白 | 精品日韩一区二区三区| 91网站黄www| 国产盗摄精品一区二区三区在线| 亚洲在线一区二区三区| 国产精品丝袜久久久久久app| 91麻豆精品国产91久久久久久| 99久久国产综合色|国产精品| 美女脱光内衣内裤视频久久网站 |