Search  
Friday, February 10, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Win32 API  Kernel32 sau Ke...
 Kernel32 sau Kernel64
 
 12/24/2009 4:52:26 PM
User is offlineEugen Gliga
1038 posts
1st




Kernel32 sau Kernel64
 (N/A)
Am incercat si eu un program scris in VFP pe un Windows7 pe 64. In principiu a mers, dar au aparut niste erori la lansare si mi-am dat seama ca sunt din procedura de citire serie fizica HDD. N-am putut testa mai mult pt ca nu am acces acasa la un Windows pe 64. In prima faza am fost tentat sa inlocuiesc in procedura respectiva, Kernel32 cu Kernel64. Binenteles ca e o gluma. Inca nu exista Kernel64, dar e posibil ca anumiti parametri sa trebuisaca declarati altfel. Poate s-a mai lovit cineva de treaba asta.


 2/21/2010 1:10:46 AM
User is offlineovidiu cucu
57 posts




Re: Kernel32 sau Kernel64
 (N/A)

Cam cum arata "procedura de citire serie fizica HDD"?
Poate prindem un fir... ;)


Ovidiu Cucu
Microsoft MVP
Cofondator CODEXPERT.RO
 2/22/2010 3:39:27 PM
User is offlineGigi
29 posts


Re: Kernel32 sau Kernel64
 (United States)
Aici ar fi un mic cod pt. a determina din Vfp daca Win e pe 64 sau nu: http://www.berezniker.com/content/pages/visual-foxpro/how-detect-64-bit-os.
Poate ajuta la "prinderea unui fir". :)
 2/27/2010 11:13:20 PM
User is offlineovidiu cucu
57 posts




Re: Kernel32 sau Kernel64
 (N/A)

Nice.
Asta imi poate spune daca nenorocita mea de aplicatie ruleaza pe un sistem de 32 sau 64 biti. 

Mai departe?..


Ovidiu Cucu
Microsoft MVP
Cofondator CODEXPERT.RO
 2/28/2010 12:42:40 AM
User is offlineEugen Gliga
1038 posts
1st




Re: Kernel32 sau Kernel64
 (N/A)
Functia de citire Serie HDD este mai jos. Pe 32 biti merge, dar pe 64 mi-a dat eroare. Momentan nu am la dispozitie un Win pe 64 sa fac teste, dar banuiesc ca ceva parametri trebuie declarati altfel. Daca descoperi ceva, anunta-ne si pe noi.


Function GetSerialNumber
Lparameters  cDrive
If Vartype(cDrive)#"C" Or Empt(cDrive) Or !Isalp(cDrive)
    cDrive="C"
Else
    cDrive=Upper(Left(cDrive,1))
Endif
Declare Integer CloseHandle In kernel32 ;
    INTEGER hObject
Declare Integer CreateFile In kernel32 ;
    STRING lpFileName,;
    INTEGER dwDesiredAccess,;
    INTEGER dwShareMode,;
    INTEGER lpSecurityAttributes,;
    INTEGER dwCreationDisposition,;
    INTEGER dwFlagsAndAttributes,;
    INTEGER hTemplateFile
Declare Integer DeviceIoControl In kernel32 ;
    INTEGER hDevice,;
    INTEGER dwIoControlCode,;
    STRING @lpInBuffer,;
    LONG nInBufferSize,;
    STRING @lpOutBuffer,;
    LONG nOutBufferSize,;
    INTEGER @lpBytesReturned,;
    INTEGER lpOverlapped
Handle = CreateFile("\\.\" + cDrive + ":",;
    0xC0000000, 3, 0, 3, 0, 0)
m.sn = ""
m.mod = ""
m.rev = ""
If Handle <> -1
    m.sci =""
    m.sci = m.sci + Chr(0) + Chr(2) + Chr(0) + Chr(0)
    m.sci = m.sci + Chr(0)
    m.sci = m.sci + Chr(1)
    m.sci = m.sci + Chr(1)
    m.sci = m.sci + Chr(0)
    m.sci = m.sci + Chr(0)
    m.sci = m.sci + Chr(0xA0)
    m.sci = m.sci + Chr(0xEC)
    m.sci = m.sci + Chr(0)
    m.sci = m.sci + Chr(0)
    m.sci = m.sci + Replicate(Chr(0), 499)
    m.sco = Replicate(Chr(0), 2048)
    m.ret_buffersize = 0
    m.otv=DeviceIoControl( Handle,;
        0x7C088,;
        @m.sci,;
        LEN(sci),;
        @m.sco,;
        LEN(sco),;
        @m.ret_buffersize, 0)
    CloseHandle(Handle)
    If m.otv <> 0
        m.sn = Chrtran( Alltrim( conv21( Substr(m.sco, 37, 20) ) ),Chr(0), "")
        m.rev = Chrtran( Alltrim( conv21( Substr(m.sco, 63, 8) ) ),Chr(0), "")
        m.mod = Chrtran( Alltrim( conv21( Substr(m.sco, 71, 40) ) ),Chr(0), "")
    Endif
Endif
If Empt(m.sn)
    Handle = CreateFile("\\.\" + cDrive + ":", 0x00000000, ;
        3,0, 3, 0, 0)
    If Handle <> -1
        m.sn = ""
        m.mod = ""
        m.rev = ""
        m.sci = Replicate(Chr(0),1024)
        m.sco = Replicate(Chr(0),1024)
        m.ret_buffersize = 0
        m.otv = DeviceIoControl( Handle,;
            0x2D1400,;
            @m.sci,;
            LEN(sci),;
            @m.sco,;
            LEN(sco),;
            @m.ret_buffersize, 0)
        CloseHandle(Handle)
        If m.otv <> 0
            m.pos0 = Asc(Substr(m.sco,13,1))
            m.pos1 = Asc(Substr(m.sco,17,1))
            If m.pos0 > 0
                m.pos1 = m.pos0
            Endif
            m.pos2 = Asc(Substr(m.sco, 21, 1))
            m.pos3 = Asc(Substr(m.sco, 25, 1))
            m.mod = Substr(m.sco, m.pos1+1, m.pos2 - m.pos1)
            m.pos4 = At(Chr(0), m.mod)
            If m.pos4 > 0
                m.mod = Alltrim(Chrtran(m.mod, Chr(0), ""))
            Endif
            If m.pos3 > m.pos2
                m.rev = Substr(m.sco, m.pos2+1, m.pos3 - m.pos2)
            Else
                m.rev = Substr(m.sco, m.pos2+1)
            Endif
            m.pos4 = At(Chr(0), m.rev)
            If m.pos4 > 0
                m.rev = Alltrim(Left(m.rev, m.pos4 - 1))
            Endif
            If m.pos3 > 0
                m.pos3 = m.pos3 + 1
                m.sco1 = Substr(m.sco, m.pos3, 40)
                m.sco1 = Alltrim(m.sco1)
                m.sn = ""
                m.pos3 = 1
                For m.j = 1 To 20
                    m.ch1 = Chr(Evaluate("0x" + Alltrim(Substr(m.sco1, m.pos3, 2))))
                    m.pos3 = m.pos3 + 2
                    m.ch2 = Chr(Evaluate("0x" + Alltrim(Substr(m.sco1, m.pos3, 2))))
                    m.pos3 = m.pos3 + 2
                    m.sn = m.sn + m.ch2 + m.ch1
                Endfor
                m.sn = Alltrim(Chrtran(m.sn, Chr(0), ""))
            Else
                m.sn = ""
            Endif
        Endif
    Endif
Endif
Return m.sn

Func conv21
Lpar m.str
If Len(m.str)%2 = 1
    m.str = m.str + " "
Endif
Local m.i, m.str2
m.str2 = ""
For m.i=1 To Len(m.str)
    m.str2 = m.str2 + Substr(m.str, m.i + Iif(m.i%2=0, -1, 1), 1)
Endfor
Return m.str2


 2/28/2010 4:39:06 PM
User is offlineGigi
29 posts


Re: Kernel32 sau Kernel64
 (N/A)
Am testat pe calculatorul meu pe care am Windows XP Professional x64 si a mers perfect, nu a dat nici o eroare. Din pacate nu am Windows 7 x64.
Daca iti mai amintesti, care era mai exact mesajul de eroare?
  Visual FoxPro  Win32 API  Kernel32 sau Ke...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement