|  | 		    
					
        
         
          
         
	
          | |  | Sytemdir Fra : Anders Lund
 | 
 Dato :  29-05-01 13:14
 | 
 |  | Med Environ("windir")  kan jeg finde windows mappen, hvad hedder det når jeg
 vil finde system mappen.
 
 
 
 
 |  |  | 
  Chris (29-05-2001) 
 
	
          | |  | Kommentar Fra : Chris
 | 
 Dato :  29-05-01 14:06
 | 
 |  | On Tue, 29 May 2001 14:13:57 +0200, "Anders Lund"
 <webmaster@123grin.dk> wrote:
 
 >Med Environ("windir")  kan jeg finde windows mappen, hvad hedder det når jeg
 >vil finde system mappen.
 
 Med API kan du bruge denne funktion: GetSystemDirectory
 Så simpelt som at klø sig i r****.
 
 Hygge
 Chris
 
 
 |  |  | 
  Anders Lund (29-05-2001) 
 
	
          | |  | Kommentar Fra : Anders Lund
 | 
 Dato :  29-05-01 22:34
 | 
 |  | 
 "Chris" <dsl3353@vip.cybercity.dk> wrote in message
 news:3b139e6e.27641480@news.cybercity.dk...
 > On Tue, 29 May 2001 14:13:57 +0200, "Anders Lund"
 > <webmaster@123grin.dk> wrote:
 >
 > >Med Environ("windir")  kan jeg finde windows mappen, hvad hedder det når
 jeg
 > >vil finde system mappen.
 >
 > Med API kan du bruge denne funktion: GetSystemDirectory
 > Så simpelt som at klø sig i r****.
 Og,, lige precis hvordan????? Jer er rimelig newbie
 
 mvh
 Anders Lund
 
 
 
 
 |  |  | 
   Bjarke Walling Peter~ (29-05-2001) 
 
	
          | |  | Kommentar Fra : Bjarke Walling Peter~
 | 
 Dato :  29-05-01 23:38
 | 
 |  | "Anders Lund" <webmaster@123grin.dk> skrev i en meddelelse
 news:9f14l4$2fn$1@sunsite.dk...
 >
 > "Chris" <dsl3353@vip.cybercity.dk> wrote in message
 > news:3b139e6e.27641480@news.cybercity.dk...
 > > On Tue, 29 May 2001 14:13:57 +0200, "Anders Lund"
 > > <webmaster@123grin.dk> wrote:
 > >
 > > >Med Environ("windir")  kan jeg finde windows mappen, hvad hedder det
 når
 > jeg
 > > >vil finde system mappen.
 > >
 > > Med API kan du bruge denne funktion: GetSystemDirectory
 > > Så simpelt som at klø sig i r****.
 >  Og,, lige precis hvordan????? Jer er rimelig newbie
 
 Jeg vil umiddelbart mene at følgende eksempel skulle give en messagebox med
 stien til system-mappen...
 
 Private Declare Function GetSystemDirectory Lib "kernel32" _
 Alias "GetSystemDirectoryA" _
 (ByVal lpBuffer As String, _
 ByVal nSize As Long) As Long
 Private Sub Form_Load()
 Dim mappe As String
 GetSystemDirectory mappe, 256
 If InStr(mappe, vbNullChar) <> 0 Then
 mappe = Left(mappe, InStr(mappe, vbNullChar) - 1)
 End If
 MsgBox mappe
 End Sub
 
 .... men af en eller anden grund giver den ikke noget resultat ved mig. Jeg
 får bare en tom streng (dvs. mappe="" )...
 
 - Bjarke Walling Petersen
 
 > mvh
 > Anders Lund
 >
 >
 
 
 
 
 |  |  | 
    Chris (30-05-2001) 
 
	
          | |  | Kommentar Fra : Chris
 | 
 Dato :  30-05-01 07:25
 | 
 |  | On Wed, 30 May 2001 00:37:31 +0200, "Bjarke Walling Petersen"
 <bwp@bwp.dk> wrote:
 
 >Jeg vil umiddelbart mene at følgende eksempel skulle give en messagebox med
 >stien til system-mappen...
 >
 >Private Declare Function GetSystemDirectory Lib "kernel32" _
 >                                          Alias "GetSystemDirectoryA" _
 >                                          (ByVal lpBuffer As String, _
 >                                          ByVal nSize As Long) As Long
 >Private Sub Form_Load()
 >    Dim mappe as String
 >    GetSystemDirectory mappe, 256
 >    If InStr(mappe, vbNullChar) <> 0 Then
 >        mappe = Left(mappe, InStr(mappe, vbNullChar) - 1)
 >    End If
 >    MsgBox mappe
 >End Sub
 >
 >... men af en eller anden grund giver den ikke noget resultat ved mig. Jeg
 >får bare en tom streng (dvs. mappe="" )...
 
 Jeg kan desværre ikke lige prøve dit eksempel, da jeg ikke har min VB
 compiler installeret.
 
 Dog lavede jeg nummeret i C uden alle mulige dikkedarer:
 TCHAR mappe[256];
 GetSystemDirectory (mappe, 256);
 MessageBox (NULL, mappe, "Sti til System", MB_OK);
 
 ....og det virker fint.
 
 Mon ikke det burde kunne klares så simpelt:
 Dim mappe as String
 GetSystemDirectory mappe, 256
 MsgBox mappe
 
 GetSystemDirectory returnerer en nultermineret streng, så det burde
 ikke være nødvendigt at lede efter NULL pointeren i 'mappe'.
 
 Hygge
 Chris
 
 
 |  |  | 
     Bo Larsson (30-05-2001) 
 
	
          | |  | Kommentar Fra : Bo Larsson
 | 
 Dato :  30-05-01 10:43
 | 
 |  | On Wed, 30 May 2001 06:24:32 GMT, dsl3353@vip.cybercity.dk (Chris)
 wrote:
 
 >On Wed, 30 May 2001 00:37:31 +0200, "Bjarke Walling Petersen"
 ><bwp@bwp.dk> wrote:
 >
 >>Jeg vil umiddelbart mene at følgende eksempel skulle give en messagebox med
 >>stien til system-mappen...
 >>
 >>Private Declare Function GetSystemDirectory Lib "kernel32" _
 >>                                          Alias "GetSystemDirectoryA" _
 >>                                          (ByVal lpBuffer As String, _
 >>                                          ByVal nSize As Long) As Long
 >>Private Sub Form_Load()
 >>    Dim mappe as String
 >>    GetSystemDirectory mappe, 256
 >>    If InStr(mappe, vbNullChar) <> 0 Then
 >>        mappe = Left(mappe, InStr(mappe, vbNullChar) - 1)
 >>    End If
 >>    MsgBox mappe
 >>End Sub
 >>
 >>... men af en eller anden grund giver den ikke noget resultat ved mig. Jeg
 >>får bare en tom streng (dvs. mappe="" )...
 
 Da vi snakker om et API-kald (med C-strenge) skal du initialisere
 strengen, inden du sender den over til funktionen. Fx:
 
 mappe = String(256, 0) ' string with 256 NULLs
 
 
 >
 >Jeg kan desværre ikke lige prøve dit eksempel, da jeg ikke har min VB
 >compiler installeret.
 >
 >Dog lavede jeg nummeret i C uden alle mulige dikkedarer:
 >TCHAR mappe[256];
 >GetSystemDirectory (mappe, 256);
 >MessageBox (NULL, mappe, "Sti til System", MB_OK);
 >
 >...og det virker fint.
 >
 >Mon ikke det burde kunne klares så simpelt:
 >Dim mappe as String
 >GetSystemDirectory mappe, 256
 >MsgBox mappe
 >
 >GetSystemDirectory returnerer en nultermineret streng, så det burde
 >ikke være nødvendigt at lede efter NULL pointeren i 'mappe'.
 >
 
 VB arbejder ikke med nulterminerede strenge (men med BSTR). Derfor er
 det nødvendigt at lede efter NULL'et - man kunne dog også bruge den
 returværdi, som du får fra GetSystemDirectory, som netop indeholder
 længden på den returnerede streng.
 
 --
 Bo Larsson
 
 
 |  |  | 
      Bjarke Walling Peter~ (30-05-2001) 
 
	
          | |  | Kommentar Fra : Bjarke Walling Peter~
 | 
 Dato :  30-05-01 18:05
 | 
 |  | "Bo Larsson" <booglea@isa.dknet.dk> skrev i en meddelelse
 news:3b16bfcc.129975024@news.inet.tele.dk...
 > On Wed, 30 May 2001 06:24:32 GMT, dsl3353@vip.cybercity.dk (Chris)
 > wrote:
 >
 > >On Wed, 30 May 2001 00:37:31 +0200, "Bjarke Walling Petersen"
 > ><bwp@bwp.dk> wrote:
 > >
 > >>Jeg vil umiddelbart mene at følgende eksempel skulle give en messagebox
 med
 > >>stien til system-mappen...
 > >>
 > >>Private Declare Function GetSystemDirectory Lib "kernel32" _
 > >>                                          Alias "GetSystemDirectoryA" _
 > >>                                          (ByVal lpBuffer As String, _
 > >>                                          ByVal nSize As Long) As Long
 > >>Private Sub Form_Load()
 > >>    Dim mappe as String
 > >>    GetSystemDirectory mappe, 256
 > >>    If InStr(mappe, vbNullChar) <> 0 Then
 > >>        mappe = Left(mappe, InStr(mappe, vbNullChar) - 1)
 > >>    End If
 > >>    MsgBox mappe
 > >>End Sub
 > >>
 > >>... men af en eller anden grund giver den ikke noget resultat ved mig.
 Jeg
 > >>får bare en tom streng (dvs. mappe="" )...
 >
 > Da vi snakker om et API-kald (med C-strenge) skal du initialisere
 > strengen, inden du sender den over til funktionen. Fx:
 >
 > mappe = String(256, 0) ' string with 256 NULLs
 
 Nu virker det sørme! Men så vidt jeg ved er det ikke alle funktioner, hvor
 man først skal initialisere strengen. Hvordan kan det være?
 
 - Bjarke Walling Petersen
 
 > >
 > >Jeg kan desværre ikke lige prøve dit eksempel, da jeg ikke har min VB
 > >compiler installeret.
 > >
 > >Dog lavede jeg nummeret i C uden alle mulige dikkedarer:
 > >TCHAR mappe[256];
 > >GetSystemDirectory (mappe, 256);
 > >MessageBox (NULL, mappe, "Sti til System", MB_OK);
 > >
 > >...og det virker fint.
 > >
 > >Mon ikke det burde kunne klares så simpelt:
 > >Dim mappe as String
 > >GetSystemDirectory mappe, 256
 > >MsgBox mappe
 > >
 > >GetSystemDirectory returnerer en nultermineret streng, så det burde
 > >ikke være nødvendigt at lede efter NULL pointeren i 'mappe'.
 > >
 >
 > VB arbejder ikke med nulterminerede strenge (men med BSTR). Derfor er
 > det nødvendigt at lede efter NULL'et - man kunne dog også bruge den
 > returværdi, som du får fra GetSystemDirectory, som netop indeholder
 > længden på den returnerede streng.
 >
 > --
 > Bo Larsson
 
 
 
 
 |  |  | 
       Tomas Christiansen (30-05-2001) 
 
	
          | |  | Kommentar Fra : Tomas Christiansen
 | 
 Dato :  30-05-01 22:54
 | 
 |  | Bjarke Walling Petersen skrev:
 > "Bo Larsson" <booglea@isa.dknet.dk> skrev i en meddelelse
 > news:3b16bfcc.129975024@news.inet.tele.dk...
 > > On Wed, 30 May 2001 06:24:32 GMT, dsl3353@vip.cybercity.dk (Chris)
 > > wrote:
 > >
 > > >On Wed, 30 May 2001 00:37:31 +0200, "Bjarke Walling Petersen"
 > > ><bwp@bwp.dk> wrote:
 > > >
 > > >>Jeg vil umiddelbart mene at følgende eksempel skulle give en
 messagebox
 
 osv. osv. osv...
 
 Ku' du ikke lige cutte lidt i det, som du quoter?
 Det er et hestearbejde at finde det, som DU faktisk skriver!
 
 
 > Nu virker det sørme! Men så vidt jeg ved er det ikke alle funktioner, hvor
 > man først skal initialisere strengen. Hvordan kan det være?
 
 Tjaaa... der ER jo forskel på de enkelte API-kald.
 Det er derfor at man altid skal læse beskrivelsen af et API-kald inden man
 bruger det.
 
 Om GetSystemDirectory(lpBuffer,uSize) står der bl.a. tre ting, som jeg
 finder interessante:
 
 1. uSize bør være MINDST lige så stor som MAX_PATH (som i øjeblikket er sat
 til værdien 260).
 
 2. Hvis længden af den streng, som skal returneres, er større end bufferen
 (værdien i uSize), returneres længden på den buffer, som skal til for at
 indeholde hele strengen. Bemærk at normalt returneres ikke længden af
 bufferen, men derimod længden af strengen (bufferen er 1 større p.gr.a.
 null-termineringstegnet).
 
 3. Hvis man bruger "a shared version of the operating system" (det tolker
 jeg som Terminal Services), har applikationer ikke skriveadgang til
 system-biblioteket, men skal i stedet bruge GetWindowsDirectory.
 
 -------
 Tomas
 
 
 
 
 |  |  | 
        Bjarke Walling Peter~ (31-05-2001) 
 
	
          | |  | Kommentar Fra : Bjarke Walling Peter~
 | 
 Dato :  31-05-01 18:18
 | 
 |  | 
 
            Tomas Christiansen skrev:
 > Ku' du ikke lige cutte lidt i det, som du quoter?
 > Det er et hestearbejde at finde det, som DU faktisk skriver!
 Jeg kan da prøve!
 > Om GetSystemDirectory(lpBuffer,uSize) står der bl.a. tre ting, som jeg
 > finder interessante:
 >
 > 1. uSize bør være MINDST lige så stor som MAX_PATH (som i øjeblikket er
 sat
 > til værdien 260).
 Er MAX_PATH-værdien bare et tal man selv skal slå op eller er det noget man
 kan få programmet til at hente?
 Og hvis man kan få programmet til at hente det: Hvordan henter man det?
 > 2. Hvis længden af den streng, som skal returneres, er større end bufferen
 > (værdien i uSize), returneres længden på den buffer, som skal til for at
 > indeholde hele strengen. Bemærk at normalt returneres ikke længden af
 > bufferen, men derimod længden af strengen (bufferen er 1 større p.gr.a.
 > null-termineringstegnet).
 >
 > 3. Hvis man bruger "a shared version of the operating system" (det tolker
 > jeg som Terminal Services), har applikationer ikke skriveadgang til
 > system-biblioteket, men skal i stedet bruge GetWindowsDirectory.
 Hvad er Terminal Services helt præcis?
 Er "a shared version of the operating system" ikke bare Win2k eller NT, hvor
 der kan være flere brugere der bruger    det?
  - Bjarke Walling Petersen
            
             |  |  | 
         Tomas Christiansen (31-05-2001) 
 
	
          | |  | Kommentar Fra : Tomas Christiansen
 | 
 Dato :  31-05-01 22:57
 | 
 |  | 
 
            Bjarke Walling Petersen skrev:
 > Jeg kan da prøve!
 Ingen er jo forpligtet over evne...       > Er MAX_PATH-værdien bare et tal man selv skal slå op eller er det noget
 man
 > kan få programmet til at hente?
 > Og hvis man kan få programmet til at hente det: Hvordan henter man det?
 En C-programmør ville jo straks sige at det er en værdi, som programmet
 "selv" kan hente, idet det er én af de mange konstanter, som er defineret i
 én af de mange header-filer, som man bruger, når man ønsker at benytte sig
 af Microsofts API'er. For VB-folk er det straks lidt sværere.
 Hvis du starter programmet API Viewer, og indlæser filen WIN32API.TXT, har
 du under API Type=Declares mulighed for at se den aktuelle værdi af
 MAX_PATH. Værdien kan jo meget vel tænkes at ændre sig i fremtiden, men så
 er der sikkert så meget andet, som skal laves om.
 Den "rigtige" måde at gøre det her på må vel være selv at definere en
 konstant:
     Public Const MAX_PATH As Long = 260
 og benytte den i sine programmer. Derved signalerer man overfor andre
 programmører (og over for sig selv en gang i fremtiden) at man har undersøgt
 sagerne, og at man ved hvad man gør.
 > Hvad er Terminal Services helt præcis?
 > Er "a shared version of the operating system" ikke bare Win2k eller NT,
 hvor
 > der kan være flere brugere der bruger    det?
 De to mest aktuelle versioner er "Windows NT Server 4.0, Terminal Server
 Edition" og "Terminal Services" under Windows 2000. Der kan være tale om et
 add-on produkt som kører ovenpå Terminal Server/Terminal Services, f.eks.
 Citrix MetaFrame.
 Princippet i det er at mange brugere kan logge på den samme server på samme
 tid, og man afvikler sine programmer på serveren i stedet for på sin egen
 computer. Kun tastetryk, billeder (og evt. lyd m.m) sendes mellem klient og
 server.
 Det giver noget værre rod, hvis det er muligt at opdatere
 system-biblioteket, idet det bruges af alle (på samme tid). I stedet har
 alle hver deres egen kopi af Windows biblioteket - eller rettere: de filer
 som er brugerspecifikke, ligger i et brugerspecifikt Windows bibliotek.
 Grunden til at jeg nævner det er, at der efterhånden er mange (og der kommer
 hele tiden flere til), som benytter sig af Terminal Services, og der er ikke
 noget, som er mere irriterende end når man skal prøve at få et program til
 at fungere, som f.eks. absolut VIL opdatere system biblioteket, absolut VIL
 have at der skal være et C-drev eller andre "sjove" ting.
 Hvis man ønsker at lave kommercielle programmer gør man klogt i at læse
 Microsofts specifikationer og anvisninger - og følge dem. Ellers vil de ikke
 virke ordentligt på mange installationer.
 Hvis man blot laver programmer for egen fornøjelses skyld, nå, ja, så har
 jeg da i det mindste gjort opmærksom på at der kan være visse problemer, men
 ikke mere end at det jo naturligvis kan løses hen ad vejen, hvis man en dag
 står i situationen (hvis nogen overhovedet har gidet læse så langt i denne
 smøre...    -------
 Tomas
            
             |  |  | 
          Chris (01-06-2001) 
 
	
          | |  | Kommentar Fra : Chris
 | 
 Dato :  01-06-01 16:35
 | 
 |  | On Thu, 31 May 2001 21:57:10 -0000, "Tomas Christiansen"
 <toc@blikroer.removethis.dk> wrote:
 
 >En C-programmør ville jo straks sige at det er en værdi, som programmet
 >"selv" kan hente, idet det er én af de mange konstanter, som er defineret i
 >én af de mange header-filer, som man bruger, når man ønsker at benytte sig
 >af Microsofts API'er. For VB-folk er det straks lidt sværere.
 
 I virkeligheden er MAX_PATH ikke en konstant, og det er IKKE noget
 programmet selv kan hente.
 
 I C er MAX_PATH en makro, som preprocessoren (en del af compileren)
 bruger under oversættelsen af programkoden til binær kode. Selve
 værdien af MAX_PATH er platform-afhængig, og for tiden er MAX_PATH på
 en Windows platform meget rigtigt nævnt, 260.
 
 Skal man være helt præcis, så findes MAX_PATH kun i Windows API. I C
 hedder makroen skægt nok, PATH_MAX.
 
 Men indtil Microsoft bestemmer sig til andet, så kan man blot roligt
 erklære MAX_PATH til 260, som Tomas viste:
 
 Public Const MAX_PATH As Long = 260
 
 Hygge
 Chris
 
 
 |  |  | 
           Tomas Christiansen (03-06-2001) 
 
	
          | |  | Kommentar Fra : Tomas Christiansen
 | 
 Dato :  03-06-01 00:17
 | 
 |  | 
 
            Chris skrev:
 > I virkeligheden er MAX_PATH ikke en konstant, og det er IKKE noget
 > programmet selv kan hente.
 Nåe? Kan man måske ikke tildele en konstant eller en variabel denne værdi og
 så bruge værdien den vej?
 Okay, værdien kan så kun ændre sig ved en re-kompilering, meen...      > I C er MAX_PATH en makro, som preprocessoren (en del af compileren)
 > bruger under oversættelsen af programkoden til binær kode.
 ....
 > Skal man være helt præcis, så findes MAX_PATH kun i Windows API. I C
 > hedder makroen skægt nok, PATH_MAX.
 I mit MSDN Library fandt jeg under _MAX_PATH følgende tekst:
 "Path Field Limits
 #include <stdlib.h>
 ....cut...
 _MAX_PATH Maximum length of full path"
 og i den STDLIB.H fil, som er på min computer, står der:
 #define _MAX_PATH   260 /* max. length of full pathname */
 Det ser i øvrigt ud til at hvis _MAC er defineret er _MAX_PATH kun 256.
 Jeg har ikke været i stand til at finde hverken MAX_PATH (uden underscore
 som første tegn) eller PATH_MAX defineret nogen stedet, men kan flere steder
 finde at MS selv refererer til MAX_PATH i deres C headerfiler, f.eks:
     WCHAR lpwszName[MAX_PATH + 1];  // DLL name
 -------
 Tomas
            
             |  |  | 
  Bjarke Walling Peter~ (29-05-2001) 
 
	
          | |  | Kommentar Fra : Bjarke Walling Peter~
 | 
 Dato :  29-05-01 14:52
 | 
 |  | "Anders Lund" <webmaster@123grin.dk> skrev i en meddelelse
 news:9f03qb$rs3$1@sunsite.dk...
 > Med Environ("windir")  kan jeg finde windows mappen, hvad hedder det når
 jeg
 > vil finde system mappen.
 
 Man kan finde både windows-mappen og system-mappen sådan her:
 
 Set fso = CreateObject("Scripting.FileSystemObject")
 mappe = fso.GetSpecialFolder(x)
 ' x er et tal... jeg tror nok det er 1 og 2 du skal bruge.
 Set fso = Nothing
 
 .... dog forudsat at du har "Scripting.FileSystemObject"...
 Men man kan selvfølgelig også bruge API, som Chris skriver.
 
 - Bjarke Walling Petersen
 
 
 
 
 |  |  | 
  Asbjørn Sloth Tønnes~ (29-05-2001) 
 
	
          | |  | Kommentar Fra : Asbjørn Sloth Tønnes~
 | 
 Dato :  29-05-01 20:03
 | 
 |  | "Anders Lund" <webmaster@123grin.dk> skrev i en meddelelse news:9f03qb$rs3$1@sunsite.dk...
 > Med Environ("windir")  kan jeg finde windows mappen, hvad hedder det når jeg
 > vil finde system mappen.
 
 Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As
 Long) As Long
 Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As
 Long) As Long
 
 
 
 
 |  |  | 
 |  |