Trang 3 trên tổng số 8 Đầu tiênĐầu tiên 12345... Cuối cùngCuối cùng
Từ 21 tới 30 trên tổng số 71 kết quả

Đề tài: [winapi] Nháy đúp chuột vào Syslistview32 item

  1. #21
    Ngày gia nhập
    09 2016
    Bài viết
    1,009

    Mặc định [winapi] Nháy đúp chuột vào Syslistview32 item

    Xin đính chính, regDet không phải của tôi.

    Pascal Code:
    1. unit rdThds;
    2.  
    3. // Copyright © 2001 by Ziff Davis Media, Inc.
    4. // Written by Neil J. Rubenking
    5.  
    6. // This separate thread handles Registry Detective's search
    7. // for matching keys, values, or data
    8.  
    9. interface
    10. uses windows, sysutils, classes;
    11. //....

  2. #22
    Ngày gia nhập
    09 2016
    Bài viết
    1,009

    Chưa đến ngày hẹn.

    Đây là một CT hoàn chỉnh, đọc các shortcut trên desktop

    Pascal Code:
    1. program ComCtrl32_Access_Demo;
    2. {$APPTYPE CONSOLE}
    3.  
    4. uses
    5.   Windows,
    6.   Messages,
    7.   CommCtrl;
    8.  
    9. const
    10.   ItemBufferBlockSize = $1000;
    11.  
    12. type
    13.   TCallback = function(Capion: string): Boolean; stdcall;
    14.  
    15. type
    16.   PLvItemBuffer = ^TLvItemBuffer;
    17.   TLvItemBuffer = packed record
    18.     case Integer of
    19.       0: (
    20.         LvItem32: packed record
    21.           mask: LongWord;
    22.           iItem: LongInt;
    23.           iSubItem: LongInt;
    24.           state: LongWord;
    25.           stateMask: LongWord;
    26.           pszText: LongWord;
    27.           cchTextMax: LongInt;
    28.           iImage: LongInt;
    29.           lParam: LongWord;
    30.           iIndent: LongInt;
    31.           iGroupId: LongInt;
    32.           cColumns: LongWord;
    33.           puColumns: LongWord
    34.         end);
    35.       1: (LvItemBuff: array[0..ItemBufferBlockSize - 1] of Byte;
    36.         case Integer of
    37.           0: (AnsiText: array[0..ItemBufferBlockSize - 1] of AnsiChar);
    38.           1: (WideText: array[0..ItemBufferBlockSize div 2 - 1] of WideChar);
    39.           2: (ItemText: array[0..ItemBufferBlockSize div SizeOf(Char) - 1] of
    40.             Char));
    41.   end;
    42.  
    43. function Callback(Caption: string): Boolean; stdcall;
    44. begin
    45.   Writeln(Caption);
    46.   Result := True;
    47. end;
    48.  
    49. procedure GetDesktopCaptions(Callback: TCallback); stdcall;
    50. var
    51.   s                 : string;
    52.   hDesktopLV        : THandle;
    53.   ProcessID         : DWORD;
    54.   Process           : THandle;
    55.   Size              : Cardinal; // SIZE_T
    56.   MemLocal          : PLvItemBuffer;
    57.   MemRemote         : PLvItemBuffer;
    58.   NumBytes          : Cardinal; // SIZE_T
    59.   IconCount         : DWORD;
    60.   i                 : Integer;
    61.  
    62.   function GetDesktopListView: HWND;
    63.   var
    64.     wnd             : HWND;
    65.   begin
    66.     wnd := FindWindow('Progman', 'Program Manager');
    67.     if wnd <> 0 then
    68.       wnd := FindWindowEx(wnd, 0, 'SHELLDLL_DefView', nil);
    69.     if wnd <> 0 then
    70.       wnd := FindWindowEx(wnd, 0, 'SysListView32', 'FolderView');
    71.     Result := wnd;
    72.   end;
    73.  
    74. begin
    75.   hDesktopLV := GetDesktopListView;
    76.   if hDesktopLV <> 0 then
    77.   begin
    78.     ProcessId := 0;
    79.     GetWindowThreadProcessId(hDesktopLV, @ProcessId);
    80.     // Prozess öffnen
    81.     Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or
    82.       PROCESS_VM_READ or PROCESS_VM_WRITE, False, ProcessId);
    83.     if Process <> 0 then
    84.     try
    85.       // Lokalen und entfernten (im Zielprozess) Puffer anlegen
    86.       Size := SizeOf(TLvItemBuffer);
    87.       MemLocal := VirtualAlloc(nil, Size, MEM_COMMIT, PAGE_READWRITE);
    88.       MemRemote := VirtualAllocEx(Process, nil, Size, MEM_COMMIT, PAGE_READWRITE);
    89.       if Assigned(MemLocal) and Assigned(MemRemote) then
    90.       try
    91.         // Anzahl der Symbole ermitteln und in einer Schleife durchlaufen
    92.         IconCount := ListView_GetItemCount(hDesktopLV);
    93.         for i := 0 to IconCount - 1 do
    94.         begin
    95.           // TLvItemBuffer-Struktur initialisieren
    96.           ZeroMemory(MemLocal, SizeOf(TLvItemBuffer));
    97.           with MemLocal^ do
    98.           begin
    99.             LVItem32.mask := LVIF_TEXT;
    100.             LVItem32.iItem := i;
    101.             LVItem32.pszText := Cardinal(MemRemote) + ItemBufferBlockSize;
    102.             LVItem32.cchTextMax := High(MemLocal.ItemText) + 1;
    103.           end;
    104.           NumBytes := 0;
    105.           if WriteProcessMemory(Process, MemRemote, MemLocal, Size, NumBytes) // Struktur in den Remoteprozess kopieren
    106.             and
    107.             Boolean(SendMessage(hDesktopLV, LVM_GETITEM, 0, LPARAM(MemRemote))) // Struktur im Remoteprozess füllen
    108.             and
    109.             ReadProcessMemory(Process, MemRemote, MemLocal, Size, NumBytes) // Struktur in die lokale Struktur kopieren
    110.             then
    111.           begin
    112.             // Callback mit Icontext zur Ausgabe aufrufen
    113.             Callback(string(MemLocal^.ItemText));
    114.           end;
    115.         end;
    116.       except
    117.         // Exceptions ignorieren
    118.       end;
    119.       // Aufräumen
    120.       if Assigned(MemRemote) then
    121.         VirtualFreeEx(Process, MemRemote, 0, MEM_RELEASE);
    122.       if Assigned(MemLocal) then
    123.         VirtualFree(MemLocal, 0, MEM_RELEASE);
    124.     finally
    125.       CloseHandle(Process);
    126.     end;
    127.   end
    128.   else
    129.   begin
    130.     Str(GetLastError, s);
    131.     Callback(s);
    132.   end;
    133. end;
    134.  
    135. begin
    136.   GetDesktopCaptions(@Callback);
    137.   Readln;
    138. end.

    Pascal Code:
    1.   function GetDesktopListView: HWND;
    2.   var
    3.     wnd             : HWND;
    4.   begin
    5.     wnd := FindWindow('Progman', 'Program Manager');
    6.     if wnd <> 0 then
    7.       wnd := FindWindowEx(wnd, 0, 'SHELLDLL_DefView', nil);
    8.     if wnd <> 0 then
    9.       wnd := FindWindowEx(wnd, 0, 'SysListView32', 'FolderView');
    10.     Result := wnd;
    11.   end;

  3. #23
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    902

    Cám ơn bạn, tôi sẽ xem kỹ chương trình của bạn sau có gì bàn luận thêm.

  4. #24
    Ngày gia nhập
    09 2016
    Bài viết
    1,009

    Chương trình khi chạy :
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		_GetDesktopListView.jpg
Lần xem:	4
Size:		40.6 KB
ID:		50522

    Hàm được cài đặt trong source code của delphi (path\source\Win32\rtl\win\CommCtrl.pas)
    Pascal Code:
    1. //...
    2. const
    3.   {$EXTERNALSYM LVM_GETITEMCOUNT}
    4.   LVM_GETITEMCOUNT        = LVM_FIRST + 4;
    5. //...
    6. function ListView_GetItemCount(hWnd: HWND): Integer;
    7. begin
    8.   Result := SendMessage(hWnd, LVM_GETITEMCOUNT, 0, 0);
    9. end;
    10. //...

    CT lấy từ internet, một trang tiếng phát xit (google với ComCtrl32_Access_Demo.zip)

    Có một CT khác viết bằng c#, có luôn source code cho phép dblClick vào các cell của SysListView32, nhưng chạy không ổn định sẽ nói sau.

    Tôi vẫn lưu ý các thành viên như ở reply #8
    Nếu bạn không san sẻ điều bạn đã biết
    Ai người trợ giúp những khó khăn đang cần


    Phọt mô xa 2016
    Attached Files Attached Files

  5. #25
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    902

    Mã nguồn trong #22 chỉ ra một hướng mà chúng ta ít để ý tới - đó là viết vào bộ nhớ của tiến trình khác nhằm qua mặt rào cản của Windows.
    Khi chúng ta gởi lênh SendMessage tới ListView32 của chương trình khác có liên quan tới con trỏ chuỗi chỉ tới vùng nhớ của chương trình ta để tiến trình kia ghi vào thì việc ghi vào là bất hợp lệ đối với Windows. Viết vào bộ nhớ tiến trình khác là kỹ thuật tương đối khó so với các bạn mới học.

    @fms17 : Trên mã Pascan gợi ý, tôi chuyển thể về C++/API như hình dưới
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Attack SysListView32.jpg
Lần xem:	10
Size:		100.4 KB
ID:		50525
    Attached Files Attached Files

  6. #26
    Ngày gia nhập
    09 2016
    Bài viết
    1,009

    Mặc định [winapi] Nháy đúp chuột vào Syslistview32 item

    Theo thuyết thông điệp / thông báo thì sự kiện do người dùng tạo ra (click/key/...) cũng giống chương trình khác gửi đến thôi.

    Tất nhiên giả lập / phát sinh các sự kiện cho hợp lý thì khó hơn.

    Rào cản của Windows rất khó hiểu, thường là bắt lỗi của trình biên dịch : các thông tư dưới luật. Cụ thể trong c# thấy nó rất rõ - dùng MsIL có thể viết và chạy - trong Visual Studio không làm được, các ràng buộc về định danh, nhảy tới, ... .

  7. #27
    Ngày gia nhập
    09 2016
    Bài viết
    1,009

    Đây là source code nguyên gốc của regDet : rd_src.zip
    Attached Files Attached Files

  8. #28
    Ngày gia nhập
    03 2012
    Bài viết
    31

    Trích dẫn Nguyên bản được gửi bởi fms17 Xem bài viết
    Chương trình khi chạy :
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		_GetDesktopListView.jpg
Lần xem:	4
Size:		40.6 KB
ID:		50522

    Hàm được cài đặt trong source code của delphi (path\source\Win32\rtl\win\CommCtrl.pas)
    Pascal Code:
    1. //...
    2. const
    3.   {$EXTERNALSYM LVM_GETITEMCOUNT}
    4.   LVM_GETITEMCOUNT        = LVM_FIRST + 4;
    5. //...
    6. function ListView_GetItemCount(hWnd: HWND): Integer;
    7. begin
    8.   Result := SendMessage(hWnd, LVM_GETITEMCOUNT, 0, 0);
    9. end;
    10. //...

    CT lấy từ internet, một trang tiếng phát xit (google với ComCtrl32_Access_Demo.zip)

    Có một CT khác viết bằng c#, có luôn source code cho phép dblClick vào các cell của SysListView32, nhưng chạy không ổn định sẽ nói sau.

    Tôi vẫn lưu ý các thành viên như ở reply #8
    Nếu bạn không san sẻ điều bạn đã biết
    Ai người trợ giúp những khó khăn đang cần


    Phọt mô xa 2016
    Bác cho em xin source c# được không ạ

  9. #29
    Ngày gia nhập
    09 2016
    Bài viết
    1,009

    Có gì để sang năm cho thong thả, cuối năm rất nhiều áp lực, dồn dập nhiều vấn đề phải giải quyết.

    Bác MHoang viết AttackListview.rar đã lấy các items,
    regDet click ảo mở item, focus đến khoá đó trong registry

    có source code khác viết bằng c# nhưng chạy không ổn định

    Theo tôi nên viết bằng c/delphi thì hay hơn netFx trong việc truy xuất hệ thống - HDH
    Đã được chỉnh sửa lần cuối bởi fms17 : 09-12-2016 lúc 12:54 PM.

  10. #30
    Ngày gia nhập
    03 2012
    Bài viết
    31

    Trích dẫn Nguyên bản được gửi bởi fms17 Xem bài viết
    Có gì để sang năm cho thong thả, cuối năm rất nhiều áp lực, dồn dập nhiều vấn đề phải giải quyết.

    Bác MHoang viết AttackListview.rar đã lấy các items,
    regDet click ảo mở item, focus đến khoá đó trong registry

    có source code khác viết bằng c# nhưng chạy không ổn định

    Theo tôi nên viết bằng c/delphi thì hay hơn netFx trong việc truy xuất hệ thống - HDH
    cuối năm nhiều vấn đề nên mới giải quyết cho xong chứ :(. "regDet click ảo mở item" nó doubleclick à bác, chỗ nào ấy nhỉ
    Đã được chỉnh sửa lần cuối bởi pikeman20 : 10-12-2016 lúc 12:48 AM.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn