kake_fisk Skrevet 29. mars 2009 Del Skrevet 29. mars 2009 Er det en funksjon som kan sjekke hvis en knapp på tastaturet er trykket? Den må virke selvom programmet ikke er i fokus. Lenke til kommentar
OldMan Skrevet 29. mars 2009 Del Skrevet 29. mars 2009 Hvis det er windows kan du bruke GetKeyState(VK_SHIFT) osv. Lenke til kommentar
LostOblivion Skrevet 29. mars 2009 Del Skrevet 29. mars 2009 Det kommer helt an på hvilket API du programmerer i. I Win32 kan du sjekke etter WM_KEYDOWN og WM_KEYUP meldinger. LRESULT CALLBACK SomeWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_KEYDOWN: MessageBox( NULL, "You pressed a key!", "Key Down", MB_OK | MB_ICONINFO); break; case WM_KEYUP: MessageBox( NULL, "You released a key!", "Key Up", MB_OK | MB_ICONINFO); switch (wParam) { case VK_ESCAPE: DestroyWindow(hWnd); break; case 'A': MessageBox( NULL, "You released the A button!", "Key A", MB_OK | MB_ICONINFO); break; case VK_PRIOR: MessageBox( NULL, "You released the PAGE UP button!", "Key PgUp", MB_OK | MB_ICONINFO); break; } break; default: break; } return DefWindowProc(hWnd, message, wParam, lParam); } Lenke til kommentar
kake_fisk Skrevet 29. mars 2009 Forfatter Del Skrevet 29. mars 2009 Har aldri brukt Win32 før, men jeg skal bruke det i en DLL. Kan jeg fortsatt bruke Win32? Lenke til kommentar
GeirGrusom Skrevet 29. mars 2009 Del Skrevet 29. mars 2009 Ja Selv bruker jeg fortrinnsvis GetAsyncKeyState fordi den ikke venter. Det finnes også et lavere nivå API fra Windows XP som gjør at du kan lese mer direkte, det funker også for mus og gamepads etc (uten å bruke DirectInput) Lenke til kommentar
kake_fisk Skrevet 30. mars 2009 Forfatter Del Skrevet 30. mars 2009 Jeg kan sikker bare bruke GetAsyncKeyState, må bare finne ut hvordan man lager DLL-er igjen, litt lenge siden nå. Takk for hjelpen alle sammen. Lenke til kommentar
GeirGrusom Skrevet 30. mars 2009 Del Skrevet 30. mars 2009 En DLL-fil er en vanlig .exe fil med en export table og ingen entry-point. For å lage en native .DLL fil i Visual C++ velger du New Win32 Application og huk av for .dll istedet for .exe fil. For å eksportere funksjoner, burde de være StdCall (__stdcall i VC++) og du bruker __declspec(dllexport) for å eksportere funksjoner dersom du ikke bruker en egen EXP fil for det. Oftest pleier jeg selv å definere __declspec(dllexport) slik at den er enkel å fjerne dersom du skal bruke en annen compiler en VC++ Det finnes dog hovedsaklig to andre .dll typer i Windows COM DLL-er (det gamle objektorienterte systemet, som er temmelig vanlig i Windows C++ utvikling) og managed Dll-er. For å skrive managed DLL-er må du lære C++/CLI som er et litt annet språk, som C++ med en del nye elementer for å kunne danne CIL kode. Oftest brukes dette språket bare for å skrive wrapper biblioteker for C# (og andre .NET språk) Lenke til kommentar
kake_fisk Skrevet 31. mars 2009 Forfatter Del Skrevet 31. mars 2009 Jeg bruker Code::Blocks, har VC++, men liker Code::Blocks bedre. Når jeg starter ett DLL prosjekt får jeg mye som jeg ikke trenger, blandt annet import og noe thread og process greier. Men jeg vet ikke helt hva jeg kan fjerne for at det kan bli en helt simpel export DLL. Lenke til kommentar
GeirGrusom Skrevet 1. april 2009 Del Skrevet 1. april 2009 (endret) Du trenger bare en .cpp fil, og en export table fil. Jeg er ikke sikker på om du kan få code::blocks til å lage en slik til deg. Jeg mener å huske at disse slutter med .EXP. Jeg har ikke code::blocks lenger siden jeg formaterte laptopen min og la inn Visual Studio på den istedet. Husk calling convention, jeg tror at thiscall er standard i C++, cdecl standard i C, og stdcall standard i Windows API-et. Endret 1. april 2009 av GeirGrusom Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå