1

Konu: İşletim sistemi algılamada sorun

Merhaba

Bir XP altında compile ettiğim program OS(3) 'e doğru olarak 5 veriyor.
Programı Windows 7 64bit'de çalıştırdığım zamanda 5 veriyor.
Programı Windows 7 altında compile edip EXE'yi çalıştırdığım zaman 5 veriyor.
IDE'den çalıştırırsam, doğru olarak 6 veriyor.

OS yerine GetVersionEx kullanınca, birşey değişmiyor.

-------------------

OS(3) yerine sadece OS() sorgularsam, cevaplar doğru:
XP için 5.1 ve Win7 için 6.01

Program admin haklara sahip.

Sanırım bir yerde bir düşünce hatası yapıyorum, ama nerde, bir türlü bulamadım.

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

2

Re: İşletim sistemi algılamada sorun

asagidaki kod yardimi ile OS nin 64 bit olup olmadigi anlayip ona gore degerlendirme yapabilirsin

Kaynak : http://www.berezniker.com/content/pages … -64-bit-os

Visual Fox Pro
* First determine if IsWow64Process function exists in the OS we're running under

DECLARE Long GetModuleHandle IN WIN32API STRING lpModuleName
DECLARE Long GetProcAddress IN WIN32API Long hModule, String lpProcName
llIsWow64ProcessExists = (GetProcAddress(GetModuleHandle("kernel32"),"IsWow64Process") <> 0)
 
llIs64BitOS = .F.
IF llIsWow64ProcessExists
    DECLARE Long GetCurrentProcess IN WIN32API
    DECLARE Long IsWow64Process IN WIN32API Long hProcess, Long @ Wow64Process
    lnIsWow64Process = 0
    * IsWow64Process function return value is nonzero if it succeeds
    * The second output parameter value will be nonzero if VFP application is running under 64-bit OS
    IF IsWow64Process( GetCurrentProcess(), @lnIsWow64Process) <> 0
        llIs64BitOS = (lnIsWow64Process <> 0)
    ENDIF   
ENDIF   
? llIs64BitOS

ayrica ben sistem bilgisi icin asagidaki kodu kullaniyorum

Visual Fox Pro
function FindOS()

    Local lcplatform
 
    lcplatform = "(Unknown)"
    lcos = Os(1)
 
Do Case
Case "6.01" $ lcOS
    Do Case
    Case Os(5) = "7100"
        Do Case
        Case Os(11) = "1"
            lcPlatform = "WINDOWS7"
        Case Inlist(Os(11),"2","3")
            lcPlatform = "WIN2008 R2" && early guess (May-2-2009)
        Otherwise
            lcPlatform = "(Unknown)"
        Endcase
    Otherwise
        lcPlatform = "(Unknown)"
    Endcase
 
Case "6.00" $ lcOS
    Do Case
    Case Os(5) = "6000"
        lcPlatform = "VISTA"
    Case Os(5) = "6001"
        Do Case
        Case Os(11) = "1"
            lcPlatform = "VISTASP1"
        Case Inlist(Os(11),"2","3")
            lcPlatform = "WIN2008"
        Otherwise
            lcPlatform = "(Unknown)"
        Endcase
    Otherwise
        lcPlatform = "(Unknown)"
    Endcase
Case "5.02" $ lcOS
    lcPlatform = "WIN2003"
Case "5.01" $ lcOS
    lcPlatform = "WINXP"
Case "5.0" $ lcOS
    lcPlatform = "WIN2000"
Case "NT" $ lcOS
    lcPlatform = "WINNT"
Case "4.0" $ lcOS Or "3.9" $ lcOS
    lcPlatform = "WIN95"
Case "4.1" $ lcOS
    lcPlatform = "WIN98"
Case "4.9" $ lcOS
    lcPlatform = "WINME"
Case "3." $ lcOS
    lcPlatform = "WIN31"
Otherwise
    lcPlatform = "(Unknown)"
ENDCASE
 
Return lcOS

3

Re: İşletim sistemi algılamada sorun

Merhaba Soykan Bey

Sanırım derdimi iyi aktaramadım.
Benim sorunum 32bit / 64bit değildi.
Sorunumu OS() ilede çözdüğünü belirtmişdim.
Sorum daha çok tartışma anlamında bir soru idi. Neden OS(3) ve GetVersionEx  böyle garip bir davranış sergiliyor.

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

4

Re: İşletim sistemi algılamada sorun

Ok ben yanlis algilamisim smile
sanirim bu 64Bit ve onun üzerinde calisacak uygulamalarin tam oturmayisi.