kake_fisk Skrevet 29. mars 2009 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.
OldMan Skrevet 29. mars 2009 Skrevet 29. mars 2009 Hvis det er windows kan du bruke GetKeyState(VK_SHIFT) osv.
LostOblivion Skrevet 29. mars 2009 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); }
kake_fisk Skrevet 29. mars 2009 Forfatter Skrevet 29. mars 2009 Har aldri brukt Win32 før, men jeg skal bruke det i en DLL. Kan jeg fortsatt bruke Win32?
GeirGrusom Skrevet 29. mars 2009 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)
kake_fisk Skrevet 30. mars 2009 Forfatter 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.
GeirGrusom Skrevet 30. mars 2009 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)
kake_fisk Skrevet 31. mars 2009 Forfatter 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.
GeirGrusom Skrevet 1. april 2009 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
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å