Shardik thankyou very much! Excellent work.  Well that's Mac and Windows taken care of 
Even my googling for a Linux version only found suggestions for "ls -l" heehee. Ive got no idea if it's even possible to show a Properties dialog in Linux!  but i have seen some screenshots, so... maybe
 
In the meantime if OS=Linux I've just created a very basic dialog of my own and fill it with the basic file info that PB native commands offer - Size, Attributes, Location, and Dates.  It's not ideal but I figure it's less rude than no support 
Code: Select all
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
  Procedure ShowFileProperties(TargetFile.s, hWnd.l)
    pSEI.SHELLEXECUTEINFO
    pSEI\cbSize = SizeOf(pSEI)
    pSEI\fMask = #SEE_MASK_INVOKEIDLIST | #SEE_MASK_INVOKEIDLIST | #SEE_MASK_FLAG_NO_UI
    pSEI\hWnd = hWnd 
    pSEI\lpVerb = @"Properties"
    pSEI\lpFile = @TargetFile
    pSEI\lpParameters = 0
    pSEI\lpDirectory = 0
    pSEI\nShow = 0
    pSEI\hInstApp = 0
    pSEI\lpIDList = 0  
    ShellExecuteEx_(pSEI)
  EndProcedure
    
  
CompilerElseIf #PB_Compiler_OS = #PB_OS_MacOS  ;full credit to Shardik - http://www.purebasic.fr/english/viewtopic.php?f=19&t=62606&start=7
  ImportC ""
    NSPerformService(*ItemName, *NSPasteboard)
  EndImport  
  Procedure ShowFileProperties(TargetFile.s, hWnd.l=0)   ;hWnd not used in Mac/Linux
    Pasteboard.i = CocoaMessage(0, 0, "NSPasteboard pasteboardWithUniqueName")  
    If Pasteboard
      TypeArray.i = CocoaMessage(0, 0, "NSArray arrayWithObject:$", @"NSStringPboardType")    
      If TypeArray
        CocoaMessage(0, Pasteboard, "declareTypes:", TypeArray, "owner:", 0)      
        If CocoaMessage(0, Pasteboard,"setString:$", @TargetFile,"forType:$", @"NSStringPboardType") = #YES        
          NSPerformService(CocoaMessage(0, 0,"NSString stringWithString:$", @"Finder/Show Info"), Pasteboard)
        EndIf
      EndIf
    EndIf    
  EndProcedure
    
  
CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
  Procedure ShowFileProperties(TargetFile.s, hWnd.l=0)     ;hWnd not used in Mac/Linux
    OpenDlgProps()    ;TODO: Create a dialog here with controls to set text (txtFileName, txtLocation, txtSize, txtModified, txtAccessed, txtAttribs)
    SetGadgetText(txtFileName, GetFilePart(TargetFile))
    SetGadgetText(txtLocation, GetPathPart(TargetFile))
    qSize.q = FileSize(TargetFile)
    If qSize > 1024*1024*1024
      sSize.s = Str(qSize / 1024 / 1024 / 1024) + " GB  (" + Str(qSize) + " bytes)"  
    ElseIf qSize > 1024*1024
      sSize.s = Str(qSize / 1024 / 1024) + " MB  (" + Str(qSize) + " bytes)"
    ElseIf qSize > 1024
      sSize.s = Str(qSize / 1024) + " KB  (" + Str(qSize) + " bytes)"
    Else
      sSize.s = Str(qSize) + " bytes"
    EndIf    
    SetGadgetText(txtSize, sSize)
    SetGadgetText(txtModified, FormatDate("%mm/%dd/%yyyy %hh:%ii:%ss", GetFileDate(TargetFile,#PB_Date_Modified))) 
    SetGadgetText(txtAccessed, FormatDate("%mm/%dd/%yyyy %hh:%ii:%ss", GetFileDate(TargetFile,#PB_Date_Accessed)))   
    FileAttributes = GetFileAttributes(TargetFile)
    If FileAttributes & #PB_Filesystem_Link: sAttribs.s + "SymbolicLink + ":  EndIf   
    If FileAttributes & #PB_Filesystem_ReadUser: sAttribs.s + "ReadUser + ":  EndIf   
    If FileAttributes & #PB_Filesystem_WriteUser: sAttribs.s + "WriteUser + ":  EndIf   
    If FileAttributes & #PB_Filesystem_ExecUser: sAttribs.s + "ExecUser + ":  EndIf   
    If FileAttributes & #PB_Filesystem_ReadGroup: sAttribs.s + "ReadGroup + ":  EndIf   
    If FileAttributes & #PB_Filesystem_WriteGroup: sAttribs.s + "WriteGroup + ":  EndIf   
    If FileAttributes & #PB_Filesystem_ExecGroup: sAttribs.s + "ExecGroup + ":  EndIf   
    If FileAttributes & #PB_Filesystem_ReadAll: sAttribs.s + "ReadAll + ":  EndIf   
    If FileAttributes & #PB_Filesystem_WriteAll: sAttribs.s + "WriteAll + ":  EndIf   
    If FileAttributes & #PB_Filesystem_ExecAll: sAttribs.s + "ExecAll + ":  EndIf   
    If Right(sAttribs,3) = " + ": sAttribs = Left(sAttribs, Len(sAttribs) - 3): EndIf
    SetGadgetText(txtAttribs, sAttribs)    
  EndProcedure
  
CompilerEndIf