Newsgroup: it.comp.programmare.win32
Titolo: strano fatto

In un programma devo caricare i byte di un'immagine da un file
BMP. Dopo aver caricato in memoria l'intero file, che è puntato dalla
variabile header, uso il seguente codice:
typedef struct {
 BITMAPFILEHEADER     fileheader;
 BITMAPINFOHEADER    infoheader;
 RGBQUAD                        colori[1];
} *HEADER;
HEADER       header;
RGBTRIPLE *img;
....
img=(RGBTRIPLE *) header+header->fileheader.bfOffBits;
....
Dopo numerosi tentativi, ho visto che per caricare correttamente l'immagine
devo usare:
img=(RGBTRIPLE *) header+header->fileheader.bfOffBits-36;
Come mai? Seguendo la documentazione delle API bfOffBits indica l'offset
dall'inizio del file ai byte dell'immagine!

Esite un'API che permetta al mio programma di non essere presente nella task
list (premendo CTRL+ALT+CANC).
Inoltre esiste un'api per togliere il programma dalla barra delle
applicazioni?
Ringrazio anticipatamente
Giakomino

 dall'inizio del file ai byte dell'immagine!
Penso che il problema stia nel cast. Tu "casti" il primo puntatore a
RGBTRIPLE*, che punta a dati a 24 bit. Dopodiche` fai una somma fra
questo puntatore e uno scalare, che il compilatore C interpreta come
puntatore[scalare]. Quindi in pratica se bfOffBits fosse 20, l'offset
generato dal compilatore sarebbe 60 bytes (ventesima posizione in un
array composto da elementi da tre bytes).
Ho notato adesso che non si capisce nulla di cio` che ho scritto,
comunque il succo del discorso e` sostituire (RGBTRIPLE*) con (char *).
:)
---
Bye! Lorenzo Lutti
http://www.geocities.com/SiliconValley/Peaks/6258/

Giakomino
Saluti,
	Marco.

Esite un'API che permetta al mio programma di non 
essere presente nella task
list (premendo CTRL+ALT+CANC).
Inoltre esiste 
un'api per togliere il programma dalla barra 
delle
applicazioni?
Ringrazio 
anticipatamente
Giakomino







 ha scritto nel 
  messaggio 
news:8o8h5a$4r$1...@sirmdpsin16.inwind.it
...


applicazioni?
Basta far si' che le finestre del programma non siano visibili.
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
--------------------------------------------------------------
"Partire e' un po' morire e morire e' partire un po' troppo !"
--------------------------------------------------------------

applicazioni?
Puoi utilizzare la funzione ShowWindow...
ShowWindow ( application.handle, SW_HIDE );
Ciao!
--
- Carlo -

Basta far si' che le finestre del programma non siano visibili.
???
E da quando un programma a finestre not visible non risulta presente sulla
Task List? Quanto detto non vale neppure per la Task bar...


Carlo Bertuccini ha scritto nel messaggio ...
Quanto detto non vale neppure per la Task bar...
Mi correggo da solo...come ho già detto :
ShowWindow ( application.handle, SW_HIDE );
--
- Carlo -

 Quanto detto non vale neppure per la Task bar...
Ti sei corretto da solo :)
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
-----------------------------------------------
Dovro' prendere lezioni di Internet, 
se non sai di Internet non ti considera nessuno 
(Carmen di Pietro) 
-----------------------------------------------

solo sul Kernel di sistemi Win9x (no NT/2K).
??? non documentata ???
RegisterServiceProcess e' abbastanza documentata, a mio parere, e non
credo proprio sia questo lo scopo per la quale viene utilizzata !
Bisogna stare attenti al fatto che quando si "registra" un processo in
questo modo, esso rimane in esecuzione, anche quando l'utente si
riconnette con un altro nome alla macchina.
In pratica il processo muore SOLO quando il computer viene spento.


credo proprio sia questo lo scopo per la quale viene utilizzata !
Intendevo non documentata ai fini del topic!
Cmq è strano il fatto che, essendo una comune API, debba essere richiamata
come funzione esterna di DLL e non venga riconosciuta dal compilatore
tramite le Unit standard (..Window, ShellAPI etc...).


VISIBILI.
Io mi riferivo (come suggerisce il subject) alla Task List.


Io mi riferivo (come suggerisce il subject) alla Task List.
Non ci capiamo, bisogna vedere che intendi per Task List, se la lista
delle applicazioni o quella dei processi...

Intendevo non documentata ai fini del topic!
Probabilmente perche' non si usa per i fini del topic !



RegisterServiceProcess NON compare nei file di help del SDK di
Microsoft, la documentazione relativa ad essa si trova solamente su
MSDN. Inoltre nei file header del SDK non è presente la sua
dichiarazione, ed è quindi necessario linkarla dinamicamente. Credo
sia per questo motivo che si considera questa funzione "non
documentata".
In ogni caso non conosco altri metodi per nascondere il nome di un
processo dalla task list (in Win9x naturalmente, se consideriamo WinNT
le cose sono diverse e più complesse). 
Per quanto riguarda la definizione di "task list"... Beh, in Win9x non
si scappa, l'elenco dei task che compare alla pressione dei tasti
Ctrl+Alt+Del è uno solo, ed è l'elenco di tutti i processi non
classificati, appunto, come servizi. In WinNT abbiamo due liste,
"Applications" e "Processes" (se non erro, non ho modo di verificare
adesso). Come diceva Andrea l'elenco delle "Applications" corrisponde
alla lista delle finestre top-level visibili. Il contenuto di questa
lista corrisponde a quello della taskbar (o, per usare una definizione
più adatta, appbar), e in Win9x è possibile visualizzarlo con
l'applicazione "taskman.exe" presente nella cartella di Windows (che
mostra un elenco DIVERSO dalla task list!).
In ogni caso credo che se consideriamo WinNT invece di Win9x, il
termine "task list" sia più opportunamente tradotto come "process
list" e, in ogni caso, nascondere il nome di un'applicazione da questa
lista non è tanto facile come chiamare RegisterServiceProcess() in
Win9x...
Saluti,
	Marco.

delle applicazioni o quella dei processi...
Dicesi Task List la finestra che visualizza i Task (termine sostituito con
Processo a partire da Win9x) attivi in quel momento.
E' conosciuta come TaskList la finestra visualizzata alla pressione di
Ctrl+Alt+Canc.
Sinceramente non riesco a capire la differenza che poni tra processi e
applicazioni! Per lista di applicazioni io intendo i "programmi" installati
sul disco fisso di una macchina, che non c'entrano nulla con quanto è in
fase di esecuzione sulla macchina stessa!
Forse sono io che non riesco a capire quanto mi vuoi dire.


Probabilmente perche' non si usa per i fini del topic !
Diciamo che lo scopo per cui è stata creata è quello, ma ti posso assicurare
che ho risposto molte + volte alla domanda "Come si nasconde un processo
dalla Task List" che alla domanda "Come posso registrare un service
process?".


fase di esecuzione sulla macchina stessa!
Definizione opinabile...
Una cosa sono i programmi installati, un altra sono i programmi in
esecuzione e un altra cosa ancora sono tutti i processi che in quel
momento vengono schedulati. Sotto NT/2000 la differenza si nota bene
con il Task Manager...
Luc.

process?"
Mi dimostri, CARTA ALLA MANO, che uno degli usi di
RegisterServiceProcess e' quello di far scoparire le applicazioni
dalla Task List ?

le cose sono diverse e più complesse). 
Mi dimostri, CARTA ALLA MANO, che uno degli usi di
RegisterServiceProcess e' quello di nascondere le applicazioni dalla
Task List ?

fase di esecuzione sulla macchina stessa!
Io per applicazioni intendo quelle che girano e le cui finestre
compaiono nella taskbar, per processi si intende qualsiasi task stia
girando sulla macchina.
La barra delle applicazioni mostra, difatti, le finestre top-level
visibili tuttora in uso sulla macchina.
Sotto WindowsNT (conosco meglio le parti tecniche di questo s.o. che
non di 9x) la lista delle applicazioni del task manager mostra, per
l'appunto queste finestre, la lista dei processi, invece, mostra tutti
i task attivi.

dalla Task List ?
Più che dimostrarti che un'applicazione con RegisterServiceProcess sparisce
dalla Task List non posso fare!
Con quel "Carta alla mano" non dici assolutamente nulla, ti posso anche
dimostrare che il parametro NON DOCUMENTATO SPI_SCREENSAVERRUNNING della
SystemParametersInfo puoi impedire (su sistemi 9x) di disabilitare la
combinazione Ctrl+Alt+Canc.
Con questo voglio dirti che alla Microsoft *non* conviene documentare tutto
il funzionamento dell'API!


il funzionamento dell'API!
La Microsoft, come vedi, documenta eccome.

La Microsoft, come vedi, documenta eccome.
Mi spiace ma siamo su 2 punti di vista completamente diversi!
Trovami, tra la documentazione Microsoft, una struttura conosciuta come
TWinPassword! Se la M$ documentasse tutto ci sarebbe scritto anche questo,
ma te lo garantisco, non è documentata! In questa struttura Win9x (e forse
anche NT/2K, ma non ci giurerei) memorizza User e Password. Questo è solo un
esempio, esistono molte altre cose che M$ non documenta!


esempio, esistono molte altre cose che M$ non documenta!
??? Che Microsoft non documenti determinati aspetti del proprio
sistema operativo e' perfettamente lecito e NORMALE, cosi' come
qualsiasi altra casa software non documenta aspetti del proprio
software. Ripeto : nessuno si aspetta che tutte le caratteristiche di
un software siano in bella mostra.


Io la uso a tale scopo e funziona alla perfezione. Ti basta?

Io la uso a tale scopo e funziona alla perfezione. Ti basta?
No.


La Microsoft sarà anche leader nel settore dei S.O., ma quando si
progetta un sistema operativo non è certo facile pensare a tutte le
esigenze dei futuri programmatori. Se il sistema non include un'API
che risolve un particolare problema, la causa è probabilmente che quel
problema alla Microsoft non se lo sono mai posti.
Il fatto che Win9x non contenga una funzione "ad hoc" per nascondere
un processo dalla tasklist viene considerato da me come una carenza
del sistema e mi sento quindi autorizzato ad utilizzare altri
strumenti (come RegisterServiceProcess) per ottenere il risultato
richiesto. E non importa se in origine quel metodo era stato pensato
per un fine diverso... Quello che conta è l'effetto, non il nome della
funzione.
Saluti,
	Marco.

un software siano in bella mostra.
Ti ricordo che Linux è Open Source, quindi TUTTO è assolutamente visibile!


	Marco.
Un programma del genere potrebbe avere vita breve. Sfruttare i 'bug'
di funzioni di S.O. non paga mai...
Luc.

di funzioni di S.O. non paga mai...
Non sono affatto d'accordo, c'è qualcuno che ci vive sui Bug dei sistemi
operativi!


funzione.
Quello che conta E' il NOME della funzione, non l'effetto, perche'
domani mattina, il progettista di RegisterServiceProcess, non essendo
questa funzione destinata all'uso che ci si propone di fare, potrebbe
pensare bene di non nascondere il nome dell'applicazione della Task
Lista, ma di aggiungerci un bel [SERVIZIO] di seguito al nome.

Ti ricordo che Linux č Open Source, quindi TUTTO č assolutamente visibile!
CHE CAVOLO C'ENTRA ?
Linux non e' un pacchetto commerciale.
Ora, pero', devo andare a pranzo, ti saluto...

operativi!
A suo rischio e pericolo...

you wrote:

Mah, non so chi rischi di + tra chi sfrutta i bug e chi si sorbisce questi
sfruttatori....
--
- Carlo -

Ora, pero', devo andare a pranzo, ti saluto...
Allora tu giustifichi il comportamento Microsoft dell'invio del seriale del
P3!
Se dici che è giusto che in un pacchetto commerciale "è lecito" non mostrare
tutti gli aspetti...
Cmq secondo me è una questione di punti di vista, potremmo anche continuare
per 10 anni ma penso che non ne verremmo mai a capo!



Non lo considero un 'bug' del sistema... Lo chiamerei più volentieri
"side-effect". Per quanto riguarda la vita breve sono d'accordo, nel
senso che sicuramente questo tipo di "effetti collaterali" spesso
scompaiono o vengono modificati quando il S.O. viene aggiornato dal
suo produttore... Non per niente esistono programmi che funzionano O
sotto Win95, O sotto Win98, O sotto winNT, ecc... Il requisito
fondamentale di un programma "serio" è di funzionare correttamente su
qualsiasi computer nell'ambito del sistema operativo PER CUI è stato
progettato, non viene implicitamente garantita l'integrità per gli
altri S.O...  :-)
Saluti,
	Marco.


Questo potrebbe accadere se uscisse una nuova versione del sistema
operativo. In questo caso sarebbe lecito supporre che il mio programma
necessiti una revisione, essendo stato progettato per il sistema
operativo precedente in cui conoscevo esattamente l'effetto delle
funzioni che chiamavo.

persone.
Mi sembra comunque che questo thread abbia perso lo scopo iniziale.
Non stiamo discutendo di etica di programmazione (su questo campo si
possono trovare ben pochi programmatori completamente d'accordo...).
Una persona ha chiesto un modo per ottenere ciň che voleva... E io ho
dato l'indicazione di un metodo che funziona. Poi sta a questa persona
decidere se č "giusto" utilizzarlo oppure no.
Saluti,
	Marco.

per 10 anni ma penso che non ne verremmo mai a capo!
Non e' una questione di punti di vista.
Non si possono avere due opinioni diverse sul significato del termine
"RegisterServiceProcess".
Sembra che tu voglia ignorare parti dei miei messaggi in cui ti
ricordo qual e' il vero comportamento di questa funzione.
Se non vuoi capire, non e' colpa mia, d'ora in poi ci sara' qualcun
altro al posto mio a cercare di fare entrare il cucchiaio con la pappa
a mo' di aeroplanino nella boccuccia d'oro.

decidere se è "giusto" utilizzarlo oppure no.
Aridaglie col "funziona"...sembrate dimenticare un aspetto importante
della questione : quando su una macchina possono accedere piu' utenti,
la propria applicazione, registrata con questa funzione, NON SMETTE DI
FUNZIONARE quando si passa da una sessione all'altra e questo aspetto
non e' conforme al normale comportamento di un programma.
Bisogna sottolineare questo aspetto quando si consiglia di utilizzare
questa funzione, perche' potrebbe essere un effetto indesiderato.
Credo che ci sia qualcuno nel gruppo che, attualmente, ha questo
problema...

operativo.
Errato, basta aggiornare la DLL.

a mo' di aeroplanino nella boccuccia d'oro.
Ti riconfermi a fine mail! Sei troppo sicuro di avere ragione quando dici le
cose, e se fossi io a "doverti imboccare"?
Non molto fa rispondesti con tono "sicuro" (come quello che mostri adesso)
ad un mio messaggio, ma qualcuno al di sopra delle parti ti disse che eri in
errore ... non vorrei ti dovesse ricapitare! Io almeno sostengo la mia tesi,
ma NON INFANGO la tua solo perchè non la condivido!
Magari come programmatore sei anche bravo, ma in quanto a maniere hai ancora
parecchio da imparare!
Ciao
--
- Carlo -

errore ... non vorrei ti dovesse ricapitare!
A tutti puo' capitare di essere in errore, come te in questo thread,
ma come diceva mia nonna, a cercar di lavar la testa all'asino, si
spreca acqua e sapone....
Adios...(devo andare, scusa ma mi ha risposto Prosise per mail e devo
chiarire un punto con lui).

chiarire un punto con lui).
Certo, tu devi comunicare con Prosise, Richter e Petzold!
In alternativa ti va bene Lorenzo Lutti o Alex Martelli? Già loro sono
troppo scarsi per te!
Cosa hai chiesto a Prosise, come lggere i nomi dei processi sotto NT!
Fammi un favore, evita di rispondere perchè con le persone convinte come te
non ci voglio avere nulla a che fare!
La prossima volta studia per conto tuo come leggere il testo da Explorer o
come vedere le backdoor aperte, non chiederlo a uno scarso come me!
--
- Carlo -

sempre nel giusto!
E' vero, ma che vuoi, e' la natura di tutti coloro che sanno di essere
dei cervelloni. A parte gli scherzi, ti ho risposto per e-mail.
Cerchiamo di finirla qui, non mi sembra il caso di continuare a
ribattere come dei compagni d'asilo.
Visto che non sei intenzionato a rispondere alle mie future richieste
d'aiuto, ti faccio invece presente che io sono intenzionato a
rispondere alle tue, come a quelle di tutti gli altri.
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
-----------------------------------------------
Dovro' prendere lezioni di Internet, 
se non sai di Internet non ti considera nessuno 
(Carmen di Pietro) 
-----------------------------------------------