PureAutoIt - Complete Autoit Functions In Purebasic

Developed or developing a new product in PureBasic? Tell the world about it.
loulou2522
Enthusiast
Enthusiast
Posts: 495
Joined: Tue Oct 14, 2014 12:09 pm

Re: PureAutoIt - Complete Autoit Functions In Purebasic

Post by loulou2522 »

loulou2522 wrote:Thanks WARD for this great code
When did you post a new release ?
loulou2522
Enthusiast
Enthusiast
Posts: 495
Joined: Tue Oct 14, 2014 12:09 pm

Re: PureAutoIt - Complete Autoit Functions In Purebasic

Post by loulou2522 »

HI Ward,
No more news ?
loulou2522
Enthusiast
Enthusiast
Posts: 495
Joined: Tue Oct 14, 2014 12:09 pm

Re: PureAutoIt - Complete Autoit Functions In Purebasic

Post by loulou2522 »

No more news ?
User avatar
Lunasole
Addict
Addict
Posts: 1091
Joined: Mon Oct 26, 2015 2:55 am
Location: UA
Contact:

Re: PureAutoIt - Complete Autoit Functions In Purebasic

Post by Lunasole »

Recently I've used it, just few small changes needed to work fine with newer PB versions.
Really useful stuff, sometimes very cool instead of writing those many routines from scratch
"W̷i̷s̷h̷i̷n̷g o̷n a s̷t̷a̷r"
loulou2522
Enthusiast
Enthusiast
Posts: 495
Joined: Tue Oct 14, 2014 12:09 pm

Re: PureAutoIt - Complete Autoit Functions In Purebasic

Post by loulou2522 »

Hi lunasole,
Can you share your modification ? THanks a lot
User avatar
Lunasole
Addict
Addict
Posts: 1091
Joined: Mon Oct 26, 2015 2:55 am
Location: UA
Contact:

Re: PureAutoIt - Complete Autoit Functions In Purebasic

Post by Lunasole »

loulou2522 wrote:Hi lunasole,
Can you share your modification ? THanks a lot
Hi. All you need is to remove structure declaration at line 4417 (Structure PROCESS_MEMORY_COUNTERS) and remove 3 constants of enumeration at line 84 (Enumeration ; for FileSetPos)
File: PureAutoIt.pbi
"W̷i̷s̷h̷i̷n̷g o̷n a s̷t̷a̷r"
loulou2522
Enthusiast
Enthusiast
Posts: 495
Joined: Tue Oct 14, 2014 12:09 pm

Re: PureAutoIt - Complete Autoit Functions In Purebasic

Post by loulou2522 »

Thanks lunasole
kinglestat
Enthusiast
Enthusiast
Posts: 732
Joined: Fri Jul 14, 2006 8:53 pm
Location: Malta
Contact:

Re: PureAutoIt - Complete Autoit Functions In Purebasic

Post by kinglestat »

this is a really great job
It doesn't work on 64bit for me....but the 32bit version seems to work fine
I may not help with your coding
Just ask about mental issues!

http://www.lulu.com/spotlight/kingwolf
http://www.sen3.net
Rinzwind
Enthusiast
Enthusiast
Posts: 636
Joined: Wed Mar 11, 2009 4:06 pm
Location: NL

Re: PureAutoIt - Complete Autoit Functions In Purebasic

Post by Rinzwind »

Another one is available at the autoit side, but they seem quite different..

https://www.autoitscript.com/forum/topi ... /#comments
https://www.autoitscript.com/forum/appl ... p?id=64240

Main source for archive

Code: Select all

;IncludeFile "FonctionsIncludes\StringIs.PB" ;I separated the functions into several activated files If necessary remove
;IncludeFile "FonctionsIncludes\InetFonctions.PB" ; I separated the functions into several activated files If necessary remove

#File = 0


;Macro     ###########################

Procedure.s ComSpec () ; not work in macro
  ProcedureReturn GetEnvironmentVariable("COMSPEC") 
EndProcedure

Macro ScriptDir ()
GetCurrentDirectory()
EndMacro 

Macro AutoItVersion ()
    "3.3.14.5"
EndMacro

Macro aScriptDir ()
    StringTrimRight(GetPathPart(ProgramFilename()), 1)
EndMacro

Macro ScriptName ()
    GetFilePart(ProgramFilename())
EndMacro

Macro ScriptFullPath ()
    ProgramFilename()
EndMacro

Macro DesktopCommonDir ()
    GetUserDirectory(#PB_Directory_Desktop)
EndMacro

Macro MyDocumentsDir ()
    GetUserDirectory(#PB_Directory_Documents)
EndMacro

Macro ProgramFilesDir ()
    GetUserDirectory(#PB_Directory_Programs)
EndMacro

Macro TempDir ()
    GetTemporaryDirectory()
EndMacro
  
Macro SystemDir ()
   GetEnvironmentVariable("SystemRoot") + "\System32\"
EndMacro   
 
Macro UserProfileDir ()
   GetEnvironmentVariable("UserProfile") + "\"
EndMacro 
 
Macro AppDataDir ()
   GetEnvironmentVariable("AppData") + "\"
EndMacro
 
Macro LogonServer ()
   GetEnvironmentVariable("LOGONSERVER")
 EndMacro
 
Macro HomeShare ()
 GetEnvironmentVariable("HOMESHARE")
EndMacro

Macro HomePath ()
 GetEnvironmentVariable("HOMEPATH")
EndMacro

Macro HomeDrive ()
 GetEnvironmentVariable("HOMEDRIVE")
EndMacro

 Macro UserName ()
   GetEnvironmentVariable("USERNAME")
 EndMacro
 
Macro LocalAppDataDir ()
   GetEnvironmentVariable("LOCALAPPDATA") + "\"
EndMacro
 
Macro ProcessorsThreadNumber ()
  GetEnvironmentVariable("NUMBER_OF_PROCESSORS")
EndMacro  
 
Macro Hours ()
    FormatDate("%hh", Date())
EndMacro

Macro Sec ()
    FormatDate("%ss", Date())
EndMacro

Macro Min ()
    FormatDate("%ii", Date())
EndMacro

Macro MDAY ()
    FormatDate("%dd", Date())
EndMacro

Macro MON ()
    FormatDate("%mm", Date())
EndMacro

Macro Years ()
    FormatDate("%yyyy", Date())
  EndMacro
  
Macro UserName ()
    ComputerName()
EndMacro  
  
Macro UserProfilDir ()
 GetEnvironmentVariable("USERPROFILE") + "\"
EndMacro   

Macro CRLF ()
    #CRLF$
EndMacro

Macro CR ()
    #CR$
EndMacro

Macro LF ()
    #LF$
  EndMacro
  
Macro BlockInput(bool)
    BlockInput_(bool)
EndMacro
  
Macro GetCPUName()
    CPUName()
  EndMacro
  
Macro Sqrt (Number) 
    Sqr(Number)
EndMacro 
  
  
Procedure DesktopHeights ()
ExamineDesktops()
ProcedureReturn DesktopHeight(0)
EndProcedure 
 
Procedure DesktopWidths ()
ExamineDesktops()
ProcedureReturn DesktopWidth(0)
EndProcedure

Procedure DesktopRefresh ()
ExamineDesktops()
ProcedureReturn DesktopFrequency(0)
EndProcedure 

Procedure DesktopDepths ()
ExamineDesktops()
ProcedureReturn DesktopDepth(0)
EndProcedure

Macro BlockInput(bool)
    BlockInput_(bool)
EndMacro
  
Procedure  AutoItX64 ()
CompilerSelect #PB_Compiler_Processor 
CompilerCase #PB_Processor_x86
      ProcedureReturn 0
CompilerCase #PB_Processor_x64
      ProcedureReturn 1
CompilerEndSelect    
EndProcedure 
   

Procedure.s ProcessorArch ()
Command=RunProgram("cmd.exe","/c wmic cpu get architecture","",#PB_Program_Hide | #PB_Program_Open | #PB_Program_Read | #PB_Program_Ascii )
count=0
Arch$=""
If command
While ProgramRunning(command)
  If AvailableProgramOutput(command)
    count=count+1
    ReadCommand$= ReadProgramString(command)
    If Count = 2
      DebugPatch.s=ReplaceString(ReadCommand$," ","")
      If DebugPatch  = "0"
       Arch$ = "x86"
      ElseIf DebugPatch  = "6"
       Arch$ = "IA64"
      ElseIf DebugPatch = "9"
      Arch$ = "x64"
      Else 
      Arch$ = "Unknown"
    EndIf
    EndIf 
  EndIf 
Wend 
EndIf
CloseProgram(command)
ProcedureReturn Arch$
EndProcedure 
  
 
;MacroEnd  ###########################
  
 ;Fonction   ###########################
Procedure IsNumeric(text.s)
  text.s = Trim(UCase(text))
  If FindString(text, ".", 0)
  t.s = StrF(ValF(text.s))
  If t = Left(LSet(text.s, Len(t), "0"), Len(t))
  ProcedureReturn 1
  EndIf
  Else
  t.s = Str(Val(text.s))
  If t = text
  ProcedureReturn 1
  EndIf
  EndIf
EndProcedure

Macro IsNumber (Number)
  IsNumeric(Str(Number))
EndMacro

;######################################################### MSGBOX #################################################################################

Procedure MsgBox (flag,Title.s,Text.s)
#MB_OKCANCEL=$00000001
#MB_ABORTRETRYIGNORE=$00000002 
#MB_YESNOCANCEL=$00000003
#MB_YESNO=$00000004 
#MB_RETRYCANCEL=$00000005
#MB_CANCELTRYCONTINUE=$00000006 
#MB_HELP = $00004000 
#MB_ICONERROR=$00000010 
#MB_ICONQUESTION=$00000020 
#MB_ICONWARNING=$00000030 
#MB_ICONINFORMATION=$00000040
#MB_DEFBUTTON2=$00000100
#MB_DEFBUTTON3=$00000200 
#MB_DEFBUTTON4=$00000300
#MB_SYSTEMMODAL=$0001000 
#MB_TASKMODAL=$00002000 
#MB_DEFAULT_DESKTOP_ONLY=$000020000
#MB_RIGHT=$00080000
#MB_RTLREADING=$00100000
#MB_SETFOREGROUND=$00010000
#MB_TOPMOST=$00040000
#MB_SERVICE_NOTIFICATION=$000200000
ProcedureReturn MessageBox_(0,Text,Title,flag)
EndProcedure 



;######################################################### MSGBOX #################################################################################


Macro Floor(x)
  Round(x, #PB_Round_Down)
EndMacro

Macro Ceiling(x)
  Round(x, #PB_Round_Up)
EndMacro

Macro Randoms (Minimum,Maximum)
    Str (Random(Maximum,Minimum))
EndMacro

Procedure.s FileGetSize(NomFichier.s) ; Update Function
Directory$ = GetCurrentDirectory() 
FileName$ = NomFichier           
If ExamineDirectory(0, Directory$, FileName$)  
    While NextDirectoryEntry(0) 
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
        Size$ = Str(DirectoryEntrySize(0))        
      EndIf
    Wend
    FinishDirectory(0)
  EndIf
  ProcedureReturn Size$
EndProcedure

Macro StringLen (String)
    Len(String)
EndMacro

Macro StringLenS (String)
    Str (Len(String))
EndMacro

Macro ClipPut (String)
    SetClipboardText(String)
EndMacro

Macro ClipGet ()
    GetClipboardText()
EndMacro

Procedure Sleep (Time)
  Delay (Time)
EndProcedure

Macro DirCopy (Source,Dest)
    CopyDirectory(Source,Dest,"", #PB_FileSystem_Recursive)
EndMacro

Macro DirCreate (Source)
    CreateDirectory(Source)
EndMacro

Macro DirRemove (Source)
    DeleteDirectory(Source,"",#PB_FileSystem_Recursive)
EndMacro

Macro StringReplace (String,SearchString,Replace,Occurrence=0,Casesense=0)
    ReplaceString(String,SearchString,Replace,Casesense,Occurrence)
EndMacro

Macro StringRight (String,Count)
    Right (String,Count)
EndMacro

Macro StringLeft (String,Count)
    Left (String,Count)
EndMacro

Macro FileCopy (Source,Dest)
  CopyFile(Source,Dest)
EndMacro

Macro FileMove (Source,Dest)
  CopyFile(Source,Dest)
  DeleteFile(Source)
EndMacro

Procedure FileExists (Source.s)
 If FileSize(Source) = -1
   ProcedureReturn 0
 Else
   ProcedureReturn 1
 EndIf
EndProcedure

Procedure FileDelete (Source.s)
 If FileSize(Source) = -2
    DeleteFile(Source)
    ProcedureReturn 1
  Else
    ProcedureReturn 0
  EndIf
EndProcedure

Macro StringUpper (String)
    UCase (String)
EndMacro

Macro StringLower (String)
    LCase (String)
EndMacro

Macro StringTrimLeft (String,n)
    Mid(String, n+1)
EndMacro

Macro StringTrimRight(String, n)
    Left(String, Len(String) - n)
EndMacro
  
#STIF_DEFAULT = 0 
#STIF_SUPPORT_HEX = 1 

Procedure.s StringToBinary(str$) 
  For x = 1 To Len(str$) 
    hexchar$ = Hex(Asc(Mid(str$, x, 1))) 
    If Len(hexchar$) = 1 
      hexchar$ = "0" + hexchar$ 
    EndIf 
    StringToHex$ + hexchar$ 
  Next x 
  ProcedureReturn "0x"+StringToHex$ 
EndProcedure 
  
Procedure.s BinaryToString(hex$) 
  For x = 1 To Len(hex$) Step 2 
    HexByte$ = "0x" + Mid(hex$, x, 2) 
   StrToIntEx_ (HexByte$, #STIF_SUPPORT_HEX, @ascValue) 
    HexToString$ + Chr(ascValue) 
  Next x 
  ProcedureReturn HexToString$ 
EndProcedure

Macro StringReverse(String)
    ReverseString(String)
EndMacro

Macro String(String)
    Str(String)
EndMacro
 
Macro TimerInit()
    Str (ElapsedMilliseconds())
EndMacro

Macro TimerDiff(StartTime)
    Str ((ElapsedMilliseconds() - Val(StartTime)))
EndMacro
  
Procedure.s FileGetTime (NomFichier.s,flag,DateFormat.s="%mm/%dd/%yyyy %hh:%ii:%ss")
Directory$ = GetCurrentDirectory() 
FileName$ = NomFichier           
If ExamineDirectory(0, Directory$, FileName$)  
  While NextDirectoryEntry(0) 
    If DirectoryEntryType(0) = #PB_DirectoryEntry_File
        If flag = 0
        Time= DirectoryEntryDate(0, #PB_Date_Modified)
        ElseIf flag = 1
        Time = DirectoryEntryDate(0, #PB_Date_Created)
        ElseIf flag = 2
        Time = DirectoryEntryDate(0, #PB_Date_Accessed)
        EndIf 
     EndIf
    Wend
    FinishDirectory(0)
    EndIf
    ProcedureReturn FormatDate(DateFormat, Time)
  EndProcedure
  
Procedure IsAdmin () 
 If IsUserAnAdmin_()
  ProcedureReturn 1
Else
  ProcedureReturn 0
EndIf
EndProcedure   

Procedure.s GetIpToHostname(hostname.s)
  Define result.s = "", netid.i, ip.l
  netid = OpenNetworkConnection(hostname, 0, #PB_Network_UDP)
  If netid
    ip = GetClientIP(netid)
    If ip
      result = IPString(ip)
    EndIf  
    CloseNetworkConnection(netid)
  EndIf
  ProcedureReturn result
EndProcedure

Procedure.s HostNameToIp(hostname.s)
If InitNetwork()
  ProcedureReturn GetIpToHostname(hostname)
EndIf
EndProcedure

Procedure.s Ping (hostname.s)
Ping = RunProgram("Ping",Hostname+" -n 1 -w 255", "", #PB_Program_Hide | #PB_Program_Open | #PB_Program_Read)
cont=0
work=0
If Ping
   While ProgramRunning(Ping)
      risposta.s=ReadProgramString(Ping)
      cont=FindString(risposta,"TTL=",1)
      If cont
        work=1
        time.s=RemoveString(risposta,Left(risposta,cont+3))
      EndIf
   Wend
EndIf
If work
  ProcedureReturn Time
Else
  ProcedureReturn "1"
EndIf
End
EndProcedure 

;#######################FileGetVersion ######################################
  Enumeration
  #FV_FileVersion      = $0001 
  #FV_FileDescription  = $0002 
  #FV_LegalCopyright   = $0004 
  #FV_InternalName     = $0008 
  #FV_OriginalFilename = $0010 
  #FV_ProductName      = $0020 
  #FV_ProductVersion   = $0040 
  #FV_CompanyName      = $0080 
  #FV_LegalTrademarks  = $0100 
  #FV_SpecialBuild     = $0200 
  #FV_PrivateBuild     = $0400 
  #FV_Comments         = $0800 
  #FV_Language         = $1000 
  #FV_All              = $1FFF 
EndEnumeration 
Procedure.s GFVI_GetElementName(elementKey.l)
  If     elementKey = #FV_FILEVERSION        : ProcedureReturn "FileVersion" 
  ElseIf elementKey = #FV_FILEDESCRIPTION    : ProcedureReturn "FileDescription" 
  ElseIf elementKey = #FV_LEGALCOPYRIGHT   : ProcedureReturn "LegalCopyright" 
  ElseIf elementKey = #FV_INTERNALNAME     : ProcedureReturn "InternalName" 
  ElseIf elementKey = #FV_ORIGINALFILENAME : ProcedureReturn "OriginalFilename" 
  ElseIf elementKey = #FV_PRODUCTNAME     : ProcedureReturn "ProductName" 
  ElseIf elementKey = #FV_PRODUCTVERSION   : ProcedureReturn "ProductVersion" 
  ElseIf elementKey = #FV_COMPANYNAME       : ProcedureReturn "CompanyName" 
  ElseIf elementKey = #FV_LEGALTRADEMARKS  : ProcedureReturn "LegalTrademarks" 
  ElseIf elementKey = #FV_SPECIALBUILD     : ProcedureReturn "SpecialBuild" 
  ElseIf elementKey = #FV_PRIVATEBUILD     : ProcedureReturn "PrivateBuild" 
  ElseIf elementKey = #FV_COMMENTS        : ProcedureReturn "Comments" 
  ElseIf elementKey = #FV_Language         : ProcedureReturn "Language" 
  EndIf 
EndProcedure 
CompilerIf #PB_Compiler_Unicode
  Prototype.l GetFileVersionInfoSizeW(lptstrFilename.p-unicode, lpdwHandle.l)
  Prototype.l GetFileVersionInfoW(lptstrFilename.p-unicode, dwHandle.l, dwLen.l, lpData.l)
  Prototype.l VerQueryValueW(pBlock.l,lpSubBlock.p-unicode,lplpBuffer.l,puLen.w)
  Prototype.l VerLanguageNameW(wLang.l,szLang.p-unicode,cchLang.l) 
CompilerElse
  Prototype.l GetFileVersionInfoSizeA(lptstrFilename.p-ascii, lpdwHandle.l)
  Prototype.l GetFileVersionInfoA(lptstrFilename.p-ascii, dwHandle.l, dwLen.l, lpData.l)
  Prototype.l VerQueryValueA(pBlock.l,lpSubBlock.p-ascii,lplpBuffer.l,puLen.w)
  Prototype.l VerLanguageNameA(wLang.l,szLang.p-ascii,cchLang.l)  
CompilerEndIf
Procedure.s FileGetVersion(lptstrFilename$,lekFlags,bFieldName=#False)
  Protected lpdwHandle.l, dwLen.w, lpData.l, lplpBuffer.l, puLen.l, *pBlock, lpSubBlock$ 
  Protected nSize.w, szLang$, bBit.b, lekFlag.l, sElement$, sGFVI$ 
  lplpBuffer = 0 : puLen = 0 : sGFVI$ = "" : nSize = 128 : szLang$ = Space(nSize) 
  If FileSize(lptstrFilename$)>0 
    If OpenLibrary(1,"Version.dll") 
      CompilerIf #PB_Compiler_Unicode
        GetFileVersionInfoSize.GetFileVersionInfoSizeW = GetFunction(1,"GetFileVersionInfoSizeW")
        GetFileVersionInfo.GetFileVersionInfoW = GetFunction(1,"GetFileVersionInfoW")
        VerQueryValue.VerQueryValueW = GetFunction(1,"VerQueryValueW")
        VerLanguageName.VerLanguageNameW = GetFunction(1,"VerLanguageNameW")
      CompilerElse
        GetFileVersionInfoSize.GetFileVersionInfoSizeA = GetFunction(1,"GetFileVersionInfoSizeA")
        GetFileVersionInfo.GetFileVersionInfoA = GetFunction(1,"GetFileVersionInfoA")
        VerQueryValue.VerQueryValueA = GetFunction(1,"VerQueryValueA")
        VerLanguageName.VerLanguageNameA = GetFunction(1,"VerLanguageNameA")
      CompilerEndIf
      dwLen = GetFileVersionInfoSize(lptstrFilename$,@lpdwHandle) 
      If dwLen>0 
        *pBlock=AllocateMemory(dwLen) 
        If *pBlock>0 
          Result = GetFileVersionInfo(lptstrFilename$,0,dwLen,*pBlock) 
          If Result 
            lpSubBlock$ = "\\VarFileInfo\\Translation" 
            Result      = VerQueryValue(*pBlock,lpSubBlock$,@lplpBuffer,@puLen) 
            If Result 
              CPLI$  = RSet(Hex(PeekW(lplpBuffer)),4,"0")+RSet(Hex(PeekW(lplpBuffer+2)),4,"0") 
              VerLanguageName(PeekW(lplpBuffer),szLang$,nSize)
            EndIf 
            lekFlag = 1 
            For bBit = 1 To 12 
              If lekFlag & lekFlags 
                sElement$   = GFVI_GetElementName(lekFlag) 
                lpSubBlock$ = "\\StringFileInfo\\"+CPLI$+"\\"+sElement$ 
                Result      = VerQueryValue(*pBlock,lpSubBlock$,@lplpBuffer,@puLen)
                If Result 
                  If sGFVI$<>"" : sGFVI$+Chr(10) : EndIf 
                  If bFieldName 
                    sGFVI$=sGFVI$+sElement$+":"+Chr(9)+PeekS(lplpBuffer,puLen)
                  Else 
                    sGFVI$=sGFVI$+PeekS(lplpBuffer,puLen) 
                  EndIf 
                EndIf 
              EndIf 
              lekFlag << 1 
            Next 
            If lekFlag & lekFlags 
              If sGFVI$<>"" : sGFVI$+Chr(10) : EndIf 
              If bFieldName 
                sElement$ = GFVI_GetElementName(lekFlag) 
                sGFVI$    = sGFVI$+sElement$+":"+Chr(9)+szLang$
              Else 
                sGFVI$    = sGFVI$+szLang$
              EndIf 
            EndIf 
          EndIf 
          FreeMemory(*pBlock) 
        EndIf 
      EndIf 
      CloseLibrary(1) 
    EndIf 
  EndIf 
  ProcedureReturn sGFVI$ 
EndProcedure
;#######################FileGetVersion ######################################

Procedure.s OSVersions ()
      sVersion.s = ""
      Select OSVersion()
            Case #PB_OS_Windows_NT3_51:       sVersion = "Windows NT3.51"
            Case #PB_OS_Windows_95:           sVersion = "Windows 95"
            Case #PB_OS_Windows_NT_4:         sVersion = "Windows NT4"
            Case #PB_OS_Windows_98:           sVersion = "Windows 98"
            Case #PB_OS_Windows_ME:           sVersion = "Windows ME"
            Case #PB_OS_Windows_2000:         sVersion = "Windows 2000"
            Case #PB_OS_Windows_XP:           sVersion = "Windows XP"
            Case #PB_OS_Windows_Server_2003:  sVersion = "Windows Server 2003"
            Case #PB_OS_Windows_Vista:        sVersion = "Windows Vista"
            Case #PB_OS_Windows_Server_2008:  sVersion = "Windows Server 2008"
            Case #PB_OS_Windows_7:            sVersion = "Windows 7"
            Case #PB_OS_Windows_Server_2008_R2: sVersion = "Windows Server 2008 R2"
            Case #PB_OS_Windows_8:              sVersion = "Windows 8"   
            Case #PB_OS_Windows_Server_2012:    sVersion = "Windows Server 2012"
            Case #PB_OS_Windows_8_1:            sVersion = "Windows 8.1"
            Case #PB_OS_Windows_Server_2012_R2: sVersion = "Windows Server 2012 R2"
            Case #PB_OS_Windows_10:             sVersion = "Windows 10"
            Case #PB_OS_Windows_Future:        sVersion = "Windows Os of the Future"
            Default:                           sVersion = "Unidentified Windows version"
          EndSelect
     ProcedureReturn sVersion
   EndProcedure

   ;FonctionEnd ###########################
   ;Procedure MouseClick (button.s,x=0,y=0,clicks = 1,speed = 10)
   ;  InitMouse()
   ;  ExamineMouse() ; Etat de la souris
   ;  x = MouseX()   ; Position en x de la souris                     
   ;  y = MouseY()   ; Position en y de la souris
     
     
   ; EndProcedure 
   ;############################################### Mouse Functions ##################################
   
   Procedure MouseClick (button.s,x=0,y=0,clicks = 1,speed = 10)
    InitMouse()
    ExamineMouse() ; Etat de la souris
    x = MouseX()   ; Position en x de la souris                     
    y = MouseY()   ; Position en y de la souris
  EndProcedure 
  
  Procedure MouseMoveSpeed (PosX=0,PosY=0,Speed=0)
    InitMouse()
  x.i = DesktopMouseX()
  y.i = DesktopMouseY()
  cal=x-PosX
  cal2=y-PosY
    Debug x
    Debug cal
    
    For i=cal To x
      Debug i
      Delay (Speed)
      SetCursorPos_(i,DesktopMouseY())
      If stringleft (string(cal),1) = "-"
       i=i-1
      Else
      i=i+1
    EndIf 
    Next
    
      For i=cal2 To y
      Debug i
      Delay (Speed)
      SetCursorPos_(DesktopMouseX(),i)
      If stringleft (string(cal2),1) = "-"
       i=i-1
      Else
      i=i+1
      EndIf 
      
    Next
  EndProcedure
  ;MouseMoveSpeed (10,100,1)


  
  
Procedure MouseGetPos (Array xy (1)); 0 Return X | 1 Return Y | 
x.i = DesktopMouseX()
y.i = DesktopMouseY()
xy(0) =x
xy(1) =y
EndProcedure

;############################################### Mouse Functions ##################################

Procedure StringSplit(Array a$(1), s$, delimeter$)
  Protected count, i
  count = CountString(s$,delimeter$) + 1
  Dim a$(count)
  For i = 1 To count
    a$(i - 1) = StringField(s$,i,delimeter$)
  Next
  ProcedureReturn count ;return count of substrings
EndProcedure

Procedure.s FileGetAttrib  (File.s)
    Value = GetFileAttributes(File)
    If Value = -1 
    ProcedureReturn "0"
    Else 
      If Value & #PB_FileSystem_ReadOnly   : txt$ + "R" :EndIf
      If Value & #PB_FileSystem_Archive    : txt$ + "A" :EndIf
      If Value & #PB_FileSystem_System     : txt$ + "S" :EndIf
      If Value & #PB_FileSystem_Hidden     : txt$ + "H" :EndIf 
      If Value & #PB_FileSystem_Normal     : txt$ + "N" :EndIf
      If Value & #PB_FileSystem_Compressed : txt$ + "C" :EndIf    
  EndIf  
ProcedureReturn txt$
EndProcedure

 Macro Beep  (Frequency,Duration)
     Beep_(Frequency,Duration)
 EndMacro

Procedure.s CpuSerialNumber()
    Define highbits.l
    Define lowbits.l
    Define serial.q
    !MOV eax, $80000003
    !CPUID
    !MOV dword [p.v_lowbits], ecx
    !MOV dword [p.v_highbits], edx
    serial = lowbits | highbits << 32
    ProcedureReturn Str(serial)
  EndProcedure
  
  
  
  
  
;############################################### Process Functions ##################################
  
#SystemProcessInformation = $0005
Structure _UNICODE_STRING Align #PB_Structure_AlignC
  usLength.w 
  usMaximumLength.w   
  usBuffer.i
EndStructure
Structure _SYSTEM_PROCESS_INFO Align #PB_Structure_AlignC
  NextEntryOffset.l
  NumberOfThreads.l
  Reserved.q[3]
  CreateTime.q
  UserTime.q
  KernelTime.q
  ImageName._UNICODE_STRING
  BasePriority.l
  ProcessId.i
  InheritedFromProcessId.i
EndStructure
Procedure ProcessList (Array a$(1),Array b$(1))
Dim a$(1)
Dim b$(1)
i=0
Define dwlen, *Buffer, *SPI._SYSTEM_PROCESS_INFO
NtQuerySystemInformation_(#SystemProcessInformation, 0, 0, @dwlen)
If dwlen
  dwlen * 2
  *Buffer = AllocateMemory(dwlen)
  If *Buffer
    If NtQuerySystemInformation_(#SystemProcessInformation, *Buffer, dwlen, @dwlen) = 0
      *SPI = *Buffer
      While *SPI\NextEntryOffset
        If *SPI\ImageName\usBuffer 
        a$(i) =PeekS(*SPI\ImageName\usBuffer, -1, #PB_Unicode)
        b$(i) =RSet(Str(*SPI\ProcessId), 4, "0")
        i=i+1
        ReDim a$ (i)
        ReDim b$ (i)
      EndIf
        *SPI + *SPI\NextEntryOffset
      Wend
    EndIf
    FreeMemory(*Buffer)
    ReDim a$ (i-1)
    ReDim b$ (i-1)
  EndIf
EndIf
EndProcedure

Procedure ClosePID (Pida$) 
    pid = Val (pida$)
    #PROCESS_TERMINATE = $1
    Handle = OpenProcess_ (#PROCESS_TERMINATE,#False,Pid)
    If Handle <> #Null
    If TerminateProcess_ (Handle, 1)
            result = 1
    EndIf
     CloseHandle_ (Handle)
    EndIf
    ProcedureReturn result
EndProcedure

Procedure ProcessClose (NameOrPID$)
  If IsNumeric (NameOrPID$)
    If ClosePID (NameOrPID$)
      ProcedureReturn 1
    Else
      ProcedureReturn 0
    EndIf 
  Else  
Dim ProcessName.s(1) 
Dim PID.s(1)         
ProcessList (ProcessName (),PID ())
For i = 0 To ArraySize (ProcessName ())
  If ProcessName (i) = NameOrPID$
    If ClosePID (PID (i))
      ProcedureReturn 1
    Else
      ProcedureReturn 0
    EndIf 
  EndIf
Next 
EndIf 
ProcedureReturn 0
EndProcedure

Procedure ProcessExists (NameOrPID$)
Dim ProcessName.s(1)
Dim PID.s(1)         
ProcessList (ProcessName (),PID ())
For i = 0 To ArraySize(PID ())
  If PID (i) = NameOrPID$
    ProcedureReturn Val (PID (i))
 ElseIf ProcessName (i) = NameOrPID$
   ProcedureReturn Val (PID (i))
  EndIf 
Next
ProcedureReturn 0
EndProcedure 



Procedure ProcessSetPriority (Process.s, priority)
;$PROCESS_LOW (0) = Veille/Basse
;$PROCESS_BELOWNORMAL (1) = Inférieur à la normale
;$PROCESS_NORMAL (2) = Normale
;$PROCESS_ABOVENORMAL (3) = Supérieure à la normale
;$PROCESS_HIGH (4) = Haute
;$PROCESS_REALTIME (5) = Temps réel (utiliser avec prudence, peut rendre le système instable) 
#PROCESS_ALL_ACCESS = 2035711
#PROCESS_LOW =0 
#PROCESS_BELOWNORMAL =1
#PROCESS_NORMAL =2
#PROCESS_ABOVENORMAL =3
#PROCESS_HIGH        =4
#PROCESS_REALTIME    =5
PIDPriority=ProcessExists (Process)
If PIDPriority
OpenPIDP = OpenProcess_(#PROCESS_ALL_ACCESS, #False,PIDPriority) 

Select priority
  Case 0
    If SetPriorityClass_(OpenPIDP,$00000040) = 0
      ProcedureReturn 0
    Else
      ProcedureReturn 1
      EndIf 
  Case 1
    If SetPriorityClass_(OpenPIDP,$00004000)= 0
      ProcedureReturn 0
    Else
      ProcedureReturn 1
      EndIf 
  Case 2
   If  SetPriorityClass_(OpenPIDP,$00000020)= 0
      ProcedureReturn 0
    Else
      ProcedureReturn 1
      EndIf 
  Case 3
    If SetPriorityClass_(OpenPIDP,$00008000)= 0
      ProcedureReturn 0
    Else
      ProcedureReturn 1
      EndIf 
  Case 4
    If SetPriorityClass_(OpenPIDP,$00000080)= 0
      ProcedureReturn 0
    Else
      ProcedureReturn 1
      EndIf 
  Case 5
    If SetPriorityClass_(OpenPIDP,$00000100)= 0
      ProcedureReturn 0
    Else
      ProcedureReturn 1
      EndIf 
  Default 
   If  SetPriorityClass_(OpenPIDP,priority)= 0
      ProcedureReturn 0
    Else
      ProcedureReturn 1
      EndIf 
    EndSelect 
Else 
  ProcedureReturn 0
  EndIf 

EndProcedure 


;############################################### Process Functions ##################################






;############################################### INI Functions ##################################

Procedure IniWrite (FileName.s,section.s,key.s,value.s)
      Hkml=CreatePreferences(FileName)
      If Hkml = 0
        ProcedureReturn 0
      EndIf 
        PreferenceGroup(Section)
        WritePreferenceString(key,value)
ClosePreferences()  
EndProcedure
     
 Procedure.s IniRead (FileName.s,section.s,key.s,DefaultIni.s="")  
  Hkml=OpenPreferences(FileName)
    If Hkml = 0
        ProcedureReturn "0"
      EndIf 
  PreferenceGroup(Section)
  ExaminePreferenceKeys()
  While  NextPreferenceKey()
    vp.s=PreferenceKeyName()
    If  vp = key
      save.s=ReadPreferenceString(vp,"0")
      ClosePreferences()
      ProcedureReturn save
    Else 
      ProcedureReturn DefaultIni
      EndIf 
  Wend
EndProcedure 

Procedure IniDelete(filename$, section$, key$ = "")
    If OpenPreferences(filename$)
        If key$ = ""
            RemovePreferenceGroup(section$)
        Else
            If PreferenceGroup(section$)
                RemovePreferenceKey(key$)
            EndIf
        EndIf
        ClosePreferences()
    EndIf
  EndProcedure
  
  Procedure IniReadSectionNames(filename$,Array a$(1))
  i=0
    NewList Groups.s()
    If OpenPreferences(filename$)
        ExaminePreferenceGroups()
        While NextPreferenceGroup()
            AddElement(Groups())
            Groups() = PreferenceGroupName()
        Wend
        ClosePreferences()
      EndIf
Define List1.s
ForEach Groups()
  a$(i) = List1 + Groups()
  i=i+1
  ReDim a$ (i)
  Next
EndProcedure
  
  ;############################################### INI Functions ##################################
  
  
  
  
  
  
  
  
  
  
;############################################### Drive Functions ##################################
 
Global Procedure_Error = 0
Global Procedure_Extended = 0
Enumeration
#DRIVE_UNKNOWN = $0000
#DRIVE_REMOVABLE = $0002
#DRIVE_FIXED = $0003
#DRIVE_REMOTE = $0004
#DRIVE_CDROM = $0005
#DRIVE_RAMDISK =$0006

EndEnumeration
Procedure.s DriveGetType(Drive$)
    Procedure_Error = 0
    Procedure_Extended = 0
    Select GetDriveType_(Drive$)
        Case #DRIVE_UNKNOWN
            ProcedureReturn "UNKNOWN"
        Case #DRIVE_REMOVABLE
            ProcedureReturn "REMOVABLE"
        Case #DRIVE_FIXED
            ProcedureReturn "FIXED"
        Case #DRIVE_REMOTE
            ProcedureReturn "REMOTE"
        Case #DRIVE_CDROM
            ProcedureReturn "CDROM"
        Case #DRIVE_RAMDISK
            ProcedureReturn "RAMDISK"
        Default
            Procedure_Error = 1
            ProcedureReturn ""
    EndSelect
  EndProcedure
  
Procedure.s DriveGetSerial(Drive$)
    Protected Serial.l
    If Not GetVolumeInformation_(Drive$,0,0,@Serial,0,0,0,0)
        Procedure_Error = 1
        ProcedureReturn ""
    EndIf
    ProcedureReturn Str(Serial & $FFFFFFFF)
EndProcedure

Procedure.s DriveSpaceFree(Drive$)
    Protected.q free_bytes
    If GetDiskFreeSpaceEx_(Drive$, 0, 0, @free_bytes)
;       ProcedureReturn Str(free_bytes) ; Bytes
;       ProcedureReturn Str(free_bytes/1024.0) ; Kb
        ProcedureReturn StrF(free_bytes/1048576.0, 4) ; Mb
;       ProcedureReturn StrF(free_bytes/1073741824.0, 3) ; Gb
    Else
        Procedure_Error = 1
        ProcedureReturn "0"
    EndIf
EndProcedure

Procedure.s DriveSpaceTotal(Drive$)
    Protected.q total_bytes
    If GetDiskFreeSpaceEx_(Drive$, 0, @total_bytes, 0)
;       ProcedureReturn Str(total_bytes) ; Bytes
;       ProcedureReturn Str(total_bytes/1024.0) ; Kb
        ProcedureReturn StrF(total_bytes/1048576.0, 4) ; Mb
;       ProcedureReturn StrF(total_bytes/1073741824.0, 3) ; Gb
    Else
        Procedure_Error = 1
        ProcedureReturn "0"
    EndIf
EndProcedure

Procedure.s DriveGetLabel(Drive$)
    #MAX_PATH = 256
    Protected Label$
    Label$=Space(#MAX_PATH+1)
    If Not GetVolumeInformation_(Drive$,Label$,#MAX_PATH+1,0,0,0,0,0)
        Procedure_Error = 1
        ProcedureReturn ""
    EndIf
    ProcedureReturn Label$
EndProcedure

Procedure.s DriveGetFileSystem(Drive$)
    #MAX_PATH = 256
    Protected FileSystem$
    FileSystem$=Space(#MAX_PATH+1)
    If GetVolumeInformation_(Drive$,0,0,0,0,0,@FileSystem$,#MAX_PATH+1)
        ProcedureReturn FileSystem$
    Else
        Procedure_Error = 1
        ProcedureReturn "1"
    EndIf
EndProcedure

 
  ;############################################### drive Functions ##################################

Procedure.s FileGetShortName(File$) 
  len = Len(File$) 
  ShortName$ = Space(len) 
  If GetShortPathName_(File$,ShortName$,len) 
    ProcedureReturn ShortName$ 
  Else 
    ProcedureReturn "" 
  EndIf 
EndProcedure 

Procedure.s FileGetLongName(File$) 
  len = Len(File$)+512 
  ShortName$ = Space(len) 
  If GetLongPathName_(File$,ShortName$,len) 
    ProcedureReturn ShortName$ 
  Else 
    ProcedureReturn "" 
  EndIf 
EndProcedure



;################################## HandleFunctions ##########################################################
Procedure.s HandleToHex (Handle)
  Hex$=Hex (Handle)
  If AutoItX64 () = 1
  CountZero=25-Len (Hex$)
  Base$="0x"
  For i = 0 To CountZero
    i=i+1
    Base$=Base$+"0"
  Next
Else
  CountZero=8-Len (Hex$)
  Base$="0x"
  For i = 0 To CountZero
    i=i+1
    Base$=Base$+"0"
  Next
  EndIf 
  ProcedureReturn Base$+Hex$
EndProcedure

Procedure.l HexToHandle (Hex.s)
Erg.l=0
For i.l=1 To Len(Hex)
c.l = Asc(Mid(Hex,i,1))
If c>64
c - 55
EndIf
If c>47
c - 48
EndIf
Erg = Erg << 4 + c
Next
ProcedureReturn erg
EndProcedure

#GW_CHILD=$5
#GW_HWNDNEXT=$2
Procedure FindPartialWindow(part$)
  r=GetWindow_(GetDesktopWindow_(),#GW_CHILD)
  Repeat
    t$=Space(999) : GetWindowText_(r,t$,999)
    If FindString(t$,part$,1)<>0
      w=r
    Else
      r=GetWindow_(r,#GW_HWNDNEXT)
    EndIf
  Until r=0 Or w<>0
  ProcedureReturn w
EndProcedure

Procedure IsHWnd (Class$,Title$=#Null$)
  Handle=FindWindow_(Class$,Title$)
  If Handle 
    ProcedureReturn 1
  Else
    ProcedureReturn 0
  EndIf
EndProcedure 

Procedure.s WinGetHandle (Class$,Title$=#Null$)
  Handle=FindWindow_(Class$,Title$)
  ProcedureReturn HandleToHex (Handle)
EndProcedure 
  
Procedure.s WinWait (TitleOrtext$,timeout = 0)
  If timeout = 0
    Repeat
      Delay (10)
      handle=FindPartialWindow(TitleOrtext$)
      If handle <> 0
        ProcedureReturn HandleToHex (Handle)
      EndIf 
    ForEver
  Else 
    StartTime=ElapsedMilliseconds()
    Repeat
      If ElapsedMilliseconds() - StartTime=>timeout*1000 
        ProcedureReturn "0"
      EndIf
      Delay (10)
      handle=FindPartialWindow(TitleOrtext$)
      If handle <> 0
        ProcedureReturn HandleToHex (Handle)
      EndIf 
 ForEver
EndIf
EndProcedure

Procedure WinExists (TitleOrtext$)
  If IsNumeric (TitleOrText.s)
      Handle=Val (TitleOrText)
    Else 
      Handle=FindPartialWindow(TitleOrtext$)
    EndIf 

  If handle = 0
    ProcedureReturn 0
  Else
    ProcedureReturn 1
    EndIf 
  EndProcedure 
  
  Procedure WinWaitClose (TitleOrtext$,timeout = 0)
    If timeout = 0
      Repeat
        Delay (10)
    handle=FindPartialWindow(TitleOrtext$)
    If handle = 0
      ProcedureReturn 1 
    EndIf
    ForEver
  Else
    StartTime=ElapsedMilliseconds()
    Repeat
      Delay (10)
    handle=FindPartialWindow(TitleOrtext$)
    If handle = 0
      ProcedureReturn 1 
    EndIf
    If ElapsedMilliseconds() - StartTime=>timeout*1000 
        ProcedureReturn 0
    EndIf
      ForEver
    EndIf 
  EndProcedure
  
  
  Procedure WinWaitActive (TitleOrtext$,timeout = 0)
    If timeout = 0
      Repeat
        Delay (10)
    handle=FindPartialWindow(TitleOrtext$)
    If handle <> 0
      ProcedureReturn 1 
    EndIf
    ForEver
  Else
    StartTime=ElapsedMilliseconds()
    Repeat
      Delay (10)
    handle=FindPartialWindow(TitleOrtext$)
    If handle <> 0
      ProcedureReturn 1 
    EndIf
    If ElapsedMilliseconds() - StartTime=>timeout*1000 
        ProcedureReturn 0
    EndIf
      ForEver
    EndIf 
  EndProcedure
  
  
  Procedure.s WinGetProcess (TitleOrtext$)
  If IsNumeric (TitleOrText.s)
      Handle=Val (TitleOrText)
    Else 
      Handle=FindPartialWindow(TitleOrtext$)
    EndIf 
Define.i handle, pid, thrid
If handle And IsWindow_(handle)
  thrid = GetWindowThreadProcessId_(handle, @pid)
  ProcedureReturn Str(pid)
EndIf
EndProcedure

Procedure WinMinimizeAll()
  h = GetWindow_(GetDesktopWindow_(), #GW_CHILD)
  Repeat
    If IsWindowVisible_(h) = #True
      c$ = Space(999) : GetWindowText_(h, c$, 999)
      If c$ <> ""
        ShowWindow_(h,6)
      EndIf
    EndIf
    h = GetWindow_(h, #GW_HWNDNEXT)
  Until h = 0
EndProcedure

Procedure WinKill (TitleOrText.s)
  PID.s=WinGetProcess (TitleOrText.s)
  RunProgram ("cmd.exe","/c taskkill /PID "+pid+" /f","",#PB_Program_Hide | #PB_Program_Open | #PB_Program_Read | #PB_Program_Ascii)
  ProcedureReturn WinExists (TitleOrtext)
EndProcedure 

Procedure SearchHandle (TitleOrtext$)
handle=FindPartialWindow(TitleOrtext$)    
If handle And IsWindow_(handle)
  ProcedureReturn handle
EndIf
EndProcedure

Procedure WinSetState (TitleOrText.s,Flag)
    #SW_HIDE = 0
    #SW_SHOW = 5
    #SW_MINIMIZE = 6
    #SW_MAXIMIZE = 3
    #SW_RESTORE = 9
    #SW_DISABLE = 4
    #SW_ENABLE = 1
    If IsNumeric (TitleOrText.s)
      Handle=Val (TitleOrText)
    Else 
      Handle=SearchHandle (TitleOrText.s)
    EndIf 
     If IsNumeric(Str(Handle)) = 1
       Select flag 
         Case 0
           ShowWindow_(Handle,0)
         Case 5
           ShowWindow_(Handle,5)
         Case 6
           ShowWindow_(Handle,6)
         Case 3
           ShowWindow_(Handle,3)
         Case 9
           ShowWindow_(Handle,9)
         Case 4
           ShowWindow_(Handle,4)
         Case 1 
           ShowWindow_(Handle,1)
         Default 
         ProcedureReturn 0 
       EndSelect
    ProcedureReturn 1
  Else 
    ProcedureReturn 0
    EndIf 
  EndProcedure
  
                                                                                                      
 Procedure WinActive (TitleOrText.s)
    Handle = GetForegroundWindow_ ()
    If IsNumeric (TitleOrText.s)
      Handle2=Val (TitleOrText)
    Else 
      Handle2=SearchHandle (TitleOrText.s)
    EndIf 
    If Handle2 = Handle
    ProcedureReturn 1
    Else 
    ProcedureReturn 0
    EndIf 
  EndProcedure
  
Procedure WinList (Array a$(1),Array b$(1),VisibleWindow = 1)
Dim a$(1)
Dim b$(1)
h = GetWindow_(GetDesktopWindow_(), #GW_CHILD)
i=0
Repeat
    If VisibleWindow = 1 
    If IsWindowVisible_(h) = #True
    c$ = Space(999) : GetWindowText_(h, c$, 999)
    ReDim a$ (i)
    ReDim b$ (i)
    a$(i) = c$
    b$(i) = Str(h)
    i=i+1
  EndIf
Else 
    c$ = Space(999) : GetWindowText_(h, c$, 999)
    ReDim a$ (i)
    ReDim b$ (i)
    a$(i) = c$
    b$(i) = Str(h)
    i=i+1
  EndIf 
    h = GetWindow_(h, #GW_HWNDNEXT)
    
  Until h = 0
    
EndProcedure 


Procedure WinSetTitle (TitleOrText.s,NewTitle.s) 
  If IsNumeric (TitleOrText.s)
    ProcedureReturn SetWindowText_ (Val(TitleOrText.s),NewTitle)
    Else 
Handle=SearchHandle (TitleOrText.s)
ProcedureReturn SetWindowText_ (Handle,NewTitle)
EndIf 
EndProcedure 


Procedure.s PixelGetColor (x,y)
HDC = GetDC_(0)
 PixelColour = GetPixel_(hDC,x,y)
 Red = Red(PixelColour)
 Green = Green(PixelColour)
 Blue = Blue(PixelColour)
 PixelColour$ = "#" + RSet(Hex(Red), 2, "0") + RSet(Hex(Green), 2, "0") + RSet(Hex(Blue), 2, "0")
 ReleaseDC_(0,HDC)
 ProcedureReturn PixelColour$
EndProcedure


Procedure WinSetTrans (TitleOrtext$,transparency)
  alpha=SearchHandle (TitleOrtext$)
  Debug alpha
  If SetLayeredWindowAttributes_(alpha,1,transparency,2)
    ProcedureReturn 1
  Else
    ProcedureReturn 0
    EndIf 
EndProcedure 





;################################## HandleFunctions ##########################################################












;################################## Shutdown ##########################################################

Procedure ShutdownPrivilege()
  #TOKEN_ADJUST_PRIVILEGES = 32   
  #TOKEN_QUERY = 8               
  #SE_PRIVILEGE_ENABLED = 2 
  Structure MyLUID
    LowPart.l
    HighPart.l
    Attributes.l
  EndStructure
  Structure MyTOKEN
    PrivilegeCount.l
    LowPart.l
    HighPart.l
    Attributes.l
  EndStructure
  Global hdlProcessHandle.l
  Global hdlTokenHandle.l
  Global tmpLuid.MyLUID
  Global tkp.MyTOKEN
  Global tkpNewButIgnored.MyTOKEN
  Global lBufferNeeded.l
  hdlProcessHandle = GetCurrentProcess_()
  OpenProcessToken_(hdlProcessHandle, #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @hdlTokenHandle)
  ; Get the LUID for shutdown privilege
  SysName.s = "" + Chr(0)
  Name.s = "SeShutdownPrivilege" + Chr(0)
  Erg.l = LookupPrivilegeValue_(SysName, Name, @tmpLuid)
  tmpLuid\Attributes = #SE_PRIVILEGE_ENABLED
  tkp\PrivilegeCount = 1
  tkp\LowPart = tmpLuid\LowPart
  tkp\HighPart = tmpLuid\HighPart
  tkp\Attributes = tmpLuid\Attributes
  ; Enable the shutdown privilege in the access token of this process
  Erg.l = AdjustTokenPrivileges_(hdlTokenHandle, 0, @tkp, SizeOf(MyTOKEN), @tkpNewButIgnored, @lblBufferNeeded)

EndProcedure

Procedure HibernateAllowed()
   Protected LibraryID
   Protected Result = #False
   
   LibraryID = OpenLibrary(#PB_Any, "powrprof.dll")
   If LibraryID
      Result = CallFunction(LibraryID, "IsPwrHibernateAllowed")
      CloseLibrary(LibraryID)
   EndIf
   
   ProcedureReturn Result
 EndProcedure
 
 Procedure Suspend(Hibernate, ForceCritical=#False, DisableWakeEvent=#False)
   Protected LibraryID
   Protected Result = #False
   
   LibraryID = OpenLibrary(#PB_Any, "powrprof.dll")
   If LibraryID
      Result = CallFunction(LibraryID, "SetSuspendState", Hibernate, ForceCritical, DisableWakeEvent)
      CloseLibrary(LibraryID)
   EndIf
   
   ProcedureReturn Result
EndProcedure
 
Procedure Shutdown (Flag)
  ShutdownPrivilege()
    #SD_LOGOFF=0
    #SD_SHUTDOWN=1
    #SD_REBOOT=2
    #SD_FORCE=4
    #SD_POWERDOWN=8
    #SD_FORCEHUNG=16
    #SD_STANDBY=32
    #SD_HIBERNATE=64
    Select Flag
        Case 0
         ProcedureReturn ExitWindowsEx_ (0,0)
        Case 1
         ProcedureReturn ExitWindowsEx_ (1,0)
        Case 2
         ProcedureReturn ExitWindowsEx_ (2,0)
        Case 4 
         ProcedureReturn ExitWindowsEx_ (4,0)
        Case 8 
         ProcedureReturn ExitWindowsEx_ (8,0)
        Case 16
          ProcedureReturn ExitWindowsEx_ (10,0)
        Case 32
          ProcedureReturn Suspend(0)
        Case 64
          If HibernateAllowed()
            ProcedureReturn Suspend(1)
          Else 
            ProcedureReturn 0
          EndIf
         Default
         ProcedureReturn ExitWindowsEx_ (Flag,0)
    EndSelect
  EndProcedure 


;################################## Shutdown ##########################################################


;################################## Environment ##########################################################
 Macro EnvGET(envvariable)
    GetEnvironmentVariable(envvariable)
EndMacro 
  
Macro EnvSet (envvariable,value)
    SetEnvironmentVariable(envvariable, value)
EndMacro 

  

;################################## Environment ##########################################################





;################################## FileDirDisk  ##########################################################

#SHERB_NOCONFIRMATION = 1
#SHERB_NOPROGRESSUI   = 2
#SHERB_NOSOUND        = 4
Prototype EmptyRecycleBin(hwnd = 0, pszRootPath.s = #Null$, dwFlags = #SHERB_NOCONFIRMATION | #SHERB_NOSOUND | #SHERB_NOPROGRESSUI)
If OpenLibrary(0, "shell32.dll")
  CompilerIf #PB_Compiler_Unicode
    Global FileRecycleEmpty.EmptyRecycleBin = GetFunction(0, "SHEmptyRecycleBinW")
  CompilerElse
    Global FileRecycleEmpty.EmptyRecycleBin = GetFunction(0, "SHEmptyRecycleBinA")
  CompilerEndIf
EndIf

;FileRecycleEmpty()

;################################## FileDirDisk  ##########################################################
Rinzwind
Enthusiast
Enthusiast
Posts: 636
Joined: Wed Mar 11, 2009 4:06 pm
Location: NL

Re: PureAutoIt - Complete Autoit Functions In Purebasic

Post by Rinzwind »

ps what is not working on 64 bit Windows?
Post Reply