Undrar om det går på något sätt läsa in en vanlig txt fil från en webbsida Tex. (http://www) och sedan i programmet läsa in första raden där man kanske skriver 2.0.0 och sedan så visar programmet detta på en label tex. "Nu finns version: 2.0.0 tillgänglig."
Det går faktiskt helt utan kontroller t.o.m. Med endast en Winsock eller liknande (som t.ex. winsock api som kanske är lite för komplicerat för dig?). Ska ge dig kod snart om ingen hinner före. :)
Det går faktiskt helt utan kontroller t.o.m. Med endast en Winsock eller liknande (som t.ex. winsock api som kanske är lite för komplicerat för dig?). Ska ge dig kod snart om ingen hinner före. :)
jag har inte tillgång till winsock control, sitter med learning edition av vb. så att du vet :)
Det finns "internet"-API:er som ingår i alla Windowsversioner om man inte vill använda kontroller eller koda på winsock-nivå:
'Deklarationer
Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Private Const scUserAgent = "VB OpenUrl"
Private Const INTERNET_FLAG_RELOAD = &H80000000
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
(ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, _
ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" _
(ByVal hOpen As Long, ByVal sUrl As String, ByVal sHeaders As String, _
ByVal lLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function InternetReadFile Lib "wininet.dll" _
(ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, _
lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetCloseHandle Lib "wininet.dll" _
(ByVal hInet As Long) As Integer
'Kod
Dim hOpen As Long, hOpenUrl, lNumberOfBytesRead As Long
Dim bDoLoop As Boolean, bRet As Boolean
Dim sReadBuffer As String * 2048, sBuffer As String
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
hOpenUrl = InternetOpenUrl(hOpen, "http://www.medialabs.nu/version.txt", vbNullString, 0, _
INTERNET_FLAG_RELOAD, 0)
bDoLoop = True
While bDoLoop
sReadBuffer = vbNullString
bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
Wend
If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
If hOpen <> 0 Then InternetCloseHandle (hOpen)
sBuffer = Split(sBuffer, vbNewLine)(0)
'Första raden i version.txt ligger nu i sBuffer.
Jaha, du menade Inet-kontrollen när du skrev Init-kontrollen? ;) Ja, den kontrollen är faktiskt en (onödig) wrappning kring funktionerna i wininet.dll.
medialabs skrev:
tackar, har en följefråga, kan man på något sätt kolla om användaren är ansluten till internet, om inte så ska inte den där funktionen köras.
Eh, ja? Du hade ju själv en funktion för just det i den här tråden. Remember?
Jaha, du menade Inet-kontrollen när du skrev Init-kontrollen? ;) Ja, den kontrollen är faktiskt en (onödig) wrappning kring funktionerna i wininet.dll.
medialabs skrev:
tackar, har en följefråga, kan man på något sätt kolla om användaren är ansluten till internet, om inte så ska inte den där funktionen köras.
Eh, ja? Du hade ju själv en funktion för just det i den här tråden. Remember?
Nu ska vi inte vara sån :e , fan det är dags för mig att gå och lägga mig snart. :p
Fast om vi ska vara allvarliga så kollar faktiskt funktionen i den tråden bara om det finns en LAN-anslutning och inte ifall Internet är tillgängligt. Så om "Internet" inte finns eller om servern är nere så kommer du att få ett problem med att programmet "fryser" i cirka 30 s (TCP/IP-timeouten.)
Två förslag:
1. Låt användaren själv manuellt sköta kontrollen genom en "check for updates"-knapp.
2. Lägg funktonen i en separat bakgrundstråd så att huvudprogrammet inte "hänger" (krångligare).
Fast om vi ska vara allvarliga så kollar faktiskt funktionen i den tråden bara om det finns en LAN-anslutning och inte ifall Internet är tillgängligt. Så om "Internet" inte finns eller om servern är nere så kommer du att få ett problem med att programmet "fryser" i cirka 30 s (TCP/IP-timeouten.)
Två förslag:
1. Låt användaren själv manuellt sköta kontrollen genom en "check for updates"-knapp.
2. Lägg funktonen i en separat bakgrundstråd så att huvudprogrammet inte "hänger" (krångligare).
Tänkte just på att lägga in den i en msgbox så att användaren kan klicka på den.
Nu finns det en nu version av System Monitor, döpte den till System Information istället. :p
Fast nu råkade jag visst svamla en hel del däruppe. Internet-API verkar inte alls ha samma problem med timeouter som winsock-API:erna, så om Internet inte är tillgängligt (eller din server är nere) så märker du det på att sBuffer blir tom ganska direkt.
Fast det är nog ändå vara en bra idé att låta användaren själv sköta kontrollen: för modemanvändare så kan det ju vara irriterande om modemet börjar ringa upp utan att de vet varför.
Nu finns det en nu version av System Monitor, döpte den till System Information istället.
Bra. Döp om "nätverkskort" till "nätverksinterface" också. Det mesta i listan är ju inte fysiska kort. (adapter<>card på engelska).
Fast nu råkade jag visst svamla en hel del däruppe. Internet-API verkar inte alls ha samma problem med timeouter som winsock-API:erna, så om Internet inte är tillgängligt (eller din server är nere) så märker du det på att sBuffer blir tom ganska direkt.
Fast det är nog ändå vara en bra idé att låta användaren själv sköta kontrollen: för modemanvändare så kan det ju vara irriterande om modemet börjar ringa upp utan att de vet varför.
Nu finns det en nu version av System Monitor, döpte den till System Information istället.
Bra. Döp om "nätverkskort" till "nätverksinterface" också. Det mesta i listan är ju inte fysiska kort. (adapter<>card på engelska).
Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long
Public Function DownloadFile(URL As String, _
LocalFilename As String) As Boolean
Dim lngRetVal As Long
lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
If lngRetVal = 0 Then DownloadFile = True
End Function
Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long
Public Function DownloadFile(URL As String, _
LocalFilename As String) As Boolean
Dim lngRetVal As Long
lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
If lngRetVal = 0 Then DownloadFile = True
End Function