Konu: GETENV("........")
Helpte "Returns the contents of the specified MS-DOS environment variable." diyor, ancak liste vermiyor.
GETENV("username"), "computername" , ....
listesi olan arkadaş var mı ?
Giriş yapmadınız. Lütfen giriş yapın yada kayıt olun.
fox4um » Kodlama ve Komutlar » GETENV("........")
Helpte "Returns the contents of the specified MS-DOS environment variable." diyor, ancak liste vermiyor.
GETENV("username"), "computername" , ....
listesi olan arkadaş var mı ?
Ali Abi sorunun ne? Yada elde etmek istediğin değer ?
Merhaba
Nereden elime geçti hatırlamıyorum ama umarım işine yarar.
Ayrıca ? Getenv("USERNAME")
? Getenv("USERNAME") olarak da bu fonkiyonu kullanınca liste veriyor.
func GetComputerName()
local lnResult,lcKey,lnError,lnType,lcBuffer,lnBufferSize,lnCompName,lnReserved
lnReserved = 0
lnResult = 0
lnCompName = ''
lcKey = "SYSTEM\CurrentcontrolSet\control\ComputerName\ComputerName" &&COMPNAME_KEY
lnError = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lcKey, ;
lnReserved, KEY_QUERY_VALUE, @lnResult)
IF lnError = ERROR_SUCCESS
lnType = 0
lcBuffer = SPACE(128)
lnBufferSize = LEN(lcBuffer)
lnError = RegQueryValueEx(lnResult, "ComputerName", lnReserved, ;
@lnType, @lcBuffer, @lnBufferSize)
IF lnError = ERROR_SUCCESS AND lcBuffer <> CHR(0)
lnCompName = LEFT(lcBuffer, lnBufferSize - 1)
ENDIF
ENDIF
=RegCloseKey(lnResult)
return(lnCompName)
* Kodun yazarını not almamışım
* Public code from foxpro forums. I did not take note the Author's name
DECLARE aEnv[1,2]
? GetAllEnvStrings(@aEnv)
DISP MEMO LIKE aENV
FUNCTION GetAllEnvStrings
LPARAMETER aEnvArray
DECLARE INTEGER GetEnvironmentStrings IN WIN32API
DECLARE SHORT FreeEnvironmentStrings IN WIN32API INTEGER lpszEnvironmentBlock
DECLARE INTEGER lstrcpyn IN WIN32API AS StrCpyN ;
STRING @ lpDestString, ;
INTEGER lpSource, ;
INTEGER nMaxLength
LOCAL nOffset, nEnvironmentBlock, cEnvString, nNumEntries, cEqualPos
DECLARE aEnvArray(1,2)
nNumEntries = 0
cEnvString = ' '
nOffset = 0
nEnvironmentBlock = GetEnvironmentStrings()
DO WHILE LEN(cEnvString) > 0
cEnvString = REPL(CHR(0), 512)
IF StrCpyN(@cEnvString, nEnvironmentBlock + nOffset, 512) # 0
cEnvString = LEFT(cEnvString, MAX(0,AT(CHR(0),cEnvString) - 1))
nEqualPos = AT('=',cEnvString)
IF nEqualPos > 0
nNumEntries = nNumEntries + 1
DECLARE aEnvArray(nNumEntries,2)
aEnvArray[nNumEntries,1] = LEFT(cEnvString,nEqualPos - 1)
aEnvArray[nNumEntries,2] = SUBST(cEnvString, nEqualPos + 1)
nOffset = nOffset + LEN(cEnvString) + 1
? cEnvString
IF nNumEntries = 12
EXIT
ENDIF
ENDIF
ENDIF
ENDDO
=FreeEnvironmentStrings(nEnvironmentBlock)
RETURN nNumEntries
*!* http://blogs.msdn.com/b/calvin_hsia/archive/2005/12/09/502149.aspx
*!* Author : Calvin Hsia
CLEAR ALL
CLEAR
oEnv=CREATEOBJECT("environ")
?"ComputerName=",oEnv.GetVar("ComputerName")
?"Test=",oEnv.GetVar("test")
oEnv.SetVar("test",TRANSFORM(DATETIME()))
?"Test=",oEnv.GetVar("test")
!set > d:\t.txt
TYPE d:\t.txt
DEFINE CLASS Environ as Custom
PROCEDURE init
DECLARE integer GetEnvironmentVariable IN WIN32API string, string @, integer dwSize
DECLARE integer SetEnvironmentVariable IN WIN32API string lpName, string lpValue
PROCEDURE GetVar(cVar as string)
LOCAL nLen,cstr
cstr=SPACE(200)
nLen=GetEnvironmentVariable(cVar,@cstr, LEN(cstr))
IF nLen>0
cstr=LEFT(cstr,nLen-1)
ELSE
cstr=""
ENDIF
RETURN cstr
PROCEDURE SetVar(cVar as string, cValue as String)
SetEnvironmentVariable(cVar, cValue)
return
ENDDEFINE
arkadaşlar, teşekkürler.
Çok kullanıcılı bir RD uygulama yapmaya çalışıyordum. Bazı GETENV() komutları çok işime yarıyor. Başkaları da var mı diye merak etmiştim. Varmış - ve mutlaka birçok şey halledecek.
Bu çabalar ile belki herkesin bildiği bir detay keşfettim, belki faydam olur:
.exe olarak derlediğimiz bir program eğer içinde "path" olarak veya "default dir" olarak kendi çalışma yerini belirtmiyorsak, orada bulunan yardımcı dosyaları görmüyor.
Örneğimde system.app ile programım.exe aynı dizinde yan yana olmasına rağmen grafiklerde hata veriyordum.
SET PATH TO SYS(2004) ADDI ile sorun halledildi.
Ali,
Environment variable listesi bir anlamda sonsuz. Belli bir listesi yok yani. Yeni bir program kendi kullanimi icin yeni bir degisken adi belirleyebilir. Ornegin GOPATH ve GOROOT, Go dilinin kullandigi iki degisken. Go ile calismayanlarin makinesinde yok (neyle ugrastigim belli oldu galiba:)
Bence environment variable'lara pek guvenerek is yapma. Alabiliyorsan istedigini win32API ile al.
Bu çabalar ile belki herkesin bildiği bir detay keşfettim, belki faydam olur:
.exe olarak derlediğimiz bir program eğer içinde "path" olarak veya "default dir" olarak kendi çalışma yerini belirtmiyorsak, orada bulunan yardımcı dosyaları görmüyor.
Örneğimde system.app ile programım.exe aynı dizinde yan yana olmasına rağmen grafiklerde hata veriyordum.
SET PATH TO SYS(2004) ADDI ile sorun halledildi.
Bu bana garip geldi. VFP'nin normal search path'i exe'nin bulundugu yerden basliyor. Set path ya da set default ile baska bir yer gosterilmis olmasin. Gosterilmediyse zaten varsayilan exe'nin oldugu yer.
Ben de öyle biliyordum- çözene kadar saatlece süründüm,
Resmi gerçek uygulamada RD dan aldım.
---
aşağıdaki halde esas çalışan dosyam irsql_tr1.exe (kırmızı elips içinde)
içinden grafik çağırdığında "system.app" yi görmüyor. (kırmızı kutu)
blatı deneyecek kodu daha hazırlamadım, ne olur bilmiyorum.
ancak daha enteresan VFP*.dll leri görüyor, yoksa hiç çalışamazdı.
SET DEFA ..\14 kullanıyorum - (yıllara göre çöplük, yeşil kutu içinde)
dediğim gibi exe ye PATH TO SYS(2004) ADDI ekleyince sorun kalktı.
fox4um » Kodlama ve Komutlar » GETENV("........")