Question: Is there a way in bpy to get a list of all selected files from the file browser?

I have this code, but it is only for the active file selection:

```
selectedFile = ''
for screenArea in bpy.context.window.screen.areas:
   if screenArea.type == 'FILE_BROWSER':
        params = screenArea.spaces[0].params
        selectedFile = os.path.join(params.directory, params.filename)
        break

```

Answer: 
**Can use `directory` in conjunction with `files`**

* It is also possible to use directory` for the invoked filebrowsers
current directory path,
* and there is a propertygroup type for this already defined as
`bpy.types.OperatorFileListElement` which is basically the same as
`bpy.types.PropertyGroup` by a different name and used the same.
* Used `pathlib` over `os` as another point of difference.
<https://blender.stackexchange.com/a/167527/15543>

These changes applied to Fahads answer <https://blender.stackexchange.com/a/183998/15543>

```
import bpy
from pathlib import Path
from bpy_extras.io_utils import ImportHelper 
from bpy.types import Operator, OperatorFileListElement
from bpy.props import CollectionProperty, StringProperty

class OT_TestOpenFilebrowser(Operator, ImportHelper): 
    bl_idname = "test.open_filebrowser" 
    bl_label = "Open the file browser" 
    directory : StringProperty(subtype='DIR_PATH')
    files : CollectionProperty(type=OperatorFileListElement)

    def execute(self, context): 

        """Do something with the selected file(s)."""
        base = Path(self.directory)                
        for f in self.files:
            print(base / f.name)

        return {'FINISHED'}

def register(): 
    bpy.utils.register_class(OT_TestOpenFilebrowser) 

def unregister(): 
    bpy.utils.unregister_class(OT_TestOpenFilebrowser) 

if __name__ == "__main__": 
    register()

    # test call 
    bpy.ops.test.open_filebrowser('INVOKE_DEFAULT')

```
A simplified full code sample for better understanding:

```
import bpy
import os
from bpy_extras.io_utils import ImportHelper 
from bpy.types import Operator
from bpy.props import CollectionProperty

class OT_TestOpenFilebrowser(Operator, ImportHelper): 
    bl_idname = "test.open_filebrowser" 
    bl_label = "Open the file browser" 

    files : CollectionProperty(type=bpy.types.PropertyGroup) # Stores properties

    def execute(self, context): 

        """Do something with the selected file(s)."""

        dirname = os.path.dirname(self.filepath)
        for f in self.files:
            print(os.path.join(dirname, f.name)) #get filepath properties from collection pointer

        return {'FINISHED'}

def register(): 
    bpy.utils.register_class(OT_TestOpenFilebrowser) 

def unregister(): 
    bpy.utils.unregister_class(OT_TestOpenFilebrowser) 

if __name__ == "__main__": 
    register()

# test call 
bpy.ops.test.open_filebrowser('INVOKE_DEFAULT')

```