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

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

?? voyhelp.pas

?? 這一系列是我平時收集的pascal深入核心編程
?? PAS
字號:
unit VoyHelp;

interface

uses Windows;

procedure VoyHelp_DrawWindowFrame(hWndSubject: HWND); // 框選窗體
procedure VoyHelp_UpdateWindowInfo(hWndEdit, hWndSubject: HWND); // 窗體信息

implementation

  // 自己寫的定位字符串尾小函數 ^^
function SearchEnd(First: PChar): PChar;
begin
  Result := First;
  while (Result^ <> #0) do Inc(Result);
end;

  // 反轉窗體邊框顏色, 重復調用將'擦除'
procedure VoyHelp_DrawWindowFrame(hWndSubject: HWND);
var
  Dc: HDC;
  Rc: TRect;
  Pen: HPEN;
begin
 // 窗體位于屏幕的范圍
  GetWindowRect(hWndSubject, Rc);

 // 整個窗體的設備環境
  Dc := GetWindowDC(hWndSubject);

 // 保存設備環境的狀態
  SaveDC(Dc);

 // 目標象素為原色取反
  SetROP2(Dc, R2_NOT);

 // 按窗體邊框寬度建立畫筆, 并選入,
 // 當該畫筆被一個需要外接矩形的函數使用時,
 // 考慮到畫筆寬度, 圖像會適當收縮
  Pen := CreatePen(PS_INSIDEFRAME, 3 * GetSystemMetrics(SM_CXBORDER), RGB(0, 0, 0));
  SelectObject(Dc, Pen);

 // 選入系統預定空畫刷
  SelectObject(Dc, GetStockObject(NULL_BRUSH));

 // (使用反色)繪制矩形
  Rectangle(Dc, 0, 0, Rc.Right - Rc.Left, Rc.Bottom - Rc.Top);

 // 恢復設備環境的狀態
 // 并釋放
  RestoreDC(Dc, -1);
  ReleaseDC(hWndSubject, Dc);

 // 刪除之前的畫筆對象
  DeleteObject(Pen);
end;

type
  TStyleList = record  // 風格列表數組成員結構
    dwID: DWORD;   // 單個風格
    szName: PChar; // 風格名稱
  end;

const
  g_szClassStyles: array[0..12] of TStyleList = // 窗體類風格
  ( (dwID: CS_VREDRAW; szName: 'CS_VREDRAW'),
    (dwID: CS_HREDRAW; szName: 'CS_HREDRAW'),
    (dwID: CS_KEYCVTWINDOW; szName: 'CS_KEYCVTWINDOW'),
    (dwID: CS_DBLCLKS; szName: 'CS_DBLCLKS'),
    (dwID: CS_OWNDC; szName: 'CS_OWNDC'),
    (dwID: CS_CLASSDC; szName: 'CS_CLASSDC'),
    (dwID: CS_PARENTDC; szName: 'CS_PARENTDC'),
    (dwID: CS_NOKEYCVT; szName: 'CS_NOKEYCVT'),
    (dwID: CS_NOCLOSE; szName: 'CS_NOCLOSE'),
    (dwID: CS_SAVEBITS; szName: 'CS_SAVEBITS'),
    (dwID: CS_BYTEALIGNCLIENT; szName: 'CS_BYTEALIGNCLIENT'),
    (dwID: CS_BYTEALIGNWINDOW; szName: 'CS_BYTEALIGNWINDOW'),
    (dwID: CS_GLOBALCLASS; szName: 'CS_GLOBALCLASS')  );

  g_szWindowStyles: array[0..15] of TStyleList = // 窗體風格
  ( (dwID: WS_POPUP; szName: 'WS_POPUP'),
    (dwID: WS_CHILD; szName: 'WS_CHILD'),
    (dwID: WS_MINIMIZE; szName: 'WS_MINIMIZE'),
    (dwID: WS_VISIBLE; szName: 'WS_VISIBLE'),
    (dwID: WS_DISABLED; szName: 'WS_DISABLED'),
    (dwID: WS_CLIPSIBLINGS; szName: 'WS_CLIPSIBLINGS'),
    (dwID: WS_CLIPCHILDREN; szName: 'WS_CLIPCHILDREN'),
    (dwID: WS_MAXIMIZE; szName: 'WS_MAXIMIZE'),
    (dwID: WS_BORDER; szName: 'WS_BORDER'),
    (dwID: WS_DLGFRAME; szName: 'WS_DLGFRAME'),
    (dwID: WS_VSCROLL; szName: 'WS_VSCROLL'),
    (dwID: WS_HSCROLL; szName: 'WS_HSCROLL'),
    (dwID: WS_SYSMENU; szName: 'WS_SYSMENU'),
    (dwID: WS_THICKFRAME; szName: 'WS_THICKFRAME'),
    (dwID: WS_GROUP; szName: 'WS_GROUP'),
    (dwID: WS_TABSTOP; szName: 'WS_TABSTOP')  );

  g_szExWindowStyles: array[0..4] of TStyleList = // 窗體擴展風格
  ( (dwID: WS_EX_DLGMODALFRAME; szName: ''),
    (dwID: WS_EX_NOPARENTNOTIFY; szName: ''),
    (dwID: WS_EX_TOPMOST; szName: ''),
    (dwID: WS_EX_ACCEPTFILES; szName: ''),
    (dwID: WS_EX_TRANSPARENT; szName: '')  );

  // 將dwStyleFlags所有的風格, 轉成字符串形式添加到szBuf尾部
procedure VoyHelp_AppendStyleStrings(szBuf: PChar; const Styles: array of TStyleList;
 dwStyleFlags: DWORD);
var
  nStyleIndex, nNumStyles: Integer;
begin
  nNumStyles := 0; // 匹配風格為0個
  lstrcat(szBuf, ' ('); // 開始

  for nStyleIndex := Low(Styles) to High(Styles) do // 遍歷指定風格列表
  begin
    if (Styles[nStyleIndex].dwID and dwStyleFlags) <> 0 then // 存在此風格
    begin
      if (nNumStyles > 0) then lstrcat(szBuf, ', '); // 不是第一個匹配風格, 則先添加分隔符
      Inc(nNumStyles);
      lstrcat(szBuf, Styles[nStyleIndex].szName); // 添加當前風格對應的名稱字符串
    end;
  end;

  if (nNumStyles = 0) then lstrcat(szBuf, 'none'); // 沒有匹配風格
  lstrcat(szBuf, ')'#13#10); // 結尾
end;

  // 向szBuf尾部添加字符串形式的額外內存字節數值信息
procedure VoyHelp_AppendExtraBytes(szBuf: PChar; hWndSubject: HWND;
  nExtraBytesID: Integer);
var
  nExtraByteNum, nExtraBytes: Integer;
  bByte: DWORD; // wvsprintf()需要4字節變量, 所以我用DWORD來放Byte, ^^
  pfnGetWord: function(hWnd: HWND; nIndex: Integer): Word; stdcall;
  List: array[0..1] of Integer; // wvsprintf()轉換列表
begin
  if (nExtraBytesID = GCL_CBCLSEXTRA) then
  begin
    pfnGetWord := @GetClassWord;
    List[0] := Integer(PChar('Class'));
  end else
  begin
    pfnGetWord := @GetWindowWord;
    List[0] := Integer(PChar('Windows'));
  end;
    
  nExtraBytes := GetClassLong(hWndSubject, nExtraBytesID); // 額外內存字節數
  List[1] := nExtraBytes;

  wvsprintf(SearchEnd(szBuf), '%s extra bytes:'#9'%u (', @List[0]); // 開始

  nExtraByteNum := 0;
  while (nExtraByteNum < nExtraBytes) do // 遍歷各字節
  begin
    if (nExtraByteNum = 0) then
      bByte := LoByte(pfnGetWord(hWndSubject, nExtraByteNum)) // 內存 $ABCD 等于 $CDAB
    else begin
      lstrcat(szBuf, ' '); // 不是第一個字節, 則先添加分隔符
      bByte := HiByte(pfnGetWord(hWndSubject, nExtraByteNum - 1)); // 第nExtraByteNum字節
    end;
    wvsprintf(SearchEnd(szBuf), '0x%02x', @bByte); // IntToStr()
    Inc(nExtraByteNum);
  end;

  if (nExtraByteNum = 0) then lstrcat(szBuf, 'none'); // 無額外空間
  lstrcat(szBuf, ')'#13#10); // 結尾
end;

  // 添加hWndSubject窗體的窗體類信息至szBuf尾部
procedure VoyHelp_SetClassInfo(szBuf: PChar; hWndSubject: HWND);
var
  szClassName: array[0..100] of Char;
  List: array[0..9] of DWORD; // wvsprintf()轉換列表
begin
  szClassName[0] := #0;

 // 開頭標題
  lstrcat(szBuf, '********* CLASS INFORMATION *********'#13#10);

 // 窗體類名
  GetClassName(hWndSubject, szClassName, SizeOf(szClassName));

 // 注意, 這里應該用GetClassWord/Long而不是GetClassInfoEx
 // 因為GetClassInfoEx無法取到在其他進程注冊的窗體類的信息

 // 轉換列表
  List[0] := DWORD(@szClassName[0]); // 類名稱
  List[1] := GetClassWord(hWndSubject, GCW_ATOM); // 類原子
  List[2] := GetClassLong(hWndSubject, GCL_HMODULE); // 注冊模塊
  List[3] := GetClassLong(hWndSubject, GCL_WNDPROC); // 窗體過程
  List[4] := GetClassLong(hWndSubject, GCL_HICON);   // 圖標句柄
  List[5] := GetClassLong(hWndSubject, GCL_HICONSM); // 小圖標句柄
  List[6] := GetClassLong(hWndSubject, GCL_HCURSOR); // 光標句柄
  List[7] := GetClassLong(hWndSubject, GCL_HBRBACKGROUND); // 背景畫刷
  List[8] := GetClassLong(hWndSubject, GCL_MENUNAME); // 菜單名稱
  List[9] := GetClassLong(hWndSubject, GCL_STYLE); // 類風格

 // 轉換到尾部
  wvsprintf(
    SearchEnd(szBuf),
    'Class name:'#9'%s'#13#10 +
    'Atom:'#9'0x%04x'#13#10 +
    'hInstance:'#9'0x%08x'#13#10 +
    'lpfnWndProc:'#9'0x%08x'#13#10 +
    'hIcon:'#9'0x%08x'#13#10 +
    'hIconSm:'#9'0x%08x'#13#10 +
    'hCursor:'#9'0x%08x'#13#10 +
    'hbrBackground:'#9'0x%08x'#13#10 +
    'lpszMenuName:'#9'0x%08x'#13#10 +
    'Class styles:'#9'0x%08x',
    @List[0]);

 // 窗體類風格字符串
  VoyHelp_AppendStyleStrings(szBuf, g_szClassStyles, GetClassLong(hWndSubject, GCL_STYLE));

 // 額外空間字節列表
  VoyHelp_AppendExtraBytes(szBuf, hWndSubject, GCL_CBCLSEXTRA);

 // 追加回車
  lstrcat(szBuf, #13#10);
end;

  // Window Properties 枚舉回調函數
function VoyHelp_PropEnumProcEx(hWnd: HWND; lpszString: PChar;
  hData: THandle; dwData: DWORD): BOOL; stdcall;
var
  szBuf: PChar;
  List: array[0..1] of DWORD; // wvsprintf() 轉換列表
begin
  szBuf := PChar(dwData); // 自定義數據, 此處是目標字符串地址

  List[0] := DWORD(lpszString); // 原子 or 字符串
  List[1] := hData; // 數據

  if (DWORD(lpszString) <= $0000FFFF) then // 原子 or 字符串
    wvsprintf(SearchEnd(szBuf), #9'Atom %04x = 0x%08x'#13#10, @List[0])
  else
    wvsprintf(SearchEnd(szBuf), #9'%s = 0x%08x'#13#10, @List[0]);

  Result := TRUE; // 繼續枚舉
end;

  // 添加hWndSubject窗體信息至szBuf尾部
procedure VoyHelp_SetWindowInfo(szBuf: PChar; hWndSubject: HWND);
var
  szWndText, szWndPrntText: array[0..100] of Char;
  hWndParent: HWND;
  dwProcessID: DWORD;
  Rc: TRect;
  List: array[0..17] of DWORD;
begin
 // 取父窗體
  hWndParent := GetWindowLong(hWndSubject, GWL_HWNDPARENT);

 // 開頭標題
  lstrcat(szBuf, '********* WINDOW INSTANCE INFORMATION *********'#13#10);

 // 窗體文本
  if (GetWindowText(hWndSubject, szWndText, SizeOf(szWndText)) = 0) then
    szWndText := '(no caption)';

 // 句柄合法
  if IsWindow(hWndParent) then
  begin
    if (GetWindowText(hWndParent, szWndPrntText, SizeOf(szWndPrntText)) = 0) then
      szWndPrntText := '(no caption)';
  end else
  begin
    szWndPrntText := '(no parent)';
  end;

 // 窗體范圍
  GetWindowRect(hWndSubject, Rc);

 // 所屬進程
  GetWindowThreadProcessId(hWndSubject, @dwProcessID);

 // 轉換列表 
  List[0] := hWndSubject; // 窗體句柄
  List[1] := DWORD(@szWndText[0]); // 窗體標題
  List[2] := GetWindowLong(hWndSubject, GWL_HINSTANCE); // 所屬模塊
  List[3] := hWndParent; // 父窗體句柄
  List[4] := DWORD(@szWndPrntText[0]); // 父窗體標題
  List[5] := GetWindowThreadProcessId(hWndSubject, nil); // 所屬線程
  List[6] := dwProcessID; // 所屬進程
  List[7] := GetWindowLong(hWndSubject, GWL_ID); // 菜單句柄 or 自身(作為子窗體的)ID
  List[8] := GetWindowLong(hWndSubject, GWL_ID);
  List[9] := GetWindowLong(hWndSubject, GWL_USERDATA); // 用戶(類使用者)數據
  List[10] := GetWindowLong(hWndSubject, GWL_USERDATA);
  List[11] := Rc.Left; // 窗體范圍..
  List[12] := Rc.Top;
  List[13] := Rc.Right;
  List[14] := Rc.Bottom;
  List[15] := Rc.Right - Rc.Left; // 窗體尺寸..
  List[16] := Rc.Bottom - Rc.Top;
  List[17] := GetWindowLong(hWndSubject, GWL_STYLE); // 窗體風格

 // 注意, 這里并未嘗試顯示窗體的GWL_WNDPROC屬性,
 // 一個進程無法取另一個進程建立的窗體的回調地址,
 // 因為操作系統總是給GetWindowLong()返回nil ..

 // 轉換到尾部
  wvsprintf(
    SearchEnd(szBuf),
    'Window:'#9'0x%08x - %s'#13#10 +
    'hInstance:'#9'0x%08x'#13#10 +
    'Parent window:'#9'0x%08x - %s'#13#10 +
    'Thread ID:'#9'0x%08x'#13#10 +
    'Process ID:'#9'0x%08x'#13#10 +
    'Menu/ID:'#9'0x%08x (%d)'#13#10 +
    'User data:'#9'0x%08x (%d)'#13#10 +
    'Rectangle:'#9'(%d, %d)-(%d, %d), Dim=%d x %d'#13#10 +
    'Window styles:'#9'0x%08x',
    @List[0]);   

 // 窗體風格字符串
  VoyHelp_AppendStyleStrings(szBuf, g_szWindowStyles,
    GetWindowLong(hWndSubject, GWL_STYLE));

 // 擴展風格數值
  List[0] := GetWindowLong(hWndSubject, GWL_EXSTYLE);
  wvsprintf(SearchEnd(szBuf), 'Extended styles:'#9'0x%08x ', @List[0]);

 // 擴展風格字符串
  VoyHelp_AppendStyleStrings(szBuf, g_szExWindowStyles,
    GetWindowLong(hWndSubject, GWL_EXSTYLE));

 // 額外空間字節列表
  VoyHelp_AppendExtraBytes(szBuf, hWndSubject, GCL_CBWNDEXTRA);

 // Properties 列表標題
  lstrcat(szBuf, 'Properties:');

 // 枚舉 Window Properties                                           
  if (EnumPropsEx(hWndSubject, @VoyHelp_PropEnumProcEx, Integer(szBuf)) <> -1) then
  begin
    lstrcat(szBuf, #9'(none)'#13#10); // 沒有 Properties **
  end;

 // 回車  
  lstrcat(szBuf, #13#10);    
end;

 // 如果作為VoyHelp_UpdateWindowInfo()局部變量, 將導致堆棧溢出
var szBuf: array[0..8192] of Char;
 // 在編輯框控件 hWndEdit 顯示窗口 hWndSubject 各種信息
procedure VoyHelp_UpdateWindowInfo(hWndEdit, hWndSubject: HWND);
begin
 // 置為空串
  szBuf[0] := #0;

 // 窗體類信息
  VoyHelp_SetClassInfo(szBuf, hWndSubject);

 // 窗體信息
  VoyHelp_SetWindowInfo(szBuf, hWndSubject);

 // 傳給Edit
  SetWindowText(hWndEdit, szBuf); 
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级理论片| 国产成人亚洲综合a∨婷婷| 亚洲一区二区在线观看视频| 日韩二区在线观看| 成人app在线| 欧美一区二区三区视频免费播放| 中文字幕av一区 二区| 肉色丝袜一区二区| 99re66热这里只有精品3直播| 日韩欧美中文字幕公布| 亚洲线精品一区二区三区八戒| 激情另类小说区图片区视频区| 色屁屁一区二区| 国产欧美一区二区三区在线老狼| 亚洲色图制服丝袜| 国产成人亚洲精品狼色在线| 日韩一区二区麻豆国产| 一级女性全黄久久生活片免费| 粉嫩aⅴ一区二区三区四区 | 一区二区三区四区在线| 久久精品国产**网站演员| 欧美日韩亚洲综合一区二区三区| 欧美国产视频在线| 国产九色精品成人porny| 欧美一区在线视频| 天天影视网天天综合色在线播放| 一本到高清视频免费精品| 中文字幕不卡在线观看| 国产成人av影院| www成人在线观看| 久久国产精品色| 欧美一二三区精品| 秋霞午夜鲁丝一区二区老狼| 欧美日韩成人综合天天影院| 亚洲大型综合色站| 欧美日韩成人综合| 三级欧美韩日大片在线看| 在线播放中文一区| 午夜日韩在线观看| 8x8x8国产精品| 奇米四色…亚洲| 日韩欧美一区中文| 激情图区综合网| 国产日韩在线不卡| 成人午夜在线视频| 亚洲欧美日韩国产一区二区三区| 99精品欧美一区二区三区小说| 日韩毛片一二三区| 欧美性淫爽ww久久久久无| 亚洲成人www| 日韩欧美国产午夜精品| 六月丁香综合在线视频| 精品国产髙清在线看国产毛片| 午夜精品久久久久久久久久| 欧美高清视频不卡网| 日本成人在线电影网| 久久久久久免费毛片精品| 亚洲国产综合视频在线观看| av高清久久久| 亚洲线精品一区二区三区| 宅男噜噜噜66一区二区66| 美腿丝袜一区二区三区| 国产欧美精品一区| 色狠狠色噜噜噜综合网| 看片的网站亚洲| 国产精品色在线观看| 欧美在线free| 狠狠色丁香婷婷综合久久片| 国产精品久久久久一区二区三区共| 色婷婷香蕉在线一区二区| 日本欧美一区二区| 亚洲国产精品精华液2区45| 色婷婷av一区二区三区大白胸| 婷婷成人综合网| 亚洲国产精品v| 欧美群妇大交群中文字幕| 精品在线观看免费| 亚洲精品欧美在线| 久久天天做天天爱综合色| 色成人在线视频| 国产在线精品一区二区夜色| 亚洲乱码国产乱码精品精可以看 | 久久久青草青青国产亚洲免观| 不卡一区二区在线| 日本sm残虐另类| 成人免费在线播放视频| 日韩欧美一区二区视频| 色噜噜狠狠一区二区三区果冻| 国产做a爰片久久毛片| 亚洲一区视频在线观看视频| 国产欧美日本一区视频| 欧美一区二区视频观看视频| 91视频在线观看| 国产大陆a不卡| 日产精品久久久久久久性色| 日韩1区2区3区| 精品对白一区国产伦| 亚洲国产精品一区二区www在线| 日韩女优制服丝袜电影| 欧美午夜电影在线播放| 成人国产视频在线观看| 经典一区二区三区| 午夜精品一区二区三区免费视频 | 色呦呦日韩精品| 国产精品18久久久| 免费成人在线网站| 肉色丝袜一区二区| 亚洲777理论| 亚洲午夜视频在线| 亚洲精品久久久蜜桃| 国产精品欧美一区二区三区| 2022国产精品视频| 欧美精品一区二区三区久久久| 在线电影一区二区三区| 色婷婷香蕉在线一区二区| 91在线你懂得| 91在线一区二区| 91在线视频在线| 色婷婷狠狠综合| 色成人在线视频| 欧美亚洲综合一区| 日本高清成人免费播放| 日本久久电影网| 在线观看亚洲精品视频| 欧美视频一区二区三区| 欧美嫩在线观看| 欧美一区二区三区啪啪| 日韩亚洲欧美综合| 26uuu国产日韩综合| 国产欧美一区二区三区沐欲 | 久久亚洲综合色| 26uuu国产日韩综合| 国产日韩成人精品| 国产欧美日韩在线| 中文字幕在线视频一区| 国产精品乱码人人做人人爱| 成人免费一区二区三区视频| 亚洲在线观看免费视频| 天堂成人国产精品一区| 国产在线精品免费av| 不卡欧美aaaaa| 色综合久久久久久久| 欧美精选一区二区| 日韩女优av电影在线观看| 久久久久久影视| 亚洲色图制服诱惑| 日韩一区精品视频| 国产久卡久卡久卡久卡视频精品| 97se亚洲国产综合自在线观| 欧美伦理影视网| 国产偷国产偷精品高清尤物| 日韩美女久久久| 日本欧美一区二区三区乱码| 国产+成+人+亚洲欧洲自线| 色婷婷久久久亚洲一区二区三区| 日韩一区二区三区电影在线观看| 亚洲国产经典视频| 亚洲成人av电影在线| 国产精品主播直播| 欧美日韩视频在线第一区| 亚洲精品一区二区三区在线观看 | 欧美亚洲愉拍一区二区| 精品国产区一区| 亚洲精品高清在线| 国产一区啦啦啦在线观看| 日本丶国产丶欧美色综合| 日韩欧美国产不卡| 亚洲尤物视频在线| 国产suv精品一区二区883| 欧美日免费三级在线| 中文幕一区二区三区久久蜜桃| 视频一区国产视频| 一本一道久久a久久精品综合蜜臀| 日韩亚洲欧美在线| 亚洲国产cao| 色综合久久久久综合| 国产欧美在线观看一区| 麻豆精品视频在线观看视频| 色一区在线观看| 国产精品区一区二区三区| 久久黄色级2电影| 精品视频1区2区3区| 自拍偷拍欧美精品| 国产成人免费视频精品含羞草妖精| 欧美人狂配大交3d怪物一区 | 国产精品88av| 正在播放亚洲一区| 一区二区三区不卡视频在线观看| 国产成人综合在线| www国产精品av| 韩国视频一区二区| 日韩一级精品视频在线观看| 天使萌一区二区三区免费观看| 一本到高清视频免费精品| 国产精品久久精品日日| 国产成人精品一区二区三区四区| 欧美一区二区播放| 日本v片在线高清不卡在线观看| 欧美日韩国产一级片| 亚洲永久免费视频|