Valaki el tudná magyarázni, hogy mitől tud működni >nekem< az alábbi programkód, és mik az elvi (v. Gyakorlati) hibák benne?
"Code:Blocks"-ot használok, sima C nyelven, abban futtattam ezt is. Nekem látszólag gond nélkül működik, nem fagy be - igaz, az az egy hibája van, hogy nem tudom, hol lehetne kilépni a programból.
Ugyanakkor nem látom át, hogy hogy csinálja meg mégis azt, amit kell, amellett, hogy ránézésre - nekem - elég furának tűnne (pedig nem netről néztem le, illetve az MSDN helpjét használtam):
#define I int
#define S SetWindowsHookExA
#define G GetMessageA
typedef struct K{I C;}*P;
I __stdcall S(I,I,I,I);
I __stdcall G(I,I,I,I);
I K(I n,I a,I b){if(a==256|a==260)putchar(((P)b)->C);}
I main(){G(S(13,K,0,0),0,0,0);}
Előre is köszönöm az útmutatásokat! :)
Ja, és mivel aránylag kezdő vagyok, ha durva hibát is követtem el, kéretik nem lehordani! :)
Köszönöm!
typedef struct K{int C;}*P;
int __stdcall SetWindowsHookExA(int,int,int,int);
int __stdcall GetMessageA(int,int,int,int);
int K(int n,int a,int b){
if(a==256|a==260)putchar(((P)b)->C);
}
int main(){
GetMessageA(SetWindowsHookExA(13,K,0,0),0,0,0);
}
így néz ki a kódod, miután a preprocesszor megrágta
egyébiránt nem tudom, minek az a 3 define, illetve hogy mit kellene csinálnia, nálam a nagy semmi idáig
Szóval nálad működik , VAGY csak lefut és nem csinál semmit ???
Mivel nekem rendesen kiírja a leütött karaktereket.
Illetve még nálam így is működik:
#define S SetWindowsHookExA
#define G GetMessageA
#define I int
typedef struct{I C;}*P;
__stdcall S(I,I,I,I),G(I,I,I,I);
K(I n,I a,I b){if(a-256)putchar(((P)b)->C);}
main(){G(S(13,K,0,0),0,0,0);}
Itt egyáltalán mi az 'a'? Mármint azt sejtem, hogy a billentyűleütés értéke, de miért van az, hogy az előzőnél if(a==256) volt, itt if(a-256), VISZONT az if(a-255)-el már nem működik?
??? :O ???
windows api függvényeket hívogatsz, minimum illik megnézni MSDN-en, hogy mit csinál
egyébként légy oly szíves töröld ki az egész katyvaszt, és írd be ezt a helyére:
while(1) putchar(getch());
voilá
"minimum illik megnézni MSDN-en"
Wááá, mondom hogy megnéztem! Elolvastam, hogy mire valók ezek, és az alapján jött ki ez --- de akkor is furcsa, hogy ez ennyi.
Még C#-ban is 8× ennyi volt legalább, és ott be is fagyott. Itt meg akkor sem akad ki, ha rátenyerelek a billentyűzetre.
Egyébként meg a getch()-s megoldás nekem itt nem alternatíva, mivel nekem az a lényeg, hogy fókuszon kívül is fogja a billentyűzetpuffer tartalmát - pl. ha egy teljes képernyős programba írok az előtérben.
Meg azt sem értem, hogy a DLL-ből meghívott függvényeknél honnét találja ki a típusát -- mivel még akkor is működik nekem, ha nem határozok meg a stdcall hívás előtt típust.
:/ ????
JA, MEG HÁT AMI A FŐ, hogy az API-kat nem az MSDN-ben leírt típusokkal hívom meg, azt mégis működik.
Vagy csak ez egy ideiglenes véletlen nálam?
de, azokkal hívod meg
egyébként szólhattál volna, hogy csak egy keyloggert akarsz összerántani (mondjuk sejthettem is volna)
"egyébként szólhattál volna, hogy csak egy keyloggert akarsz összerántani (mondjuk sejthettem is volna)"
Egyaránt a magyar és az angol fórumokon is egy marha rossz, sértő és alaptalan beidegződés, hogy aki már egyből a billentyűpuffert akarja olvasni, az vírusíró. :( Már bocs.
NEM, nem keyloggert akarok csinálni.
Kollégista társaim kértek meg, hogy COD4-hez (amit csak látásból ismertettek akkor meg) csináljak meg egy kényelmi funkciót nyújtó programot, ami automata módon tölt be nem hivatalos letöltött pályákat multiban.
C#-ban elkezdtem, azt 3 napig csináltam 8-tól hajnali 1-ig, hogy profin meglegyen.
Most kiderült, hogy ez is kiakad néha.
Na jó, itt lett elegem belőle, hogy dolgoztam, szívtam rajta nemtudomhány órát, azt még most se működik.
Ez van, ha csak C#-ot tud az ember. :P
Ezért most elkezdtem utánanézni, hogy >SIMA< C-ben, ami >talán< valamivel megbízhatóbb, kevésbé bugosabb eredményt produkál, hogyan tudom megcsinálni azt, amivel C#-ban próbálkoztam.
De azért "köszi a bizalmat"! >(
1. Nem teljesen értem, hogy mi köze a billentyűpuffernek a COD4-es pályabetöltéshez. Gyanítom semmi.
2. Ha valamit C#-ban 3 napig csináltál és az sok volt, akkor most felejtsd el, mert C-ben sokszor annyi idő lesz.
3. Ha kiakad a programod hiba van benne. Nem túl valószínű, hogy a C# hibája...
"sértő és alaptalan beidegződés, hogy aki már egyből a billentyűpuffert akarja olvasni, az vírusíró. :( Már bocs."
kábé ugyanolyan sértő, mint a keyloggert vírusnak titulálni, már bocs :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!