Могу ли я прочитать реестр Windows из elisp? Как? - PullRequest
4 голосов
/ 15 сентября 2011

Я просто хочу сделать что-то вроде этого

(defun my-fun (reg-path) 
  "reads the value from the given Windows registry path."
     ...??...
)

Есть ли встроенный FN, который делает это?

или в окна встроен инструмент командной строки, который я могу запустить для получения значения reg?

Мне кажется, что я запускаю файл .js в cscript.exe, который делает работу.


ОТВЕТ

(defun my-reg-read (regpath)
  "read a path in the Windows registry. This probably works for string 
  values only. If the path does not exist, it returns nil. "
  (let ((reg.exe (concat (getenv "windir") "\\system32\\reg.exe"))
        tokens last-token)

    (setq reg-value (shell-command-to-string (concat reg.exe " query " regpath))
          tokens (split-string reg-value nil t)
          last-token (nth (1- (length tokens)) tokens))

    (and (not (string= last-token "value.")) last-token)))

==> Спасибо Олегу.

Ответы [ 2 ]

5 голосов
/ 15 сентября 2011

Используйте reg утилиту командной строки.

Команда Emacs

(shell-command "REG QUERY KeyName" &optional OUTPUT-BUFFER ERROR-BUFFER)

позволяет запускать команду оболочки.Выход отправляется на OUTPUT-BUFFER.

0 голосов
/ 16 сентября 2011

Вот что я сделал:

(defun my-reg-read (regpath)
  "read a path in the Windows registry"
  (let ((temp-f (make-temp-file "regread_" nil ".js"))
        (js-code "var WSHShell, value, regpath = '';try{ if (WScript.Arguments.length > 0){regpath = WScript.Arguments(0); WSHShell = WScript.CreateObject('WScript.Shell'); value = WSHShell.RegRead(regpath); WScript.Echo(value); }}catch (e1){ WScript.Echo('error reading registry: ' + e1);}")
        reg-value)
  (with-temp-file temp-f (insert js-code))
  (setq reg-value (shell-command-to-string (concat temp-f " " regpath)))
  (delete-file temp-f)
  reg-value ))

Функция elisp создает временный файл, а затем записывает в него немного логики JavaScript.JavaScript читает реестр Windows по заданному пути.Затем elisp fn запускает временный файл, передавая путь к реестру для чтения.Он удаляет файл, а затем возвращает результат его запуска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...