Avatar billede tma Juniormester
11. februar 2005 - 09:47 Der er 8 kommentarer og
1 løsning

Hente værdi fra registreringsdatabasen

Hej

Jeg kender Getsetting og savesetting, men har brug for en metode der kan hente en værdi fra en vilkårlig placering i registreringsdatabasen. Konkret så vil jeg gerne finde den nøjagtige placering af Outlook.exe på en brugers harddisk. Den nøgle der kan hjælpe mig ligger på hkey_classes_root\applications\outlook.exe\shell\open\command i en nøgle der hedder command. Det er i dette tilfælde den nøgles værdi jeg vil hente ind i mit program, men det må meget gerne være helt dynamisk.

Torben
11. februar 2005 - 09:51 #1
Jeg har en masse kode, som kan aflæse registreringsdatabasen. Men hvorfor skal du bruge stin til Outlook.exe? Hvis du bare vil starte Outlook, kan du gøre det med ShellExecute:

shellexecute "Outlook.exe",1
Avatar billede tma Juniormester
11. februar 2005 - 10:20 #2
Min vb kender ikke shellexecute. Jeg kender godt brugen af shell, men den kræver sti til filens placering.
11. februar 2005 - 10:24 #3
nej, ShellExecute er ikke en standard-funktion (selvom den bruges ofte). Funktionen er genial, da du kan åbne alle filer, blot de er assosieret med et program i Windows - f.eks. .doc, xls, mdb, bmp, mpg, pdf,....U name it.

Læg denne kode i et modul, hvorefter det vil virke:

Private Declare Function apiShellExecute Lib "Shell32.dll" _
    Alias "ShellExecuteA" _
    (ByVal hWnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _
    ByVal lpParameters As String, _
    ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) _
    As Long

'***App Window Constants***
Public Const WIN_NORMAL = 1        'Open Normal
Public Const WIN_MAX = 3            'Open Maximized
Public Const WIN_MIN = 2            'Open Minimized

'***Error Codes***
Private Const ERROR_SUCCESS = 32&
Private Const ERROR_NO_ASSOC = 31&
Private Const ERROR_OUT_OF_MEM = 0&
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&

Public Function ShellExecute(stFile As String, lShowHow As Long)
Dim lRet As Long, varTaskID As Variant
Dim stRet As String
    'First try ShellExecute
    lRet = apiShellExecute(hWndAccessApp, vbNullString, _
            stFile, vbNullString, vbNullString, lShowHow)
           
    If lRet > ERROR_SUCCESS Then
        stRet = vbNullString
        lRet = -1
    Else
        Select Case lRet
            Case ERROR_NO_ASSOC:
                'Try the OpenWith dialog
                varTaskID = Shell("rundll32.exe shell32.dll,OpenAs_RunDLL " _
                        & stFile, WIN_NORMAL)
                lRet = (varTaskID <> 0)
            Case ERROR_OUT_OF_MEM:
                stRet = "Error: Out of Memory/Resources. Couldn't Execute!"
            Case ERROR_FILE_NOT_FOUND:
                stRet = "Error: File not found.  Couldn't Execute!"
            Case ERROR_PATH_NOT_FOUND:
                stRet = "Error: Path not found. Couldn't Execute!"
            Case ERROR_BAD_FORMAT:
                stRet = "Error:  Bad File Format. Couldn't Execute!"
            Case Else:
        End Select
    End If
    ShellExecute = lRet & _
                IIf(stRet = "", vbNullString, ", " & stRet)
End Function
Avatar billede tma Juniormester
11. februar 2005 - 10:36 #4
Så lige at det ikke er den nøgle der hedder command, men den der hedder (Standard)
Ikke at det gør nogen forskel ift. problemstillingen...
Avatar billede tma Juniormester
11. februar 2005 - 10:42 #5
Interessant..., men den kender ikke:

hWndAccessApp

Mangles der en include?
11. februar 2005 - 10:56 #6
sorry, i stedet for hWndAccessApp kan du f.eks. bruge denne:
Form1.hWnd

hvor Form1 referere til den form, som kalder koden

(jeg ved ikke om der findes en generel handle til en hel VB-application)
11. februar 2005 - 11:09 #7
fandt en lidt kortere version:

Denne placeres i et modul:
Public Declare Function ShellExecute Lib "shell32.dll" _
                                      Alias "ShellExecuteA" ( _
                                      ByVal hwnd As Long, _
                                      ByVal lpOperation As String, _
                                      ByVal lpFile As String, _
                                      ByVal lpParameters As String, _
                                      ByVal lpDirectory As String, _
                                      ByVal nShowCmd As Long) As Long

Herefter lægger du denne kode på f.eks. en knap:
Call ShellExecute(Me.hwnd, vbNullString, "Outlook.exe", vbNullString, vbNullString, vbNormalFocus)
Avatar billede tma Juniormester
11. februar 2005 - 13:01 #8
Hej Thomas

Perfekt! Jeg skal starte vilkårlige typer af filer op, så programmet er lige i øjet...

TAK (og god weekend)
11. februar 2005 - 13:05 #9
lige præcis! En genial funktion :o)

God weekend til dig også :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester