Hi Everybody,
How can I detect what region a computer is set up for (Canada, United States etc...)
Thanks,
Jeff
Jeff Barnes
(FWH 16.11, xHarbour 1.2.3, Bcc730)
Hi Everybody,
How can I detect what region a computer is set up for (Canada, United States etc...)
Thanks,
Jeff
Hi Jeff,
Try GetLocaleInfoA: the format is below
DLL32 FUNCTION GetLocInfoA;
( Locale AS LONG, ;
LCType AS LONG, ;
lpLCData AS STRING, ;
cchData AS LONG ) ;
AS LONG PASCAL;
FROM "GetLocaleInfoA" LIB "KERNEL32"
The CONSTANTs for passing are
CONSTANT long LOCALE_ICOUNTRY = 5 ' Country code, based on international phone codes
CONSTANT long LOCALE_SCOUNTRY = 6 ' The full localized name of the country.
CONSTANT long LOCALE_SENGCOUNTRY = 4098 ' The full English U.S. name of the country.
CONSTANT long LOCALE_SABBREVCTRYNAME = 7 ' Abbreviated name of the country ISO Standard 3166.
CONSTANT long LOCALE_SNATIVECTRYNAME = 8 ' Native name of the country.
eg.
LOCAL ls_str
ls_str = space(128)
GetLocInfoA( GetSystemDefaultLCID(), LOCALE_SXXX, ls_str,128)
Richard,
When I compile I get the error:
Error: Unresolved external '_HB_FUN_GETSYSTEMDEFAULTLCID'
Where have I gone wrong?
Thanks,
Jeff
Oops!
DLL32 FUNCTION GetSystemDefaultLCID();
AS LONG PASCAL;
FROM "GetSystemDefaultLCID" LIB "KERNEL32"
try this
FUNCTION Main()
LOCAL strCountry := Space(128)
GetLocInfoA( GetSystemDefaultLCID(), LOCALE_SENGCOUNTRY, @strCountry,128)
MsgInfo(strCountry)
RETURN NIL
DLL32 FUNCTION GetLocInfoA;
( Locale AS LONG, ;
LCType AS LONG, ;
lpLCData AS STRING, ;
cchData AS LONG ) ;
AS LONG PASCAL;
FROM "GetLocaleInfoA" LIB "KERNEL32"
DLL32 FUNCTION GetSystemDefaultLCID();
AS LONG PASCAL;
FROM "GetSystemDefaultLCID" LIB "KERNEL32"
we are getting closer ....
Now it will return "United States" but I have my "location" set to "Canada"
(Win XP Pro)
Any ideas ?
Thanks,
Jeff
# include "fivewin.ch"
#define HKEY_CURRENT_USER 2147483649
FUNCTION Main()
Local oReg, cCountry
oReg := TReg32():New(HKEY_CURRENT_USER, "Control Panel\International", .f. )
cCountry := oReg:Get( "sCountry", '' )
MsgInfo(cCountry)
oReg:Close()
RETURN NILJeff,
If I understand what you are saying, you are getting back "English (Canada)" instead of "Canada"?
Here I am getting what is in the location field (for me that is "United States"). My "Standards and Formats" field shows "English (United States)" in the Control Panel. I am using XP Pro SPII.
So, it is working correctly for me.
James
# include "fivewin.ch"
#define HKEY_CURRENT_USER 2147483649
FUNCTION CountryArea()
Local oReg, nCountry
oReg := TReg32():New(HKEY_CURRENT_USER, "Control Panel\International", .f. )
nCountry := oReg:Get( "iCountry", '' )
MsgInfo(cCountry)
oReg:Close()
RETURN nCountryJames.
My mistake ... I was thinking one thing and typing another.
What I get back is "Canada" based on the setting "English (Canada)"
What I would like to do is get the "Location" value and use that instead of using what we currently are getting with Beil's sample.
Do you know if this is possible?
Thanks,
Jeff
Hi Jeff,
Have you tried the function with the different manifest constants. When I run it I get back "Australia" using _SENGCOUNTRY or "AUS" using LOCALE_SABBREVCTRYNAME. I am running XP-SP2
# include "fivewin.ch"
# define LOCALE_ICOUNTRY 5
# define LOCALE_SCOUNTRY 6
# define LOCALE_SENGCOUNTRY 4098
# define LOCALE_SABBREVCTRYNAME 7
FUNCTION Main()
LOCAL strCountry := Space(128)
GetLocInfoA( GetSystemDefaultLCID(), LOCALE_SENGCOUNTRY, @strCountry,128)
MsgInfo(strCountry)
RETURN NIL
DLL32 FUNCTION GetLocInfoA;
( Locale AS LONG, ;
LCType AS LONG, ;
lpLCData AS STRING, ;
cchData AS LONG ) ;
AS LONG PASCAL;
FROM "GetLocaleInfoA" LIB "KERNEL32"
DLL32 FUNCTION GetSystemDefaultLCID();
AS LONG PASCAL;
FROM "GetSystemDefaultLCID" LIB "KERNEL32"Jeff,
OK, I am not clear on exactly what you want. You want some kind of ID number corresponding to the text that is in the Location field? Does that number have some significance to you?
Did you try Rochinha's solution? With a slight bug fix (change cCountry to nCountry) it does return a number value. It returns 1 for me which seems to be the country code (for USA) used in international phone numbers. I don't know if it is number you want.
James
James,
Actually, all I want is to grab the text that is stored in the filed called "Location" in the Regional Options tab.
I want to use this to enable an option in my app that is only available to the Canadian market.
I don't want the user to have to change the main setting as one of our medical systems (software not written by myself) needs this to be set to "English (United States)" or it causes issues. So, I thought if I could change the "Location" to "Canada" (in Windows Regional Options) and grab that value it would solve my problem.
I hope this makes things a bit clearer
Jeff