Programme mit dem selben Namen unterscheiden

12/19/2010 13:26 Chillex#1
Hiho an alle ! :D,


Hab eine Frage zum unterscheiden von zwei Anwendungen.
Sie haben den selben Namen und dürfen nicht umbenannt werden.
Exe1 ist in Ordner 1.
Exe2 ist in Ordner 2.


Wie sie sich unterscheiden:

So und nun die Frage ;D

Wie unterscheide ich beide Exen mit Autoit?
Also Autoit soll z.B erkennen dass Exe2 geöffnet ist und nicht Exe1.
Kann Autoit 2 Programme am MD5 Hash unterscheiden?


Ich hoffe jemand hat Ahnung davon. ;)
MfG Chillex
12/19/2010 13:45 maxi39#2
[Only registered and activated users can see links. Click Here To Register...]

€ sons irgend ein pointer nehmen der bei dem einen prozess einzigartig ist so wie bei dem andern der wert
12/19/2010 14:12 Chillex#3
Danke für deine Antwort ;D
Es ist so dass beide Prozesse gleich viel an Ram verbrauchen...
Mhh das mit den Pointern geht schon aber erst nachdem man sich eingeloggt hat.
Wie man sieht geht's hier um einen Spiel (T-"Client").
Und die ganzen Werte der Pointer lassen sich erst auslesen wenn man drinn "im" Spiel ist.

Und naja ich wollt es halt so dass schon z.B beim Laden vom Spiel erkannt wird, ob es sich um Exe1 oder Exe2 handelt, damit dann z.B eine MsgBox aufpoppt wenn Exe1 geöffnet ist in der steht "Exe2 muss aber geöffnet werden".
12/19/2010 14:30 lolerrr#4
hmm warum machst du nicht einen launcher der automatisch die richtige exe startet währ doch viel einfacher!
12/19/2010 14:42 omer36#5
hatte ich mal vor einiger zeit aus nem anderen forum gefunden, vllt hilft es ja.. ^^

PHP Code:
;===============================================================================
; Function 
Name:    GetExtProperty($sPath,$iProp)
; 
Description:      Returns an extended property of a given file.
; 
Parameter(s):     $sPath - The path to the file you are attempting to retrieve an extended property from.
;                   
$iProp - The numerical value for the property you want returned. If $iProp is is set
;                              to -1 then all properties will be returned in a 1 dimensional array in their corresponding order.
;                            
The properties are as follows:
;                            
Name = 0
;                            Size = 1
;                            Type = 2
;                            DateModified = 3
;                            DateCreated = 4
;                            DateAccessed = 5
;                            Attributes = 6
;                            Status = 7
;                            Owner = 8
;                            Author = 9
;                            Title = 10
;                            Subject = 11
;                            Category = 12
;                            Pages = 13
;                            Comments = 14
;                            Copyright = 15
;                            Artist = 16
;                            AlbumTitle = 17
;                            Year = 18
;                            TrackNumber = 19
;                            Genre = 20
;                            Duration = 21
;                            BitRate = 22
;                            Protected = 23
;                            CameraModel = 24
;                            DatePictureTaken = 25
;                            Dimensions = 26
;                            Width = 27
;                            Height = 28
;                            Company = 30
;                            Description = 31
;                            FileVersion = 32
;                            ProductName = 33
;                            ProductVersion = 34
; Requirement(s):   File specified in $spath must exist.
; Return 
Value(s):  On Success - The extended file property, or if $iProp = -1 then an array with all properties
;                   On Failure - 0, @Error - 1 (If file does not exist)
; 
Author(s):        Simucal (Simucal@gmail.com)
; 
Note(s):
;
;===============================================================================


#include <array.au3>
$path = FileOpenDialog("Select a file to read attributes",@ScriptDir,"All (*.*)")
$prop = _GetExtProperty($path,-1)
_ArrayDisplay($prop,"Property Array")

Func _GetExtProperty($sPath, $iProp)
    
Local $iExist, $sFile, $sDir, $oShellApp, $oDir, $oFile, $aProperty, $sProperty
    $iExist 
= FileExists($sPath)
    If 
$iExist = 0 Then
        SetError
(1)
        Return 
0
    
Else
        
$sFile = StringTrimLeft($sPath, StringInStr($sPath, "\", 0, -1))
        
$sDir = StringTrimRight($sPath, (StringLen($sPath) - StringInStr($sPath, "\", 0, -1)))
        
$oShellApp = ObjCreate ("shell.application")
        
$oDir = $oShellApp.NameSpace ($sDir)
        
$oFile = $oDir.Parsename ($sFile)
        If 
$iProp = -1 Then
            Local 
$aProperty[35]
            For 
$i = 0 To 34
                
$aProperty[$i] = $oDir.GetDetailsOf ($oFile, $i)
            Next
            Return 
$aProperty
        Else
            
$sProperty = $oDir.GetDetailsOf ($oFile, $iProp)
            If 
$sProperty = "" Then
                Return 0
            Else
                Return 
$sProperty
            EndIf
        EndIf
    EndIf
EndFunc   ;==>_GetExtProperty 
12/19/2010 14:48 Chillex#6
Hmm ja das würde natürlich auch gehen. (@ das mit dem Launcher ;D)
Nur dann ist das Problem bei anderen ist ja der Ordner mit der Exe nicht an der selben Stelle installiert.
Die meisten haben es wohl unter C:\Programme .. nur dann gibt es ja auch noch welche die es z.B auf "D" haben oder ganz wo anders.
Dann müsste das Programm den Nutzer abfragen wo denn der Ordner mit der Exe ist.
Der Nutzer gibt dann aber vielleicht den falschen Pfad an oder den Pfad zur falschen Exe und schon funktioniert der ganze Rest nicht mehr :/

Die Sache ist, das Programm soll dann auf jedem System unterscheiden können ob Exe2 offen ist oder eine andere.
Gibt's denn keinen Weg den HashWert mit Autoit rauszubekommen?
Dann würde das Ganze ja relativ einfach werden:


Quote:
If $Hash = not "928bd67933a0ea061e8bd31dd8cc0134" then
MsgBox("0,"","falsche Exe geöffnet")
EndIf
($Hash muss rausgefunden werden)

€dit
So hab's nun noch selbst gefunden.
[Only registered and activated users can see links. Click Here To Register...]

Jedenfalls Danke an alle für eure Hilfe ! ;D
12/19/2010 16:36 lolerrr#7
öhm du könntest den ordner aus der Regestry auslesen
12/19/2010 20:38 Lighthex#8
Quote:
#RequireAdmin
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Exe1Pfad=IniRead("Settings.ini","Datenpfad","Exe 1","")
$Exe2Pfad=IniRead("Settings.ini","Datenpfad","Exe 2","")
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Dateinpfad", 346, 105, 192, 124)
$Button1 = GUICtrlCreateButton("Exe 1 Dateinpfad", 240, 8, 99, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Exe 2 Dateinpfad", 240, 40, 99, 25, $WS_GROUP)
$Button3 = GUICtrlCreateButton("Save", 8, 72, 331, 25, $WS_GROUP)
$Input1 = GUICtrlCreateInput($Exe1Pfad, 8, 10, 225, 21)
$Input2 = GUICtrlCreateInput($Exe2Pfad, 8, 42, 225, 21)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$Pfad1 = FileOpenDialog("TClient",@DesktopDir & "\","Exe (*.exe)")
$Pfad1 = StringReplace($Pfad1,"|",@CRLF)
GUICtrlSetData($Input1,$Pfad1)
Case $Button2
$Pfad2 = FileOpenDialog("TClient",@DesktopDir & "\","Exe (*.exe)")
$Pfad2 = StringReplace($Pfad2,"|",@CRLF)
GUICtrlSetData($Input2,$Pfad2)
Case $Button3
Save()
EndSwitch
WEnd

Func Save()
IniWrite("Settings.ini","Datenpfad","Exe 1",GUICtrlRead($Input1))
IniWrite("Settings.ini","Datenpfad","Exe 2",GUICtrlRead($Input2))
$Exe1Pfad=IniRead("Settings.ini","Datenpfad","Exe 1","")
$Exe2Pfad=IniRead("Settings.ini","Datenpfad","Exe 2","")
EndFunc

Ich würde einfach mal den User es angeben lassen also den Dateinpfad der Exe...
12/19/2010 21:46 ZeraPain#9
naja die größe kannst du mit FileGetSize() unterscheiden, die version mit FileGetVersion().
md5 geht jetzt so direkt mit autoit nicht.
12/19/2010 23:49 lolkop#10
natürlich kann man hashes berechnen...

wenn die prozesse allerdings beide bereits gestartet sind, würde ich einfach die größe des main modules einlesen.

dann brauchst du ja nur einen einfachen vergleich machen, welches größer ist, und kannst so die beiden prozesse auseinander halten...