Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Assembler

Страница: 1 |

 

  Вопрос: GetOpenFileName с флагом OFN_ALLOWMULTISELECT Добавлено: 21.07.06 07:09  

Автор вопроса:  ZagZag | ICQ: 295002202 
Есть ли у кого пример как обработать данные полученные из функции GetOpenFileName с флагом OFN_ALLOWMULTISELECT, т.е. как разделить полученную строку (допустим в ListBox)
В принципе вроде все понятно, но только ничего не работает :)
В масмовских примерах рабочего кода не нашел (может плохо искал)
Вобщем надо показать диалог, и, вне зависимости сколько файлов пользователь выберет, добавить их в ЛистБокс

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 JMP



Вопросов: 6
Ответов: 171
 Профиль | | #1 Добавлено: 21.07.06 07:53
На старейшем языке (В инерпритации либери бэйсик please, не хохотать, на компе с которого я счас пишу 32Мб memory :D) это выглядит так:


z$ = CHR$(0)

struct ofn, _
lStructSize        AS LONG, _
hwndOwner          AS LONG, _
hInstance          AS LONG, _
lpstrFilter$       AS PTR, _
lpstrCustomFilter$ AS PTR, _
nMaxCustFilter     AS LONG, _
nFilterIndex       AS LONG, _
lpstrFile$         AS PTR, _
nMaxFile           AS LONG, _
lpstrFileTitle$    AS PTR, _
nMaxFileTitle      AS LONG, _
lpstrInitialDir$   AS PTR, _
lpstrTitle$        AS PTR, _
flags              AS LONG, _
nFileOffset        AS WORD, _
nFileExtension     AS WORD, _
lpstrDefExt$       AS PTR, _
lCustData          AS LONG, _
lpfnHook           AS LONG, _
lpTemplateName     AS LONG

Filter$ = "Text files"+z$+"*.txt"+z$+"All files" + z$ + "*.*" + z$ + z$

ofn.lStructSize.struct = LEN(ofn.struct)
ofn.lpstrFilter$.struct = Filter$
ofn.nFilterIndex.struct = 1
ofn.lpstrFile$.struct = z$ + SPACE$(260) + z$
ofn.nMaxFile.struct = 260
ofn.lpstrFileTitle$.struct = SPACE$(260) + z$
ofn.nMaxFileTitle.struct = 260
ofn.lpstrInitialDir$.struct = DefaultDir$ + z$
ofn.lpstrTitle$.struct = "Open source file" + z$

OFN.EXPLORER=hexdec("80000";) '--bring new style of selecting
ofn.flags.struct = _OFN_PATHMUSTEXIST or _OFN_FILEMUSTEXIST or OFN.EXPLORER _
OR _OFN_ALLOWMULTISELECT or _OFN_READONLY


ofn.lpstrDefExt$.struct = "txt" + z$


calldll #comdlg32, "GetOpenFileNameA",_
ofn AS struct,_
ok AS LONG

IF ok THEN
    path$ = WinString(ofn.lpstrFile$.struct)   '----get return string up to first null delimiter
    PRINT "PATH=";path$
    p = LEN(path$) + 1       '-----get offset for memory location of next name:

    IF RIGHT$(path$, 1) <> "\" THEN path$ = path$ + "\"

    file$ = WinString(ofn.lpstrFile$.struct+p)  '----get string at new memory location
    PRINT "File=";file$

    WHILE file$<>""
        PRINT "path+file="; path$+file$
        SF$=path$+file$
        p = p + LEN(file$) + 1      '------get offset for new memory location
        file$ = WinString(ofn.lpstrFile$.struct + p)      '--------get string at new memory location
    WEND
END IF  


Best regards,

Ответить

Номер ответа: 2
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #2 Добавлено: 22.07.06 04:20
Спасибо за помощь.
Кстати я на масме код нашел вполне рабочий
вот
Источник: http://homepages.c3bb.com/krashnburn/Asm/General/GenericFileMapping.asm
.386
.model flat,stdcall
option casemap:none

Main PROTO
INCLUDE c:\masm32\include\windows.inc
INCLUDE c:\masm32\include\user32.inc
INCLUDE c:\masm32\include\kernel32.inc
INCLUDE c:\masm32\include\comdlg32.inc
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\comdlg32.lib

.const
MAXSIZE equ 00FFFFh
.data
fintext db "The Decryptor Has Finished Decrypting",0
fincap db "Job Finished",0
AppName db "Generic Decryptor",0
FilterString db "All Files",0,"*.*",0,0
DecimalFormat db "%-lu",0
StringFormat db "%-hS",0
Problem db "Not Successfull",0

.data?
buffer db MAXSIZE dup(?)
FILENAME db 250 dup(?)
Path db 250 dup(?)
hMapFile HANDLE ?
hInstance HINSTANCE ?
hFileRead HANDLE ?
hFileWrite HANDLE ?
pMemory DWORD ?
hMemory DWORD ?
SizeWritten DWORD ?
MEMSIZE DWORD ?
ofn OPENFILENAME <>
FileSizeS LARGE_INTEGER <>
FileSizeU DWORD ?
PATHSIZE DWORD ?
NUMBEROFFILES DWORD ?
PASSES DWORD ?
FileNamePointer DWORD ?
PATHSIZEVAR DWORD ?
BLANK db 64 dup(?)
ENDOFFILENAME DWORD ?

.CODE
Program:
INVOKE GetModuleHandle,NULL
 mov hInstance,EAX
INVOKE Main
INVOKE ExitProcess,NULL
ret

Main proc
mov ofn.lStructSize,SIZEOF ofn
push hInstance
pop ofn.hInstance
mov ofn.lpstrFilter,OFFSET FilterString
mov ofn.lpstrFile,OFFSET buffer
mov ofn.nMaxFile,MAXSIZE
mov ofn.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or \
              OFN_EXPLORER or OFN_HIDEREADONLY or OFN_ALLOWMULTISELECT
INVOKE GetOpenFileName,ADDR ofn
  .IF eax!=TRUE
    INVOKE MessageBox,NULL,ADDR Problem,ADDR AppName,MB_OK
    ret
  .ENDIF

mov eax,OFFSET buffer
mov ebp,OFFSET Path
mov ebx,1

move:
mov cl,BYTE PTR [EAX]
mov BYTE PTR [EBP],cl
 .IF cl!=00
    inc eax
    inc ebp
    inc ebx
    jmp move
 .ENDIF
mov PATHSIZE,EBX
mov PATHSIZEVAR,EBX
inc ebx
mov FileNamePointer,EBX
inc eax
xor ebx,EBX
xor ecx,ECX
COUNTFILES:
mov cl,BYTE PTR [EAX]
  .IF cl==00
    inc ebx
    inc eax
    mov cl,BYTE PTR [EAX]
      .IF cl==00
         mov NUMBEROFFILES,EBX
          .IF EBX==01
               xor EBP,EBP
               mov eax,OFFSET Path
               mov ebx,OFFSET FILENAME
            looop:
           .IF EBP>=250
           mov eax,OFFSET FILENAME
         EOFLOP:
             mov cl,BYTE PTR [EAX]
             .IF cl==00
               mov ENDOFFILENAME,eax
               jmp SINGLE
             .ENDIF
             inc eax
             jmp EOFLOP
           .ENDIF
             mov CL,BYTE PTR [EAX]
             mov BYTE PTR [EBX],CL
            INC EAX
            INC EBX
            INC EBP
            jmp looop
          .ENDIF
             mov PASSES,0
              jmp WORK
      .ENDIF
      .ENDIF
inc eax
jmp COUNTFILES
WORK:
   mov eax,NUMBEROFFILES
  .IF PASSES>=EAX
    JMP DONE
  .ENDIF
   add PASSES,1
    mov eax,OFFSET Path
    mov ebx,OFFSET FILENAME
    xor EBP,EBP
looop2:
    .IF EBP>=250
      JMP loop2done
    .ENDIF
    mov CL,BYTE PTR [EAX]
    mov BYTE PTR [EBX],CL
    INC EAX
    INC EBX
    INC EBP
jmp looop2
loop2done:
xor ebp,ebp
mov eax,OFFSET FILENAME
add eax,PATHSIZE
dec eax
mov BYTE PTR [EAX],05ch
inc eax
mov ebx,OFFSET buffer
add ebx,PATHSIZEVAR
filenamesetup:
mov cl,BYTE PTR [EBX]
mov BYTE PTR [EAX],cl
  .IF cl==00
    inc ebp
    add PATHSIZEVAR,ebp
    mov ENDOFFILENAME,EAX
    jmp SINGLE
  .ENDIF
inc eax
inc ebx
inc ebp
jmp filenamesetup
SINGLE:
   ;INVOKE MessageBox,NULL,ADDR FILENAME,ADDR AppName,MB_OK
   INVOKE CreateFile,ADDR FILENAME,GENERIC_READ or GENERIC_WRITE,NULL,NULL,\
                     OPEN_EXISTING,NULL,NULL
   mov hFileRead,eax
   INVOKE GetFileSize,hFileRead,addr FileSizeS
   mov FileSizeU,eax
INVOKE GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT,FileSizeU
mov hMemory,eax
INVOKE GlobalLock,hMemory
mov pMemory,eax
INVOKE ReadFile,hFileRead,pMemory,FileSizeU,addr SizeWritten,NULL
INVOKE CloseHandle,hFileRead
      mov eax,pMemory
; insert the code that you want to use in here
; eax contains the allocatted memory address
;
;
;
;
;
mov EAX,ENDOFFILENAME
mov DWORD PTR [eax],4345442eh
INVOKE CreateFile,ADDR FILENAME,GENERIC_READ or GENERIC_WRITE,NULL,NULL,\
                  CREATE_ALWAYS,NULL,NULL
exit:
mov hFileRead,eax
INVOKE WriteFile,hFileRead,pMemory,FileSizeU,addr SizeWritten,NULL
INVOKE CloseHandle,hFileRead
INVOKE GlobalUnlock,pMemory
INVOKE GlobalFree,hMemory
.IF NUMBEROFFILES==01
  JMP DONE
.ENDIF
JMP WORK
DONE:
invoke MessageBoxA,NULL,addr fintext,addr fincap,MB_OK
INVOKE PostQuitMessage,NULL
invoke ExitProcess,NULL
Main endp
END Program



Гугля - рулит!

PS
Зря, конечно, тему создал, но зато теперь он в сохранности здесь лежать будет

Ответить

Номер ответа: 3
Автор ответа:
 JMP



Вопросов: 6
Ответов: 171
 Профиль | | #3 Добавлено: 22.07.06 08:39
Зря, конечно, тему создал, но зато теперь он в сохранности здесь лежать будет


Совсем не зря, наверняка кто-нибудь будет нуждаться в этом, и не раз.

Best regards,

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам