Newsgroup: it.comp.lang.visual-basic
Titolo: Nome PC

C'è una funzione che mi torna il nome della macchina su cui è installato il
programma?
-- 
Claudio P.

 programma?
Ho trovato il metodo su un sito ....ma c'è un problemino....
----------------------------------
Private Declare Function GetComputerName Lib "kernel32" Alias
"GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
 'PER TROVARE IL NOME DEL COMPUTER
    Dim risultato As Long
    Dim NomeComputer As String * 145
    Dim lunghezzastringa As Long
    NomeComputer = String(256, 0)
    lunghezzastringa = Len(NomeComputer)
    risultato = GetComputerName(NomeComputer, lunghezzastringa)
----------------------------------
Il nome mi viene restituito correttamente ma il problema è che è il
risultato è in una stringa ma in una stringa che funziona da buffer ......se
la utilizzo per concatenarla ad altre stringhe in coda non mi concatena
niente mentre prima mi riesce a concatenare tutto.
Come faccio a passare da un buffer ad una stringa "vera"?
Grazie
-- 
Claudio P.

 niente mentre prima mi riesce a concatenare tutto.
Non ho capito, se fai:
dim strStringa as String
[...]
strStringa = trim$(NomeComputer)
non funziona? 

 ha scritto nel
messaggio news:33di0bF...@individual.net...

Ma c'è qualcuno che conosce le basi della programmazione qui dentro?
1) Le funzioni dell'API di solito utilizzano un buffer, e come tale non può
(e comunque non dovrebbe) essere usato come stringa "tuttofare".
2) Non so che significato abbia quel 145 (so a cosa serve, non so cosa
significa)
3) Puoi anche usare una stringa dinamica, ma alla fine il concetto è che se
quella è la stringa del nome computer non capisco perchè debba essere usata
per altri scopi.
4) Quell'accozzaglia di codice in un concetto di buona programmazione
strarebbe racchiusa in una funzione tipo MyGetComputerName e non libero nel
programma.
5) di solito (e leggiamolo di tanto in tanto 'sto MSDN!) le funzioni
dell'api che lavorano con le stringhe restituiscono la lunghezza della
stringa restituita, oppure la stringa terminata da un nullchar, quindi il
buffer va poi ripulito in base a questi comportamenti.
Ciao
--
Qualunque mentecatto può scrivere codice che un computer possa capire.
I buoni programmatori scrivono codice che gli uomini possano capire.
[Martin Fowler]

 buffer va poi ripulito in base a questi comportamenti.
Infatti nella variabile risultato (che è long) finirà il risultato della
funzione API
Comunque per maggior chiarezza posto il codice che ho scaricato dal sito del
NG con tanto di commenti, siccome non avevo mai utilizzato le funzioni API
(e non sapevo nemmeno che era l'unica strada per trovare il nome del PC) ho
cercato e ho trovato sul sito questo codice, e siccome avevo ancora dei
dubbi ho chiesto aiuto qui ....
-------------------------------------------------------------
Private Sub Command1_Click()
' ------------------------------------------------
' questa variabile conterrà il risultato della
' operazione
Dim risultato As Long
' ------------------------------------------------
' stringa che funzionerà da buffer per la funzione
' in questa stringa, la funzione immagazzinerà il
' nome del computer
Dim NomeComputer As String * 145
' ------------------------------------------------
' qui andremo a memorizzare la grandezza del
' buffer destinato ad accogliere NomeComputer
Dim lunghezzastringa As Long
' ------------------------------------------------
' la stringa viene riempita di zero per compatibilità
' con il formato della API Win32
NomeComputer = String(256, 0)
' ------------------------------------------------
' passiamo la dimensione massima del buffer
lunghezzastringa = Len(NomeComputer)
' ------------------------------------------------
' otteniamo il risultato: e' importante ricordare che
' questa api non restituisce il valore sottoforma
' di stringa (As String); essa va invocata passando
' come argomenti una String in funzione di buffer,
' e un valore long indicante la lunghezza massima che
' puo' assumere il nome computer.
risultato = GetComputerName(NomeComputer, lunghezzastringa)
Text1.Text = NomeComputer
End Sub
-----------------------------------------------------------------------
-- 
Claudio P.

 non funziona?
Si già fatto, ma non funziona
-- 
Claudio P.

 funzione non lo sai
No, ma ormai conosco i miei polli ed ho acquisito un notevole intuito, come
dimostra il codice che hai postato, IMHO errato.
Ciao

 dimostra il codice che hai postato, IMHO errato.
Guarda come ti ho scritto non so come utilizzare le funzioni API e quindi ho
cercato sulla rete qualche esempio.
Ho trovato questo che funziona, ho provato a riutilizzarla ma l'unico
problema è quello che dicevo della concatenazione, sicuramente è un mio
errore che provo a concatenare una stringa che viene ultizzata da buffer con
un'altra stringa .....ed è per questo che ho chiesto aiuto ....se secondo te
è sbagliata e hai qualche suggerimento tanto meglio così imparo qualcosa che
non sapevo ...aaltrimenti vedrò di trovare qualcosa sulla rete o di chiedere
ad altri .....ma scrivere semplicemente "che il codice è sbagliato" mi
smebra inutile visto che è ovvio visto che chiedevo aiuto
-- 
Claudio P.

 smebra inutile visto che č ovvio visto che chiedevo aiuto
Hai la stringa che contiene quello che ti serve pių alcuni caratteri di
buffer.
Hai la lunghezza della parte significativa della stringa.
Usa la left, per Bill!
termoPilucco, dalle pareti!
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Usa la left, per Bill!
Avevo provato anche questo ma non funzionava, poi mi sono accorto che
commettevo un errore e utilizzavo la lunghezza+1
Grazie
-- 
Claudio P.

 Usa la left, per Bill!
ah, blasfemia sotto natale! :-P
-- 
ciao, hal