01MDM
Признателен) работает и без setlocal. или он здесь критичен? просто код будет вставляться в другой батник
Признателен) работает и без setlocal. или он здесь критичен? просто код будет вставляться в другой батник
Setlocal на случай если запускать из консоли несколько раз. Без него %cnt% будет продолжать прибавляться.
Лучше так:
Нужно строки вида преобразовать в и наоборотнапример так:
или еще как то можно экспортировать?можно с помощью
regedit.exe /s regfile.reg
оно теперь привязано к батнику
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\shell32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\shell32.lib
include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib
.data?
PATH db MAX_PATH dup(?)
String db MAX_PATH dup(?)
brinfo BROWSEINFO <>
mestitle dd ?
;StringLen dd ?
.data
;OKButton db 12h, 04h, 4Bh, 04h, 31h, 04h, 40h, 04h, 30h, 04h, 42h, 04h, 4Ch, 04h, 0, 0
.code
start:
invoke GetCommandLine ; вызываем функцию командной строки в eax возврщается смещение
Call MyProc ; проматываем до первого обратного слеша
mov ebx, eax ; сохраним смещение на первый параметр
Call MyProc ; проматываем до второго слеша
mov mestitle, eax ; сохраним смещениена второйпараметр
; заполним BROWSEINFO структуру
mov brinfo.hwndOwner, 0 ; хендл родительского окна, здесь - ноль.
mov brinfo.pidlRoot,0 ; PIDL - характеризует корневую папку с которой начинается обзор
mov brinfo.pszDisplayName, offset PATH ; указатель строки выбранного пути
mov brinfo.lpszTitle, ebx ; указатель строки которая выводится над окном дерева папок
mov brinfo.ulFlags, BIF_RETURNONLYFSDIRS; BIF_USENEWUI ; флаги которые определяют функции и вид диалогового окна
mov brinfo.lpfn, BrowseCallbackProc ; указатель пользовательской функции события, которую вызывает диалоговое окно
mov brinfo.lParam, NULL ; An application-defined value that the dialog box passes to the callback function, if one is specified in lpfn.
mov brinfo.iImage, NULL ; An integer value that receives the index of the image associated with the selected folder, stored in the system image list.
invoke SHBrowseForFolder, ADDR brinfo ; вызываем функцию окна выбора папки
.IF eax!=0 ; 0 - ничего не выбрано
push eax ; сохраним ID папки
invoke SHGetPathFromIDList,eax,addr PATH ; конвертируем ID в путь
invoke CharToOem, addr PATH, addr String ; меняем кодировку строки пути
invoke lstrlen,addr PATH
lea ebx, String
add ebx,eax
mov byte ptr[ebx],0Dh
inc ebx
mov byte ptr[ebx],0Ah
inc ebx
mov byte ptr[ebx],0
invoke StdOut,ADDR String
pop eax ; вытащим ID папки
.ENDIF
invoke ExitProcess,eax ; выходим из программы, eax - код возврата
BrowseCallbackProc proc hwnd:DWORD,uMsg:DWORD,lParam:DWORD,lpData ; подпрограмма диалогового окна выбора папки
.IF uMsg==BFFM_INITIALIZED
; invoke SendMessage,hwnd,BFFM_SETOKTEXT,NULL,addr OKButton ; меняем текст на кнопке ОК (юникод)
invoke SetWindowText,hwnd,mestitle ; меняем заголовок окна
.ENDIF
xor eax,eax
ret
BrowseCallbackProc endp
MyProc proc ; подпрограмма разбора командной строки
next: ; метка цикла
cmp byte ptr[eax],'/' ; знак равен обратному слешу?
je found ; если да выходим
cmp byte ptr[eax],0 ; знак равен 0 - конец строки?
jz esit ; если да выходим из подпрограммы
inc eax ; увеличиваем смещение на 1 - переводим указатель на следующий знак
jmp next ; в начало цикла
found:
mov byte ptr[eax], 0 ; заменяем обратный слеш на 0 - делитель строки
inc eax ; переводим укзатель на следующий знак
esit:
Ret ; возвращаемся в программу
MyProc endp
end start ; конец ассемблирования
; ассемблирование
;C:\masm32\bin\ml.exe /c /coff current.asm
;C:\masm32\bin\link.exe /subsystem:console current.obj
http://www.masm32.com/masmdl.htm
ECHO OFF
COLOR 9F
CLS
chcp 1251
FOR /f "delims=*" %%I IN ( 'current.EXE /TITLE/SUBTITLE/E:\папочка моя' ) DO SET G=%%I
ECHO %G%
pause
Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
Предыдущая тема: Windows 7 Starter