Installiertes Programm suchen
Moderator: Moderatoren
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Installiertes Programm suchen
Hallo,
weiss jemand wie ich in Windows die Details zu einem installierten Programm finde ? Ich brauche den Programmpfad dafür, den Programmnamen habe ich. Eine Suche nach dem Namen würde zu lange dauern.
Grüße
Rudolf
weiss jemand wie ich in Windows die Details zu einem installierten Programm finde ? Ich brauche den Programmpfad dafür, den Programmnamen habe ich. Eine Suche nach dem Namen würde zu lange dauern.
Grüße
Rudolf
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
- HaPe
- 1000 working lines a day
- Beiträge: 996
- Registriert: So, 15. Nov 2015 17:44
- Wohnort: 71665 Vaihingen-Enz
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 15 Mal
Re: Installiertes Programm suchen
Hallo Rudolf !
https://msdn.microsoft.com/de-de/librar ... s.85).aspx
Ich weiß jetzt nicht ob dir das hilft, aber FindExecutable liefert dir den Namen und das Verzeichnis des Programmes das in Windows für ein bestimmtes Dokument registriert ist:weiss jemand wie ich in Windows die Details zu einem installierten Programm finde ?
https://msdn.microsoft.com/de-de/librar ... s.85).aspx
--
Hans-Peter
Hans-Peter
Re: Installiertes Programm suchen
Hallo Rudolf
ich mache das über die Registry - in mehreren Stufen - try and error...
ich mache das über die Registry - in mehreren Stufen - try and error...
Code: Alles auswählen
Function GsApiRegGetExe( cProgName , cDatei )
Local nPos
Local cRet := ""
Local cExt := ""
If Empty( cRet )
cRet := GsApiRegGetPrg( cProgName , 1 )
EndIf
If Empty( cRet )
cRet := GsApiRegGetPrg( cProgName , 2 )
EndIf
If Empty( cRet )
cRet := GsApiRegGetPrg( cProgName , 3 )
EndIf
If Empty( cRet )
If ! Empty( cDatei )
nPos := At( "://" , cDatei )
If nPos > 0
cExt := Left( cDatei , nPos - 1 )
Else
cExt := GsConvFile( cDatei , "E" )
EndIf
If ! Empty( cDatei )
cRet := GsApiRegGetApp( "." + cExt )
EndIf
EndIf
EndIf
Return( cRet )
/*----------------------------------------------------------------------------*/
Function GsApiRegGetPrg( cProgName , nStep )
Local cRet
Local aReg := { 0 , "" , "" } // { HKey , Key , Entry }
cProgName := Upper( cProgName )
If cProgName == "EXPLORER" .Or. cProgName == "DIRECTORY"
aReg := { HKEY_CLASSES_ROOT , "Directory\shell\find\Command" , "" }
ElseIf nStep == 1
aReg := { HKEY_CLASSES_ROOT , "Applications\" + cProgName + ".exe\shell\Open\Command" , "" }
ElseIf nStep == 2
aReg := { HKEY_LOCAL_MACHINE , "SOFTWARE\Microsoft\windows\CurrentVersion\App Paths\" + cProgName + ".exe" , "" }
ElseIf nStep == 3
aReg := { HKEY_CLASSES_ROOT , cProgName + "\shell\Open\Command" , "" }
EndIf
cRet := GsApiQueryRegistryA( aReg )
Return( cRet )
/*----------------------------------------------------------------------------*/
Function GsApiRegGetApp( cExt )
Local cRet
Local aReg := { 0 , "" , "" } // { HKey , Key , Entry }
cExt := AllTrim( Upper( cExt ) )
aReg := { HKEY_CLASSES_ROOT , cExt , "" }
cRet := GsApiQueryRegistryA( aReg )
If ! Empty( cRet )
aReg := { HKEY_CLASSES_ROOT , cRet + "\shell\open\command" , "" }
cRet := GsApiQueryRegistryA( aReg )
EndIf
Return( cRet )
/*----------------------------------------------------------------------------*/
Function GsApiQueryRegistryA( aReg )
Local cName := GsApiQueryRegistry( aReg[1] , aReg[2] , aReg[3] )
Return( cName )
/*----------------------------------------------------------------------------*/
Function GsApiQueryRegistry( nHKEY , cKey , cEntry )
Local cName := "" // Alle Parameter, die an
Local nSize := 0 // API Funktionen übergeben
Local nHandle:= 0 // werden, müssen einen Wert
Local nType := 0 // ungleich NIL haben
Local nRet := 0
Local nDll := 0
nDll := MainDllLoad( "ADVAPI32.DLL" )
IF nDll <> 0
nRet := RegOpenKeyExA( nHKEY , cKey , 0 , KEY_QUERY_VALUE , @nHandle ) // Registry öffnen
If nRet == 0 // Fehler beim öffnen (<>0)
// L„nge und Typ des Eintrags feststellen
RegQueryValueExA( nHandle , cEntry , 0 , @nType , @cName , @nSize )
If nSize > 0
cName := Space( nSize - 1 ) // Leeren String vorbereiten. Er wird per Referenz an die
// API übergeben und enthält dann das Ergebnis.
RegQueryValueExA( nHandle , cEntry , 0 , nType , @cName , @nSize )
EndIf
EndIf
RegCloseKey( nHandle ) // Registry schließen
MainDllUnLoad( nDll )
EndIf
Return( cName )
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Re: Installiertes Programm suchen
Hallo,
danke für die Antworten, leider weiss ich nicht wie ich die API FUnktion nutzen kann, und bei der Funktion von Roland fehlen mir ein paar Funktionen wie MainDllLoad, MainDllUnLoad etc.
Grüße
Rudolf
danke für die Antworten, leider weiss ich nicht wie ich die API FUnktion nutzen kann, und bei der Funktion von Roland fehlen mir ein paar Funktionen wie MainDllLoad, MainDllUnLoad etc.
Grüße
Rudolf
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
Re: Installiertes Programm suchen
Hallo Rudolf
Mag sein dass ich noch was vergessen habe - einfach melden...
Code: Alles auswählen
#define HKEY_CLASSES_ROOT 2147483648
#define HKEY_CURRENT_USER 2147483649
#define HKEY_LOCAL_MACHINE 2147483650
#define HKEY_USERS 2147483651
Code: Alles auswählen
aus
nDll := MainDllLoad( "ADVAPI32.DLL" )
mache
nDll := DllLoad( "ADVAPI32.DLL" )
Code: Alles auswählen
aus
MainDllUnLoad( nDll )
mache
DllUnLoad( nDll )
Code: Alles auswählen
diese Funktion
cExt := GsConvFile( cDatei , "E" )
extrahiert die Dateierweiterung aus cDatei
z.B.:
cDatei := "c:\test.exe"
cExt := "exe"
Code: Alles auswählen
DllFunction RegOpenKeyExA( nHkeyClass , cKeyName , nReserved , nAccess , @nKeyHandle ) ;
Using STDCALL ;
From ADVAPI32.DLL
DllFunction RegQueryValueExA(nKeyHandle,cEntry,nReserved,@nType,@cName,@nSize) ;
Using STDCALL ;
From ADVAPI32.DLL
DllFunction RegCloseKey(nKeyHandle) ;
Using STDCALL ;
From ADVAPI32.DLL
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Re: Installiertes Programm suchen
Hallo Roland,
danke, lässt sich jetzt einbinden, aber bringt leider nichts zurück.
Grüße
Rudolf
danke, lässt sich jetzt einbinden, aber bringt leider nichts zurück.
Grüße
Rudolf
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Installiertes Programm suchen
hat das Teil ein Icon angelegt ? wenn ja ShellLinkResolve()
Everything -> sucht in einer eigenen Datenbank welche direkt aus dem NTFS "gespeist" wird und findet alles in < 1 Sec
arbeitet jetzt auch zusammen mit Total Commander und gibt es als SDK / API mit man was für Xbase++ bauen könnte ...
gruss by OHR
Jimmy
Jimmy
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Re: Installiertes Programm suchen
Hallo Jimmy,
ja, hat ein Icon, mit wildfindwindow findet er es (läuft immer im Hintergrund), aber hier bekomme ich keinen Pfad sondern nur einen handle.
Grüße
Rudolf
das ist jetzt mein Code:
ja, hat ein Icon, mit wildfindwindow findet er es (läuft immer im Hintergrund), aber hier bekomme ich keinen Pfad sondern nur einen handle.
Grüße
Rudolf
das ist jetzt mein Code:
Code: Alles auswählen
#define HKEY_CLASSES_ROOT 2147483648
#define HKEY_CURRENT_USER 2147483649
#define HKEY_LOCAL_MACHINE 2147483650
#define HKEY_USERS 2147483651
DllFunction RegOpenKeyExA( nHkeyClass , cKeyName , nReserved , nAccess , @nKeyHandle ) ;
Using STDCALL ;
From ADVAPI32.DLL
DllFunction RegQueryValueExA(nKeyHandle,cEntry,nReserved,@nType,@cName,@nSize) ;
Using STDCALL ;
From ADVAPI32.DLL
DllFunction RegCloseKey(nKeyHandle) ;
Using STDCALL ;
From ADVAPI32.DLL
Function GsApiRegGetExe( cProgName , cDatei )
******************************************************************
Local nPos
Local cRet := ""
Local cExt := ""
If Empty( cRet )
cRet := GsApiRegGetPrg( cProgName , 1 )
EndIf
If Empty( cRet )
cRet := GsApiRegGetPrg( cProgName , 2 )
EndIf
If Empty( cRet )
cRet := GsApiRegGetPrg( cProgName , 3 )
EndIf
If Empty( cRet )
If ! Empty( cDatei )
nPos := At( "://" , cDatei )
If nPos > 0
cExt := Left( cDatei , nPos - 1 )
Else
cExt := token( cDatei , "." )
EndIf
If ! Empty( cDatei )
cRet := GsApiRegGetApp( "." + cExt )
EndIf
EndIf
EndIf
Return( cRet )
/*----------------------------------------------------------------------------*/
Function GsApiRegGetPrg( cProgName , nStep )
Local cRet
Local aReg := { 0 , "" , "" } // { HKey , Key , Entry }
cProgName := Upper( cProgName )
If cProgName == "EXPLORER" .Or. cProgName == "DIRECTORY"
aReg := { HKEY_CLASSES_ROOT , "Directory\shell\find\Command" , "" }
ElseIf nStep == 1
aReg := { HKEY_CLASSES_ROOT , "Applications\" + cProgName + ".exe\shell\Open\Command" , "" }
ElseIf nStep == 2
aReg := { HKEY_LOCAL_MACHINE , "SOFTWARE\Microsoft\windows\CurrentVersion\App Paths\" + cProgName + ".exe" , "" }
ElseIf nStep == 3
aReg := { HKEY_CLASSES_ROOT , cProgName + "\shell\Open\Command" , "" }
EndIf
cRet := GsApiQueryRegistryA( aReg )
Return( cRet )
/*----------------------------------------------------------------------------*/
Function GsApiRegGetApp( cExt )
Local cRet
Local aReg := { 0 , "" , "" } // { HKey , Key , Entry }
cExt := AllTrim( Upper( cExt ) )
aReg := { HKEY_CLASSES_ROOT , cExt , "" }
cRet := GsApiQueryRegistryA( aReg )
If ! Empty( cRet )
aReg := { HKEY_CLASSES_ROOT , cRet + "\shell\open\command" , "" }
cRet := GsApiQueryRegistryA( aReg )
EndIf
Return( cRet )
/*----------------------------------------------------------------------------*/
Function GsApiQueryRegistryA( aReg )
Local cName := GsApiQueryRegistry( aReg[1] , aReg[2] , aReg[3] )
Return( cName )
/*----------------------------------------------------------------------------*/
Function GsApiQueryRegistry( nHKEY , cKey , cEntry )
Local cName := "" // Alle Parameter, die an
Local nSize := 0 // API Funktionen übergeben
Local nHandle:= 0 // werden, müssen einen Wert
Local nType := 0 // ungleich NIL haben
Local nRet := 0
Local nDll := 0
nDll := DllLoad( "ADVAPI32.DLL" )
IF nDll <> 0
nRet := RegOpenKeyExA( nHKEY , cKey , 0 , KEY_QUERY_VALUE , @nHandle ) // Registry öffnen
If nRet == 0 // Fehler beim öffnen (<>0)
// L„nge und Typ des Eintrags feststellen
RegQueryValueExA( nHandle , cEntry , 0 , @nType , @cName , @nSize )
If nSize > 0
cName := Space( nSize - 1 ) // Leeren String vorbereiten. Er wird per Referenz an die
// API übergeben und enthält dann das Ergebnis.
RegQueryValueExA( nHandle , cEntry , 0 , nType , @cName , @nSize )
EndIf
EndIf
RegCloseKey( nHandle ) // Registry schließen
DllUnLoad( nDll )
EndIf
Return( cName )
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Installiertes Programm suchen
ist sprach von der Xbase++ Function ShellLinkResolve() ... nicht von der Registry.
gruss by OHR
Jimmy
Jimmy
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Re: Installiertes Programm suchen
Hallo Jimmy,
funktioniert leider auch nicht
Grüße Rudolf
funktioniert leider auch nicht
Grüße Rudolf
- Dateianhänge
-
- 2017-10-18_08h19_28.png (12.55 KiB) 7348 mal betrachtet
-
- 2017-10-18_08h18_00.png (12.03 KiB) 7348 mal betrachtet
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Installiertes Programm suchen
ShellLinkResolve() ist das Gegenstück zu ShellLinkCreate() mit dem man einen LINK anlegt
ShellLinkResolve() gibt dir zu einem LINK aus was damit ausgeführt wird
also versuche es mal richtig mit *.LNK FileSyntax
ShellLinkResolve( <cLinkFile> ) --> <cLinkTarget>
Parameter
<cLinkFile>
Eine Zeichenkette mit dem Dateinamen der Verknüpfung. Befindet sich die Verknüpfung nicht im aktuellen Verzeichnis, muß <cLinkFile> als vollständig qualifizierter Pfad angegeben sein.
gruss by OHR
Jimmy
Jimmy
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Re: Installiertes Programm suchen
Hallo Jimmy, aber dann muss ich das Desktop Verzeichnis und das File für den Link vorher suchen, ich werde einfach die Programmverzeichnisse nach der Exe durchsuchen, der Zeitaufwand ist vernachlässigbar. Wenn dort nicht gefunden, muss der User es eben manuell eingeben, wird aber kaum vorkommen denke ich.
Grüße
Rudolf
Grüße
Rudolf
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net