Informationen einer Verknüpfung auslesen

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Antworten
rschi
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 38
Registriert: Mo, 25. Sep 2006 13:41

Informationen einer Verknüpfung auslesen

Beitrag von rschi »

Hallo zusammen,

Ich stehe vor folgendem Problem: Ich würde gerne die Information einer Verknüpfung auslesen z.B. Ausführen In, Tastenkombination, Ausführen etc.
Hat das schoneinmal jemand gemacht?

Zusätzlich habe ich noch die Frage wie/ob ich in meiner Applikation abfragen kann durch welche Verknüpfung sie gestartet wurde.

Freundliche Grüsse
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Informationen einer Verknüpfung auslesen

Beitrag von AUGE_OHR »

rschi hat geschrieben:Ich stehe vor folgendem Problem: Ich würde gerne die Information einer Verknüpfung auslesen z.B. Ausführen In, Tastenkombination, Ausführen etc.
Hotkeys auslesen ... da hab ich doch mal ein Script gesehen in einer Zeitschrift ...

es wird wohl auch mit WMI gehen ... aber welche Function ?
probiere doch mal das hier aus (erfordert DIENST WMI)

Code: Alles auswählen

#include "common.ch"
#include "os.ch"
#define CRLF CHR(13)+CHR(10)

#PRAGMA LIBRARY("ASCOM10.LIB")

STATIC lVISTA := .F.

PROCEDURE Main(strComputer,cUser,cPassword)
LOCAL objWMIService
LOCAL colItems
LOCAL cText
LOCAL cName
LOCAL bCollBlock
LOCAL i,iMax
LOCAL j,jMax
LOCAL aitem := {}
LOCAL aProp := {;
"ActionID",;
"Arguments",;
"Caption",;
"Description",;
"Direction",;
"HotKey",;
"IconIndex",;
"Name",;
"Shortcut",;
"ShowCmd",;
"SoftwareElementID",;
"SoftwareElementState",;
"Target",;
"TargetOperatingSystem",;
"Version" }

DEFAULT strComputer TO "Localhost"
DEFAULT cUser       TO "Administrator"
DEFAULT cPassword   TO ""

   CLS

   SET ALTER TO Win32_ShortcutAction.TXT
   SET ALTER ON

   IF "VISTA" $ OS(OS_PRODUCT) .OR. "WIN2003" $ OS(OS_PRODUCT) .OR. "WIN2008" $ OS(OS_PRODUCT)
      lVISTA := .T.
   ENDIF
   IF lVISTA
      IF strComputer == "Localhost"
         objWMIService  := CreateObject( "WbemScripting.SWbemLocator" ):ConnectServer(strComputer, "Root\CIMv2")
      ELSE
         IF EMPTY(cPassword)
            MSGBOX("Need Password")
            QUIT
         ELSE
            objWMIService  := CreateObject( "WbemScripting.SWbemLocator" ):ConnectServer(strComputer, "Root\CIMv2",strComputer+"\"+cUser,cPassword)
         ENDIF
      ENDIF
   ELSE
      objWMIService  := GetObject("WinMgmts:{impersonationLevel=impersonate}\\"+strComputer+"\Root\CIMv2") 
   ENDIF

   colItems       := objWMIService:ExecQuery("select * from Win32_ShortcutAction",,48)
   bCollBlock     := {|oService,n| AADD(aItem,{ n,;
     oService:getProperty("ActionID"),;
     oService:getProperty("Arguments"),;
     oService:getProperty("Caption"),;
     oService:getProperty("Description"),;
     oService:getProperty("Direction"),;
     oService:getProperty("HotKey"),;
     oService:getProperty("IconIndex"),;
     oService:getProperty("Name"),;
     oService:getProperty("Shortcut"),;
     oService:getProperty("ShowCmd"),;
     oService:getProperty("SoftwareElementID"),;
     oService:getProperty("SoftwareElementState"),;
     oService:getProperty("Target"),;
     oService:getProperty("TargetOperatingSystem"),;
     oService:getProperty("Version") })}

   ComEvalCollection(colItems, bCollBlock )

   IF LEN(aItem) > 0
      ? jMax := LEN(aItem)
      ? iMax := LEN(aItem[1])
  ?"*****************************************************************************"
      FOR j := 1 TO jMax
         FOR i := 1 TO iMax-1
            ? SUBSTR(aProp[i]+SPACE(40),1,40)+":",aItem[j,i+1]
         NEXT

?"*****************************************************************************"

      NEXT
   ELSE
      MSGBOX("no Property found ?")
   ENDIF

   SET ALTER OFF
   SET ALTER TO

   Runshell("Win32_ShortcutAction.TXT","Notepad.exe",.T.)

RETURN
oder auch das hier

Code: Alles auswählen

#include "common.ch"
#include "os.ch"
#define CRLF CHR(13)+CHR(10)

#PRAGMA LIBRARY("ASCOM10.LIB")

STATIC lVISTA := .F.

PROCEDURE Main(strComputer,cUser,cPassword)
LOCAL objWMIService
LOCAL colItems
LOCAL cText
LOCAL cName
LOCAL bCollBlock
LOCAL i,iMax
LOCAL j,jMax
LOCAL aitem := {}
LOCAL aProp := {;
"Action" }

DEFAULT strComputer TO "Localhost"
DEFAULT cUser       TO "Administrator"
DEFAULT cPassword   TO ""

   CLS

   SET ALTER TO Win32_ShortcutSAP.TXT
   SET ALTER ON

   IF "VISTA" $ OS(OS_PRODUCT) .OR. "WIN2003" $ OS(OS_PRODUCT) .OR. "WIN2008" $ OS(OS_PRODUCT)
      lVISTA := .T.
   ENDIF
   IF lVISTA
      IF strComputer == "Localhost"
         objWMIService  := CreateObject( "WbemScripting.SWbemLocator" ):ConnectServer(strComputer, "Root\CIMv2")
      ELSE
         IF EMPTY(cPassword)
            MSGBOX("Need Password")
            QUIT
         ELSE
            objWMIService  := CreateObject( "WbemScripting.SWbemLocator" ):ConnectServer(strComputer, "Root\CIMv2",strComputer+"\"+cUser,cPassword)
         ENDIF
      ENDIF
   ELSE
      objWMIService  := GetObject("WinMgmts:{impersonationLevel=impersonate}\\"+strComputer+"\Root\CIMv2") 
   ENDIF

   colItems       := objWMIService:ExecQuery("select * from Win32_ShortcutSAP",,48)
   bCollBlock     := {|oService,n| AADD(aItem,{ n,;
     oService:getProperty("Action") })}

   ComEvalCollection(colItems, bCollBlock )

   IF LEN(aItem) > 0
      ? jMax := LEN(aItem)
      ? iMax := LEN(aItem[1])
?"*****************************************************************************"
      FOR j := 1 TO jMax
         FOR i := 1 TO iMax-1
            ? SUBSTR(aProp[i]+SPACE(40),1,40)+":",aItem[j,i+1]
         NEXT

?"*****************************************************************************"

      NEXT
   ELSE
      MSGBOX("no Property found ?")
   ENDIF

   SET ALTER OFF
   SET ALTER TO

   Runshell("Win32_ShortcutSAP.TXT","Notepad.exe",.T.)

RETURN
gruss by OHR
Jimmy
rschi
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 38
Registriert: Mo, 25. Sep 2006 13:41

Re: Informationen einer Verknüpfung auslesen

Beitrag von rschi »

Vielleicht habe ich mich falsch ausgedrückt.
Ich habe eine Verknüpfung, welche meine Applikation aufruft. Diese Verknüpfung kann überall liegen. Nun würde ich gerne wissen ob es
a) überhaupt möglich ist in der Applikation nachzusehen/herauszufinden von welcher Verknüpfung die Applikation aufgerufen wurde und
b) falls a) möglich ist wie ich die Parameter jener Verknüpfung auslesen kann

Freundliche Grüsse
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Informationen einer Verknüpfung auslesen

Beitrag von Koverhage »

das kommt darauf an was Du auslesen möchtest

Programmpfad und Ausführen in kannst Du ja beim Start der Anwendung feststellen.
Gruß
Klaus
Antworten