Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

Tool schrijven die mediabuttons registreert en doorgeeft

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey,

Ik vroeg me af wat de beste manier hiervoor was. Ik heb namelijk een Dell XPS en die heeft een hooop media buttons onderaan. Er is dan een programmatje (Dell Quickset) die daar naar luistert en bv de volume up / down doorstuurt naar het volume van windows. Nu zou ik graag zelf dergelijk programmaatje schrijven. Ik heb ervaring in verschillende talen (bv VB.NET en Java) maar ik heb het gevoel dat dat toch niet de ideale omgeving daarvoor is. Met VB.NET zou dit misschien nog wel kunnen lukken, maar ik heb het gevoel dat die te high-leveled is, aangezien een keyboard hoock schrijven niet echt evident is).

Wat moet er kunnen gebeuren:
- Luisteren naar 'custom' keyboard toetsen. Liefst als eerste, voordat een ander programma dat doet.
- Runnen in system tray (al lijkt me dat niets belissend)
- Grafische kant hoeft niet, maar ik denk dat als hij in system tray staat, hij wel een grafische kant moet hebben ?
- Actie doorvoeren naar applicaties (zoals Windows of bv iTunes).

Ik gok dat ik hier het beste zit met C? Aangezien die veel meer low-level is en daardoor beter gaat kunnen omgaan met de input? Ik heb wel wat basis C kennis, maar niet genoeg om te weten wat er allemaal mogelijk is.

Gooi dit topic aub niet op slot; Ik vraag helemaal geen complete scripts of iets dergelijk, ik wil alles zelf maken (dat vind ik net leuk, allemaal van die kleine tweaks & tools maken). Indien mogelijk mag je uiteraard wel wat kern woorden geven, maar ik kom er normaal zelf ook wel uit.

[ Voor 5% gewijzigd door Verwijderd op 24-06-2008 22:47 ]


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Elke decent programmeertaal kan systemwide keyboard hooks aanmaken, en daar zijn zeker ook zat voorbeelden van te vinden... C++, C#, vb, vb.net, Delphi, wat houdt je tegen om gewoon een code sample op te zoeken en te beginnen :?

[ Voor 7% gewijzigd door SchizoDuckie op 24-06-2008 22:47 ]

Stop uploading passwords to Github!


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Het is vrij eenvoudig om dit met DirectInput af te vangen; als je de cooperative-level van je keyboard device dan op background en non-exclusive zet zou je gewoon die toetsen (buffered) kunnen afvangen.

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 14-11 22:24
Hier staat een voorbeeld van een keyboard hook, daar zou je volgens mij wel wat mee kunnen. Gewoon de toets indrukken en kijken wat er voorbij komt lijkt mij.

Hail to the king baby!


Verwijderd

Topicstarter
Waarom ik niet gewoon een code sample zoek: Bv voor VB.NET heb ik dat ooit gedaan, maar dan kreeg ik ten eerste al een hoop topics waarin mensen denken dat het om keyloggers gaat en er daardoor niet meer geholpen wordt, of anders krijg ik te zien dat een keyboard hook in VB.NET heel omslachtig te doen is (enkel door een paar hacks) en zeggen ze dat je de verkeerde taal gekozen hebt. Vandaar dat ik eerst dus wil nagaan welke taal het meest geschikt hier voor is.

Ik zal dan eens kijken naar het C# voorbeeld en 'DirectInput'. Bedankt alletwee! :)

  • Cypher87
  • Registratie: Oktober 2004
  • Laatst online: 12-10 14:42
Kijk eens op: http://msdn.microsoft.com/en-us/library/ms646309.aspx
Met die functie kom je volgens mij al een heel eind.

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Verwijderd schreef op dinsdag 24 juni 2008 @ 23:03:
Waarom ik niet gewoon een code sample zoek: Bv voor VB.NET heb ik dat ooit gedaan, maar dan kreeg ik ten eerste al een hoop topics waarin mensen denken dat het om keyloggers gaat en er daardoor niet meer geholpen wordt
Ik bedoel dus zoeken naar een code sample via google ;) niet er een (lui) topic voor openen, maar er vanuit gaan dat er vast al een ander geweest is die dat voor je gedaan heeft :) Iets bouwen met een techniek die je nog niet kent is 80% kunnen zoeken, lezen, deduceren en 20% coden als je het mij vraagt

Stop uploading passwords to Github!


Verwijderd

Topicstarter
En als elk topic bestempeld wordt als een 'lui topic', kom je uiteraard ook nergens ;).

Maar ik heb genoeg materiaal om aan de slag te kunnen, bedankt allemaal!

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 17-11 11:45
Even inbreken in dit topic, weet iemand of dit misschien ook mogelijk is in Java? Als ik na Java de keycode afvang van mijn mediakeys krijg ik bij elke key de waarde 0 terug.

Java:
1
public void keyReleased ( KeyEvent evt ) {}

Read the code, write the code, be the code!


  • ATS
  • Registratie: September 2001
  • Laatst online: 29-10 18:37

ATS

wackmaniac, weet je zeker dat je globaal alle keyboard events afvangt? Anders gaat dit natuurlijk niet werken.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op dinsdag 24 juni 2008 @ 22:45:
Er is dan een programmatje (Dell Quickset) die daar naar luistert en bv de volume up / down doorstuurt naar het volume van windows.
Nou weet ik niet wat er zo speciaal is aan dat programmaatje van Dell, maar Windows herkent media keys automatisch. Je hebt geen programmaatje nodig om volume up/down te kunnen doen als je toetsenbord gewoon de relevante keycodes naar de computer stuurt. Zo heeft mijn toetsenbord (Logitech UltraX) bijvoorbeeld geen volume toetsen, wat ik irritant vond, en dus maar een programmaatje heb geschreven dat luistert naar resp. de Favorites en E-mail toetsen die ik toch nooit gebruik middels een global keyboard hook, en die omzet naar volume up/down. En tada, mijn volume gaat nu omhoog en naar beneden, zonder dat er een programmaatje zoals jouw Dell Quickset is die specifiek iets met die toetsen doet.

Andere media keys, zoals start/stop en skip, worden gewoon afgevangen door specifieke media applicaties die op dat moment draaien, zoals Winamp en MediaPlayer. Zij reageren zelf op de toetsen, wat ze kunnen omdat die toetsen gestandaardiseerde scancodes hebben. Er is dus ook hier geen ander programmaatje wat reageert op de toetsen en dan iets met WMP doet oid.

Source-code (C++)
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#define _WIN32_WINNT  0x0500
#include <windows.h>

HHOOK hHook;
LRESULT CALLBACK KeyProc (int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HC_ACTION)
    {
        KBDLLHOOKSTRUCT * data = (KBDLLHOOKSTRUCT*)lParam;
        bool up = (data->flags & LLKHF_UP) != 0;

        if (data->vkCode == VK_BROWSER_FAVORITES)
        {
            keybd_event(VK_VOLUME_UP, 0, KEYEVENTF_EXTENDEDKEY | (up ? KEYEVENTF_KEYUP : 0), data->dwExtraInfo);
            return 1;
        }
        else if (data->vkCode == VK_LAUNCH_MAIL)
        {
            keybd_event(VK_VOLUME_DOWN, 0, KEYEVENTF_EXTENDEDKEY | (up ? KEYEVENTF_KEYUP : 0), data->dwExtraInfo);
            return 1;
        }
    }

    return CallNextHookEx(hHook, nCode, wParam, lParam);
}

int WINAPI WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPSTR lpCmdLine, IN int nShowCmd)
{
    hHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyProc, hInstance, 0);

    MSG msg;
    while (GetMessage(&msg, 0, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    UnhookWindowsHookEx(hHook);

    return (int)msg.lParam;
}

Ik zie trouwens dat ik keydb_event() gebruikte ipv SendInput(). Die was dan vast even makkelijker om in te typen, ookal is keydb_event superseded door SendInput ;)

[ Voor 30% gewijzigd door .oisyn op 25-06-2008 17:38 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1