FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Detecting Region
Posts: 933
Joined: Sun Oct 09, 2005 01:05 PM
Detecting Region
Posted: 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

Thanks,

Jeff Barnes



(FWH 16.11, xHarbour 1.2.3, Bcc730)
Posts: 310
Joined: Sun Jan 08, 2006 10:09 PM
Detecting Region
Posted: Tue Feb 13, 2007 02:13 AM
Friends

Search information about GeoIP.
Posts: 4
Joined: Wed Nov 29, 2006 11:23 PM
Get region
Posted: Tue Feb 13, 2007 02: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
Posts: 933
Joined: Sun Oct 09, 2005 01:05 PM
Detecting Region
Posted: Tue Feb 13, 2007 03:17 AM

Richard,

When I compile I get the error:

Error: Unresolved external '_HB_FUN_GETSYSTEMDEFAULTLCID'

Where have I gone wrong?

Thanks,
Jeff

Thanks,

Jeff Barnes



(FWH 16.11, xHarbour 1.2.3, Bcc730)
Posts: 4
Joined: Wed Nov 29, 2006 11:23 PM
Detecting Region
Posted: Tue Feb 13, 2007 04: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
Posts: 933
Joined: Sun Oct 09, 2005 01:05 PM
Detecting Region
Posted: Tue Feb 13, 2007 02: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

Thanks,

Jeff Barnes



(FWH 16.11, xHarbour 1.2.3, Bcc730)
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Detecting Region
Posted: Tue Feb 13, 2007 03:01 PM
Return Country assigned in Regional Settings.

# 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/
Posts: 933
Joined: Sun Oct 09, 2005 01:05 PM
Detecting Region
Posted: Tue Feb 13, 2007 04:47 PM
Oh so close ....

Now it will select the

http://www.can-soft.net/dl/Region.JPG
" alt="" loading="lazy">

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
Thanks,

Jeff Barnes



(FWH 16.11, xHarbour 1.2.3, Bcc730)
Posts: 4840
Joined: Fri Nov 18, 2005 04:52 PM
Detecting Region
Posted: Tue Feb 13, 2007 06: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

FWH 18.05/xHarbour 1.2.3/BCC7/Windows 10
Posts: 310
Joined: Sun Jan 08, 2006 10:09 PM
Detecting Region
Posted: Tue Feb 13, 2007 08:49 PM
Jeff

look this modification in the Beil sample's:

# 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.
Posts: 933
Joined: Sun Oct 09, 2005 01:05 PM
Detecting Region
Posted: Tue Feb 13, 2007 09: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

Thanks,

Jeff Barnes



(FWH 16.11, xHarbour 1.2.3, Bcc730)
Posts: 4
Joined: Wed Nov 29, 2006 11:23 PM
Detecting Region
Posted: 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
Posts: 933
Joined: Sun Oct 09, 2005 01:05 PM
Detecting Region
Posted: 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"


# 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
Thanks,

Jeff Barnes



(FWH 16.11, xHarbour 1.2.3, Bcc730)
Posts: 4840
Joined: Fri Nov 18, 2005 04:52 PM
Detecting Region
Posted: 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

FWH 18.05/xHarbour 1.2.3/BCC7/Windows 10
Posts: 933
Joined: Sun Oct 09, 2005 01:05 PM
Detecting Region
Posted: 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

Thanks,

Jeff Barnes



(FWH 16.11, xHarbour 1.2.3, Bcc730)