Detecting Region

Detecting Region

Postby Jeff Barnes » Tue Feb 13, 2007 12:13 am

Hi Everybody,

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



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

Postby Rochinha » Tue Feb 13, 2007 2:13 am

Friends

Search information about GeoIP.
Rochinha
 
Posts: 310
Joined: Sun Jan 08, 2006 10:09 pm
Location: Brasil - Sao Paulo

Get region

Postby techops » Tue Feb 13, 2007 2:33 am

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

Postby Jeff Barnes » Tue Feb 13, 2007 3:17 am

Richard,

When I compile I get the error:


Error: Unresolved external '_HB_FUN_GETSYSTEMDEFAULTLCID'


Where have I gone wrong?


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

Postby techops » Tue Feb 13, 2007 4:09 am

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

Postby Jeff Barnes » Tue Feb 13, 2007 2:13 pm

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

Postby Biel EA6DD » Tue Feb 13, 2007 3:01 pm

Return Country assigned in Regional Settings.

Code: Select all  Expand view
# 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
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby Jeff Barnes » Tue Feb 13, 2007 4:47 pm

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

Postby James Bott » Tue Feb 13, 2007 6:00 pm

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
User avatar
James Bott
 
Posts: 4840
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA

Postby Rochinha » Tue Feb 13, 2007 8:49 pm

Jeff

look this modification in the Beil sample's:

Code: Select all  Expand view
# 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.
Rochinha
 
Posts: 310
Joined: Sun Jan 08, 2006 10:09 pm
Location: Brasil - Sao Paulo

Postby Jeff Barnes » Tue Feb 13, 2007 9:00 pm

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

Postby techops » Tue Feb 13, 2007 10:48 pm

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

Postby Jeff Barnes » Tue Feb 13, 2007 11:11 pm

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  Expand view
# 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
Jeff Barnes
 
Posts: 929
Joined: Sun Oct 09, 2005 1:05 pm
Location: Ontario, Canada

Postby James Bott » Tue Feb 13, 2007 11:53 pm

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
James Bott
 
Posts: 4840
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA

Postby Jeff Barnes » Wed Feb 14, 2007 12:16 am

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

Next

Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 61 guests