Avatar billede steen_hansen Forsker
28. januar 2002 - 20:43 Der er 51 kommentarer og
2 løsninger

Undersøge computernavn

Jeg har en lang declaration:

Private 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 har jeg en hændelse:

Private Sub Absalon_Click(Index As Integer)
    Call ShellExecute(0&, vbNullString, "http://www.adr01.dk", vbNullString, vbNullString, vbNormalFocus)
End Sub


Denne fil vil jeg gerne lægge ud på brugernes pc'ere. Når de trykker på knappen, skal den gå på nettet, men den skal gå på deres egen hjemmeside. Hvis jeg ved hvilket computernavn maskinen har, så kender jeg også brugerens hjemmeside.

Nu er der andre brugere, som skal have denne fil, og deres pc'ere vil selvfølgelig ikke figurere på listen over computernavne. Hvis computernavnet ikke er lig med listen, skal den åbne en default side, som jeg kan angive. Håber på masser af respons :o)
Avatar billede steen_hansen Forsker
28. januar 2002 - 20:44 #1
Hvis computernavnet ikke er lig med et computernavn i listen .... sorry :o)
Avatar billede steen_hansen Forsker
28. januar 2002 - 20:49 #2
If ComputerNavn = Computernavn01
        Then Åbn Hjemmeside01.dk
    If ComputerNavn = Computernavn02
        Then Åbn Hjemmeside02.dk
    If ComputerNavn = Computernavn03
        Then Åbn Hjemmeside03.dk
    Else Åbn DefaultHjemmeside.dk
    End If
    End If
    End If

Håber I forstår meningen?
Avatar billede steen_hansen Forsker
28. januar 2002 - 22:06 #3
HJÆLP! Jeg sidder her og trykker på [F5] :o)
Avatar billede bennytordrup Nybegynder
29. januar 2002 - 09:01 #4
Private Const MAX_COMPUTERNAME_LENGTH = 31
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Public Function VBGetComputerName() As String
    Dim sBuf As String, iActualLen As Long
    sBuf = String(MAX_COMPUTERNAME_LENGTH + 1, 0)
    iActualLen = Len(sBuf)
    GetComputerName sBuf, iActualLen
    VBGetComputerName = Left$(sBuf, iActualLen)
End Function
Avatar billede dimle Nybegynder
29. januar 2002 - 11:04 #5
Du kan oprette et Winsock-komponent som har computernavnet som en medlemsvariabel!!

Winsock1.LocalName

Det er en meget simpel og sikker metode!!!
Avatar billede bennytordrup Nybegynder
29. januar 2002 - 11:10 #6
Hvilken dll findes WinSock i, og findes den på alle windows?

kernel32 findes på alle windows.
Avatar billede dimle Nybegynder
29. januar 2002 - 13:12 #7
WinSock er et komponent i VB som bruges til at styre kommunikation over LAN eller WAN!
Avatar billede bennytordrup Nybegynder
29. januar 2002 - 13:16 #8
OCX?

Så skal den jo med i installationsprogram. Det skal et api-kald ikke, hvis den kaldte rutine findes i en standard-dll (som f.eks. kernel32)
Avatar billede bennytordrup Nybegynder
29. januar 2002 - 13:17 #9
Når man alligevel er i gang med at erklære API-funktioner, så vil jeg 100% foretrække en API yderligere i forhold til at skulle inddrage en eller anden OCX.
Avatar billede dimle Nybegynder
29. januar 2002 - 13:17 #10
Nu bliver jeg lige i tvivl.... Det er computernavnet på den computer som applikation kører på du vilhave fat i ik?? Eller er det en metode til at start Explorer med en bestemt internet adr.??
Avatar billede bennytordrup Nybegynder
29. januar 2002 - 13:23 #11
Som jeg tolker kommentaren fra 28. januar kl. 20:49, så der det den computer med applikationen, som vi skal have fat i navnet på.
Avatar billede bennytordrup Nybegynder
29. januar 2002 - 13:25 #12
Og dette navn afgør den hjemmeside, som exploreren skal startes med.
Avatar billede dimle Nybegynder
29. januar 2002 - 13:28 #13
Jah... men jeg er ikke sikker på at den findes som API!!! Jeg kan da lige prøve at se!!
Avatar billede bennytordrup Nybegynder
29. januar 2002 - 13:30 #14
GetComputerName findes som API.

VBGetComputerName er min wrapper for at lave det til en funktion.
Avatar billede dimle Nybegynder
29. januar 2002 - 13:32 #15
Tjo... Jeg tror måske at der er noget her!! En af disse API'er:

Public Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" (ByVal lpszLocalName As String, ByVal lpszRemoteName As String, cbRemoteName As Long) As Long

Public Declare Function WNetGetUniversalName Lib "mpr" Alias "WNetGetUniversalNameA" (ByVal lpLocalPath As String, ByVal dwInfoLevel As Long, lpBuffer As Any, lpBufferSize As Long) As Long

Public Declare Function WNetGetUser Lib "mpr.dll" Alias "WNetGetUserA" (ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long
Avatar billede dimle Nybegynder
29. januar 2002 - 13:34 #16
Ja der er godt nok også disse 2 De skulle kunne gøre det:

Public Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Public Declare Function GetComputerNameW Lib "kernel32" (lpBuffer As Any, nSize As Long) As Long
Avatar billede dimle Nybegynder
29. januar 2002 - 13:36 #17
Ellers er det altså lige så smart at bruge VB's funktioner... I WinSock'en er der også en masse andre gode informationer om maskinen og evt. remote-maskinen! Det er let i hvert fald... Men det bestemmer Steen jo!!!
Avatar billede bennytordrup Nybegynder
29. januar 2002 - 13:38 #18
Det er nøjagtig dem, jeg gav i mit svar.

GetComputerNameW er unicode versionen.
Avatar billede dimle Nybegynder
29. januar 2002 - 13:45 #19
Øhm... ja og?? Det var en konstatering af at et API-kald er smart men flere er ikke!!!
Avatar billede bennytordrup Nybegynder
29. januar 2002 - 13:54 #20
Det komme an på hvad, du vil. De kontroller, som leveres med VB, er meget ofte lavet oven på generiske windows kontroller og lignende. Men Microsoft har ikke givet alle deres muligheder videre til VB-programmørerne. Derfor er der mange muligheder for at fifle med kontrollerne via API.
Avatar billede dimle Nybegynder
29. januar 2002 - 14:53 #21
De er ikke lavet ovenpå windows... Mange af metoderne i VB er ikke helt så gode køretider som API-kaldene men det er godt derhen af!!!
Avatar billede bennytordrup Nybegynder
29. januar 2002 - 15:06 #22
De generiske (intrisic) kontroller som TextBox, Label osv. er standard windows kontroller. De kan gendannes 100% (og bedre) via API

Common Controls er også kald igennem til andre dll'er og kan laves 100% via API. Jeg har f.eks. leget med at lave mig eget listview gennem 100% API i VB. Det virker faktisk fint.
Avatar billede steen_hansen Forsker
29. januar 2002 - 18:37 #23
Tak for det!! :o)

Jeg havde håbet på NOGET respons (har ikke haft så gode erfaringer mht. respons de seneste dag). Men det her er jo overvældende! :o)

Jeg vil gerne have, at programmet tjekker computernavnet. Når jeg (programmet) har computernavnet, ved jeg (programmet) også hvilken side, der skal være default, når man trykker på knappen. Hvis computerens navn = ComputerNavn01, skal http://www.hjemmeside01.dk starte, når man trykker på kommando-knappen. De første 18 brugere har en hjemmeside. Dermed er der 18 computernavne og 18 hjemmesider.

Hvis bruger nr. 19 (og frem) trykker på knappen, skal http://www.EnGivenSide.dk starte op, altså ikke nogen af de 18 hjemmesider, men en nittende. Håber det er forståeligt?
Avatar billede dimle Nybegynder
29. januar 2002 - 20:56 #24
Ja okay... Hvad er dit spørgsmål så??? Det forstår jeg ikke lige??
Avatar billede steen_hansen Forsker
29. januar 2002 - 21:09 #25
Hm, jeg kan vist ikke formulere mig forståeligt :o)

Jeg har en formular med en kommando-knap på. Når man trykker på den, åbner http://www.adr01.dk. Det er Bruger01's hjemmeside.

Nu vil jeg gerne have, at Bruger02, Bruger03, Bruger04......Bruger18 åbner deres egen hjemmeside, når de trykker på den knap.

Bruger01's hjemmeside har adressen http://www.adr01.dk
Bruger02's hjemmeside har adressen http://www.adr02.dk
.
.
Bruger18's hjemmeside har adressen http://www.adr18.dk

For at kunne finde frem til brugerens hjemmeside-adresse, skal jeg bruge pc'ens navn:

Bruger01's pc har navnet ComputerNavn01
Bruger02's pc har navnet ComputerNavn02
.
.
Bruger18's pc har navnet ComputerNavn18

Når Bruger03 trykker på knappen, skal programmet se efter computernavnet, som i dette tilfælde er ComputerNavn03. Derfor skal programmet så åbne brugerens egen hjemmeside, som har adressen http://www.adr03.dk.

Hvis brugeren ikke er mellem de 18 navngivne brugere, så skal knappen åbne hjemmesiden http://www.DefaultHjemmeside.dk.

Er det til at forstå?
Avatar billede steen_hansen Forsker
29. januar 2002 - 21:12 #26
Øverst har jeg lavet lidt kode, som peger på en given adresse. Men andet gør den ikke. Jeg vil gerne finde ud af, hvordan jeg får programmet til at se efter ComputerNavn, og ud fra det åbne http://www.adrXX.dk, alt afhængig af computerens navn.

Jeg kan ikke bare sætte en side op, for bliver pc'en flyttet, og computernavnet dermed ændret, så passer forholdene jo ikke længere. Kryptisk? :o)
Avatar billede steen_hansen Forsker
29. januar 2002 - 21:21 #27
- Bruger01 har en pc
- Bruger01 trykker på knappen
- Programmet ser efter computernavnet og finder frem til ComputerNavn01
- http://www.adr01.dk åbnes i MSIE

- Bruger02 har en anden pc
- Bruger02 trykker på knappen
- Programmet ser efter computernavnet og finder frem til ComputerNavn02
- http://www.adr02.dk åbnes i MSIE

etc. etc. etc....

- Bruger 19 har en 19. pc
- Bruger19 trykker på knappen
- Programmet ser efter computernavnet og finder frem til ComputerNavn19
- http://www.DefaultHjemmeside.dk åbnes i MSIE

- Bruger 20 har en 20. pc
- Bruger20 trykker på knappen
- Programmet ser efter computernavnet og finder frem til ComputerNavn20
- http://www.DefaultHjemmeside.dk åbnes i MSIE

etc. etc. etc....
Avatar billede steen_hansen Forsker
29. januar 2002 - 22:16 #28
Hvor bli'r I af? :o(
Avatar billede bennytordrup Nybegynder
30. januar 2002 - 08:27 #29
Det er mit svar med GetComputerName, du har brug for. Prøv det af.
Avatar billede dimle Nybegynder
30. januar 2002 - 10:56 #30
Er computernavnet altid et eller andet med et tal fra 1 til 18 bagefter dvs. ComputerNavnXX
????
Avatar billede dimle Nybegynder
30. januar 2002 - 11:28 #31
Her har du koden der starter hjemmesiden, hvis altså computernavnet ender med et tal... og hvis den ikke gør det må du jo spørge igen og lige skrive hvordan du så ved om det er en af de 18 computere:


Option Explicit
Private 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

Private Const SW_SHOWNORMAL = 1


Private Sub startHjemmeside()
    Dim tmpName As String, valName As Integer, URL As String, Success As Long
   
    tmpName = Winsock1.LocalHostName
    valName = Val(Right$(tmpName, 2))
   
    If valName < 19 Then
        URL = "http://www.adr" & valName & ".dk"
    Else
        URL = "http://www.DefaultHjemmeside.dk"
    End If
   
    Success = ShellExecute(0&, vbNullString, URL, vbNullString, "C:\", SW_SHOWNORMAL)
End Sub
Avatar billede dimle Nybegynder
30. januar 2002 - 11:32 #32
Jeg vil så lige sige at det der API-kald GetComputerName synes jeg ikke rigtig jeg kan få til at virke så jeg har brugt komponentet:
Micosoft Winsock Control 6.0 - den er smart!!! :o)
Avatar billede bennytordrup Nybegynder
30. januar 2002 - 11:42 #33
Lav et standard exe projekt.

På form1 indsætter du en knap ved navn Command1

Indsæt følgende kode i formen:

Option Explicit

Private Const MAX_COMPUTERNAME_LENGTH = 31
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Public Function VBGetComputerName() As String
    Dim sBuf As String, iActualLen As Long
    sBuf = String(MAX_COMPUTERNAME_LENGTH + 1, 0)
    iActualLen = Len(sBuf)
    GetComputerName sBuf, iActualLen
    VBGetComputerName = Left$(sBuf, iActualLen)
End Function

Private Sub Command1_Click()
    MsgBox "Din computer hedder: " & VBGetComputerName
End Sub


Kør programmet og tryk på Command1. Hvad skriver msgbox'en?
Avatar billede dimle Nybegynder
30. januar 2002 - 13:10 #34
Ja det er da besværligt...

I stedet for:
MsgBox "Din computer hedder: " & Winsock1.LocalHostName
Avatar billede bennytordrup Nybegynder
30. januar 2002 - 13:12 #35
Det er da lige så besværligt at inkludere WinSock i projektet, huske at få den med i installationsprogram og være sikker på, at få de filer med, som den er afhængig af.

Og så er der et andet program, som lægger en ikke-kompatibel version af WinSock.ocx (?) ind :-/
Avatar billede bennytordrup Nybegynder
30. januar 2002 - 13:12 #36
Ved at bruge API fjerner du en ekstern reference og sparer plads i installationsprogram.
Avatar billede dimle Nybegynder
30. januar 2002 - 13:13 #37
Du behøver IKKE noget installations program!!!!!!!!!!!!!!!!
Avatar billede bennytordrup Nybegynder
30. januar 2002 - 13:19 #38
Hvordan vil du så bruge programmet på en computer uden Visual Basic eller lignende (hint: MSWINSCK.OCX bliver installeret sammen med Visual Basic og er sidst rettet i Service Pack 5)
Avatar billede dimle Nybegynder
30. januar 2002 - 13:22 #39
Du er forældet... MSWINSCK.OCX er med i alle nyere windows!!!!! Og hvis den ikke er er det ikke nødvendig med et langsomt installationsprogram der fylder - kun MSWINSCK.OCX!!!!!
Avatar billede dimle Nybegynder
30. januar 2002 - 13:39 #40
Nå men hvis du hellere vil bruge API Steen så ser koden således ud med Benny's metode indraget:


Option Explicit
Private 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

Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Private Const MAX_COMPUTERNAME_LENGTH = 31
Private Const SW_SHOWNORMAL = 1


Private Sub startHjemmeside()
    Dim tmpName As String, valName As Integer, URL As String, Success As Long
   
    tmpName = VBGetComputerName
    valName = Val(Right$(tmpName, 2))
   
    If valName < 19 Then
        URL = "http://www.adr" & valName & ".dk"
    Else
        URL = "http://www.DefaultHjemmeside.dk"
    End If
   
    Success = ShellExecute(0&, vbNullString, URL, vbNullString, "C:\", SW_SHOWNORMAL)
End Sub

Public Function VBGetComputerName() As String
    Dim sBuf As String, iActualLen As Long
    sBuf = String(MAX_COMPUTERNAME_LENGTH + 1, 0)
    iActualLen = Len(sBuf)
    GetComputerName sBuf, iActualLen
    VBGetComputerName = Left$(sBuf, iActualLen)
End Function
Avatar billede bennytordrup Nybegynder
30. januar 2002 - 13:41 #41
Jeg vil anbefale dig at få opdateret din viden. Jeg har lige undersøgt tre computere, hvor der IKKE er installeret VB på. Det var en Win98 SE, en Win2000 SP1 og en Win XP Pro. INGEN af disse havde mswinsck.ocx installeret.

Ud over en beta af Whistler findes der ikke nyere versioner af windows end XP.

I øvrigt er din måde at distribuere programmer ikke god med windows. Der kan være andre dll'er, som en ocx er afhængig af. De kommer ikke med, hvis du bare smider filen af sted uden videre. Desuden skal den registreres, og det tager installationsprogrammet hånd om.
Avatar billede dimle Nybegynder
30. januar 2002 - 13:46 #42
Ja ja... jeg ved ikke hvor du har dine informationer fra men jeg har da i hvert fald lige stået for indkøb af 20 PC'ere hvor der er WinXP og ikke VB og her er mswinsck.ocx samt nogle andre også!!!

og lige et hint... så er mswinsck.ocx ikke afhængig af andre .dll-filer!!!

Men lad os nu koncentrere os om at hjælpe Steen! ;o)
Avatar billede bennytordrup Nybegynder
30. januar 2002 - 13:51 #43
De informationer har jeg fra tre computere, hvor vi selv har installeret de forskellige versioner af windows.

At mswinsck.ocx ikke er afhængig af andre dll-filer er ikke korrekt:

; Dependency file for setup wizards.

[Version]
Version=6.0.89.88

; Default Dependencies ----------------------------------------------

[MSWinSck.ocx]
Dest=$(WinSysPath)
Register=$(DLLSelfRegister)
Version=6.0.89.88
Uses1=ComCat.dll   
Uses2=
CABFileName=MSWinSck.cab
CABDefaultURL=http://activex.microsoft.com/controls/vb6
CABINFFile=MSWinSck.inf

[ComCat.dll]
Dest=$(WinSysPathSysFile)
Register=$(DLLSelfRegister)
Uses1=


Hvem installerede windows på de maskiner, du indkøbte? Hvilke programmer var præinstalleret?
Avatar billede bennytordrup Nybegynder
30. januar 2002 - 13:53 #44
Et kig med Dependacy Walker afslører importeringer fra følgende dll-filer:

wsock32.dll
kernel32.dll
user32.dll
ole32.dll
advapi32.dll
oleaut32.dll
gdi32.dll


Hvem sagde uafhængig af andre dll-filer??!
Avatar billede dimle Nybegynder
30. januar 2002 - 13:56 #45
Det var satans... mswinsck.ocx kan køre med de 2 standart .dll som alle VB-programmer kræver!!!!

Jeg har selv stået for installationen af alt på de computere og der var ingenting før!!!!

Drop it... :o/
Avatar billede bennytordrup Nybegynder
30. januar 2002 - 14:04 #46
Som jeg sagde, installation under windows er farlig uden et installationsprogram. Godt nok er der nye tider undervejs med VS.NET, men så længe, vi arbejder med VB6 eller før, så må vi mindst igennem P&D Wizard.

Alt det er ikke nødvendigt ved brug af API.

Fra MSDN om GetComputerName :

Requirements
  Windows NT/2000/XP: Included in Windows NT 3.1 and later.
  Windows 95/98/Me: Included in Windows 95 and later.
  Header: Declared in Winbase.h; include Windows.h.
  Library: Use Kernel32.lib.
  Unicode: Implemented as Unicode and ANSI versions on Windows NT/2000/XP. Also supported by Microsoft Layer for Unicode.

Vi har altså 100% sikkerhed for, at GetComputerName vil virke i et VB6 program.
Avatar billede dimle Nybegynder
30. januar 2002 - 14:10 #47
Ja DET er rigtigt.... er det så klargjort???!!!
Avatar billede steen_hansen Forsker
30. januar 2002 - 18:44 #48
JAMEN! Ærgeligt, at jeg ikke jar haft tid til at deltage i debatten i dag! :o)

Ja, de 18 brugere har en hjemmeside. Når man trykker på knappen, skal deres egen hjemmeside åbne op. Fra nr. 19 og fremefter, skal http://www.DefaultSide.dk åbne op, når de trykker på knappen. Det er ikke nødvendigt med en messagebox. Det er kun Bruger01, som har computeren med ComputerNavn01, der skal kunne åbne http://www.adr01.dk op.

Jeg vil lige prøve at nærlæse Jeres svar og prøve det af efter aftensmaden. Men foreløbig en million milliard tak. Det er IMPONERENDE! :o)
Avatar billede steen_hansen Forsker
30. januar 2002 - 21:08 #49
Det var smart, dimle. Hvis jeg navngiver pc'erne med hjemmesidens navn http://www.NAVN01.dk), vil programmet åbne URL'en

"http://www." & valName & ".dk"
(altså "http://www." & computernavn01 & ".dk")

Men hvis computernavnet højst må indeholde karakterer, hvad så? Det er meningen at de 18 computere skal have en DSL-forbindelse på et tidspunkt og via en VPN-klient kunne logge ind på vores server. Og her skal de benytte samme logon på deres lokale pc med Windows 2000, som de er registreret med på serveren. Og det navn må højst indeholde 8 karakterer. Derfor har alle computerne fået navnene user01 - user02 - user03 ... user18. Det er derfor jeg indledte med denne her:

    If ComputerNavn = Computernavn01
        Then Åbn Hjemmeside01.dk
    If ComputerNavn = Computernavn02
        Then Åbn Hjemmeside02.dk
    If ComputerNavn = Computernavn03
        Then Åbn Hjemmeside03.dk
    Else Åbn DefaultHjemmeside.dk
    End If
    End If
    End If
Avatar billede steen_hansen Forsker
30. januar 2002 - 21:10 #50
Men hvis computernavnet højst må indeholde 8 (OTTE) karakterer...sorry :o)
Avatar billede bennytordrup Nybegynder
31. januar 2002 - 08:33 #51
Så mapper du da bare op med en casesætning

select case VBGetComputerName
  case "Navnet på Computer 1"
    Åbn Hjemmeside01.dk
  case "Navnet på Computer 2"
    Åbn Hjemmeside02.dk
  ...
  case else
    Åbn DefaultHjemmeside.dk
end select
Avatar billede dimle Nybegynder
31. januar 2002 - 14:21 #52
Jeg er ikke helt sikker på at jeg forstår dit sidste spørgsmål! Skal det forståes såden at du ikke styrer hvad bruger-computernes navne er, og hvis længden af deres navne er større end 8 så går det ikke?? Hvis det er det så kunne du registre de f.eks. 4 bogstaver i computernavnet sammen med det tal fra 1 til 18! altså:

<Database> = Left$(Computernavn, 4) & valNavn

Hvis det ikke var sådan du havde forestillet dig så kan du sende en kopi af programmet til mig, så kigger jeg gerne på det! Min e-mail er: DenRud@hotmail.com
Avatar billede steen_hansen Forsker
20. februar 2002 - 21:46 #53
Hej drenge!

Jeg har desværre været afskåret fra at prøve det af. Men jeg vil kigge på det, når tiden tillader det. Jeg vender lige tilbage med resultatet :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