Detecting Region

User avatar
Jeff Barnes
Posts: 912
Joined: Sun Oct 09, 2005 1:05 pm
Location: Ontario, Canada
Contact:

Detecting Region

Post by Jeff Barnes »

Hi Everybody,

How can I detect what region a computer is set up for (Canada, United States etc...)



Thanks,
Jeff
Rochinha
Posts: 309
Joined: Sun Jan 08, 2006 10:09 pm
Location: Brasil - Sao Paulo
Contact:

Post by Rochinha »

Friends

Search information about GeoIP.
techops
Posts: 4
Joined: Wed Nov 29, 2006 11:23 pm
Location: Sydney, Australia

Get region

Post by techops »

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 Grayden
Sydney,
NSW Australia
User avatar
Jeff Barnes
Posts: 912
Joined: Sun Oct 09, 2005 1:05 pm
Location: Ontario, Canada
Contact:

Post by Jeff Barnes »

Richard,

When I compile I get the error:


Error: Unresolved external '_HB_FUN_GETSYSTEMDEFAULTLCID'


Where have I gone wrong?


Thanks,
Jeff
techops
Posts: 4
Joined: Wed Nov 29, 2006 11:23 pm
Location: Sydney, Australia

Post by techops »

Oops!

DLL32 FUNCTION GetSystemDefaultLCID();
AS LONG PASCAL;
FROM "GetSystemDefaultLCID" LIB "KERNEL32"

try this

# 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"
Richard Grayden
Sydney,
NSW Australia
User avatar
Jeff Barnes
Posts: 912
Joined: Sun Oct 09, 2005 1:05 pm
Location: Ontario, Canada
Contact:

Post by Jeff Barnes »

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
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post by Biel EA6DD »

Return Country assigned in Regional Settings.

Code: Select all

# 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 NIL
Regards from Mallorca Is.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Jeff Barnes
Posts: 912
Joined: Sun Oct 09, 2005 1:05 pm
Location: Ontario, Canada
Contact:

Post by Jeff Barnes »

Oh so close ....

Now it will select the

[img]
http://www.can-soft.net/dl/Region.JPG
[/img]

It is selecting the country based on the language setting (see item 1 in screen shot)

Is it possible to get the info stored in "location" (see item 2 in screen shot)

I really appreciate the help.

Thanks,
Jeff
User avatar
James Bott
Posts: 4654
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA
Contact:

Post by James Bott »

Jeff,

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
Rochinha
Posts: 309
Joined: Sun Jan 08, 2006 10:09 pm
Location: Brasil - Sao Paulo
Contact:

Post by Rochinha »

Jeff

look this modification in the Beil sample's:

Code: Select all

# 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 nCountry
This retrieve for me, 55, integer, Brazil.
User avatar
Jeff Barnes
Posts: 912
Joined: Sun Oct 09, 2005 1:05 pm
Location: Ontario, Canada
Contact:

Post by Jeff Barnes »

James.

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
techops
Posts: 4
Joined: Wed Nov 29, 2006 11:23 pm
Location: Sydney, Australia

Post by techops »

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
Richard Grayden
Sydney,
NSW Australia
User avatar
Jeff Barnes
Posts: 912
Joined: Sun Oct 09, 2005 1:05 pm
Location: Ontario, Canada
Contact:

Post by Jeff Barnes »

Richard,

I have tried.

No matter what I have set on my computer in the regional settings, when I try your sample it always returns "United States"

Code: Select all

# 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"
What I am looking for is the value that is stored for the "Location" field at the bottom of the "Regional and Language Options" window, under the "Regional Options" tab.


Thanks,
Jeff
User avatar
James Bott
Posts: 4654
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA
Contact:

Post by James Bott »

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
User avatar
Jeff Barnes
Posts: 912
Joined: Sun Oct 09, 2005 1:05 pm
Location: Ontario, Canada
Contact:

Post by Jeff Barnes »

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 :wink:

Jeff
Post Reply