1. VisualBasic / Говнокод #16114

    −123

    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
    function GetRaz()
    Open "C:NeWFiles.txt" For Output As #1
    Print #1, "0"
    Close
    Shell "cmd /X /C  set PROCESSOR_ARCHITECTURE > C:NeWFiles.txt", vbHide
    1
    Open "C:NeWFiles.txt" For Input As #1
    Do While Not EOF(1)
    Input #1, Items
    Loop
    Close
    If Items = "" Or items = "0" Then GoTo 1
    GetRaz = Replace(Items, "PROCESSOR_ARCHITECTURE=", "")
    End function

    "Получаем разрядность Windows"
    http://vbbook.ru/1401972927/

    Запостил: brutushafens, 04 Июня 2014

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

    • А в реестре ее разве нигде нет? :)
      Ответить
      • Реестр это очень круто. По ссылке автор пишет:
        "Да, я видел пример, где это определялось папкой "Program Files(x86)", однако я считаю, что это скользкий путь."
        Ответить
        • > однако я считаю, что это скользкий путь
          И правильно делает. Я на 32-битной винде запиливал папку Program Files (x86) ради какого-то эксперимента, да так и оставил...
          Ответить
    • А вообще, как правильно её определять?
      И да, Environment.GetEnvironmentVariable("PROC ESSOR_ARCHITECTURE") как замена части этого кода прокатит?
      Ответить
      • Нет. Эффект другой. Код ОПа проверяет разрядность, внезапно, cmd.

        Значение этой переменной зависит от разрядности текущего процесса. Пруф:
        C:\Users\WGH>C:\Python27_32\python.exe -c  "import os; print os.environ['PROCESSOR_ARCHITECTURE']"
        x86
        
        C:\Users\WGH>C:\Python27\python.exe -c  "import os; print os.environ['PROCESSOR_ARCHITECTURE']"
        AMD64


        Edit: ан, нет, вру. cmd наследует архитектуру, если его запускать из другого процесса (как безумно бы это не звучало).
        Ответить
        • Насколько известно в линуксе данный код тоже самое выдаст. Вопрос только настолько ли прост виндовый аналог /proc/cpuinfo
          Ответить
          • Откуда в линуксе %PROCESSOR_ARCHITECTURE%, gh0stwizard?
            Ответить
            • Эммм... ладно, я профан.

              http://blogs.msdn.com/b/david.wang/archive/2006/03/26/howto-detect-process-bitness.aspx

              http://msdn.microsoft.com/en-us/library/windows/desktop/aa384274(v=vs.85).aspx
              Ответить
          • uname -m и никаких проблем.
            Ответить
        • > cmd наследует архитектуру
          Их просто джва. Там каждой твари по паре. Даже джва internet explorer'а.
          Ответить
      • http://msdn.microsoft.com/en-us/library/windows/desktop/ms724958%28v=vs.85%29.aspx

        Так?
        Ответить
      • C:\Users\eth0>systeminfo | find /i "x64-based PC"
        Тип системы: x64-based PC
        Ответить
        • У меня первый запуск systeminfo занимает секунд 10-15, а последующие - 2-3. Офигенно.
          Ответить
          • А там нельзя ограничить выхлоп нужными полями? Всегда вываливает всю инфу целиком?
            Ответить
          • Ну да, не шибко быстрая штука. На самом деле, можно это выдрать через wmic, но искать лень.
            Ответить
    • >>"C:NeWFiles.txt"
      disk C:NeWFiles.txt not found!
      Ответить
      • И ты тоже профан, это создает файл в текущей папке диска С. Можно даже так:
        "C:..\File.txt"
        Ответить
        • А ты попробуй создать файл с ":", профан.
          Ответить
          • cleaned
            Ответить
            • А тут слеша нет, так что это не корень, а текущий каталог. Вряд ли эту поделку положат в program files.
              Ответить
          • > файл с ":"
            Через : вроде бы дополнительные NTFS потоки пишутся?
            Ответить
          • Ну ладно, насчет профана я неудачно пошутил. Но файл C:NeWFiles.txt вполне нормально создается, так что смысла комментария я не понимаю.
            Ответить

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