1. Pascal / Говнокод #20488

    −50

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    uses
      ShellAPI;
    
    procedure TForm1.JumpToKey(Key: string; value:string);
    var
      i, n: Integer;
      hWin, htWin, hlWin: HWND;
      ExecInfo: ShellExecuteInfoA;
    begin
      hWin := FindWindowA(PChar('RegEdit_RegEdit'), nil); // не стоит вызывать Ansi-варианты. Лучше вызывать как есть ("FindWindow")
      if hWin = 0 then
      begin
        FillChar(ExecInfo, 60, #0);
        with ExecInfo do
        begin
          cbSize := 60;
          fMask  := SEE_MASK_NOCLOSEPROCESS;
          lpVerb := PChar('open');
          lpFile := PChar('regedit.exe');
          nShow  := 1;
        end;
        ShellExecuteExA(@ExecInfo);
        sleep(500);
        WaitForInputIdle(ExecInfo.hProcess, 200);
        hWin := FindWindowA(PChar('RegEdit_RegEdit'), nil);
      end;
      ShowWindow(hWin, SW_SHOWNORMAL);
      htWin := FindWindowExA(hWin, 0, PChar('SysTreeView32'), nil);
      SetForegroundWindow(htWin);
      i := 30;
      sleep(700);
      repeat
        WaitForInputIdle(ExecInfo.hProcess, 200);
        SendMessageA(htWin, WM_KEYDOWN, VK_LEFT, 0);
        Dec(i);
      until i = 0;
      sleep(700);
      WaitForInputIdle(ExecInfo.hProcess, 200);
      SendMessageA(htWin, WM_KEYDOWN, VK_RIGHT, 0);
      sleep(700);
      i := 1;
      n := Length(Key);
      repeat
        WaitForInputIdle(ExecInfo.hProcess, 200);
        if Key[i] = '\' then
        begin
        SendMessageA(htWin, WM_KEYDOWN, VK_RIGHT, 0);
        end
        else
          SendMessageA(htWin, WM_CHAR, Integer(Key[i]), 0);
        i := i + 1;
      until i = n;
      sleep(500);
      WaitForInputIdle(ExecInfo.hProcess, 200);
    
      if value <> '' then
      begin
        hlWin := FindWindowExA(hWin, 0, PChar('SysListView32'), nil);
        SetForegroundWindow(hlWin);
        i := 30;
        repeat
          //WaitForInputIdle(ExecInfo.hProcess, 200);
          SendMessageA(hlWin, WM_KEYDOWN, VK_LEFT, 0);
          Dec(i);
        until i = 0;
    
        i := 1;
        n := Length(value);
        repeat
          //WaitForInputIdle(ExecInfo.hProcess, 200);
          SendMessageA(hlWin, WM_CHAR, Integer(value[i]), 0);
          i := i + 1;
        until i = n;
      end;
    
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    JumpToKey('HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Current\Version\Run','CTFMON.EXE');
    end;

    Такая вот рыбка ;-) Открывает редактор и разворачивает ключи до заданного параметра.
    Код не мой. Оригинал разворачивал только до названия ключа.

    Запостил: fajes_rown, 08 Августа 2016

    Комментарии (2) RSS

    • HKEY_CURRENT_USER\Software\Microsoft\Win dows\CurrentVersion\Applets\Regedit, LastKey REG_SZ - не?
      Ответить

    Добавить комментарий