[Delphi Version] Logitech Infinite Spirit Sable, Treiber Patch - Implementierung eines echten Multimedia -Players! Beigefügtes QQ -Symbol Tarnprogramm
██████████████ QQ -Symbol Tarnprogramm
Verwenden Sie "Chat mit so-und-so" in der Titelleiste des QQ-Chat-Fensters in "Mein Dokument so und so", und das Symbol im Chat-Fenster wird zum Symbol des Word-Dokuments und das Symbol im Tablett wird auch andere Symbole in verschiedenen Zuständen.
Änderungssymbole benötigen keine Programmierung. Ändern Sie einfach die QQRes.dll -Datei von QQ2004.
████████████ Logitech Infinite Spirit Sable, Treiber Patch - Erkenne einen echten Multimedia -Spieler
Logitech Infinite Spirit Mink ist eine multifunktionale drahtlose Maus, die von Logitech gestartet wurde.
Das größte Merkmal dieser Maus ist, dass viele Funktionstasten eingebettet sind, und zusätzlich zum Bildlaufrad gibt es 8 Tasten. Die beiden Tasten auf der Seite sind mit Logitechs vielen Mitte bis zum Hochzeit ausgestattet, und die Funktionen sind hauptsächlich zum Auf- und Ablauf der sechs Tasten auf der Taste. , Vorwärts, rückwärts, +, -". Darüber hinaus kann das Scroll -Rad eine Kreuznavigation durchführen, was bedeutet, dass eine zusätzliche linke und rechte Browserfunktion vorliegt.
Aber in der tatsächlichen Verwendung sind die Funktionen des Multimedia -Schlüssels wirklich begrenzt. Warum sagst du das?
Der Media Player, den ich gerne benutze, ist MPC (MS Windows Media Player Classic).
Das Folgende ist eine Frage zu MEDCORMENS MPCs:
Spielen Sie einfach ab und klicken Sie auf die Schaltfläche oder den linken Speicherplatz.
Klicken Sie auf PGUP/PGDOWN im nächsten/vorherigen. Auch wenn Sie nach Videodateien suchen, die mehr als 10 Minuten dauern, ist es kein großes Problem, nach dem Ansehen manuell auf die nächste Datei zu klicken, sodass diese beiden Schlüssel nicht erforderlich sind.
Die neuesten Treiber von Logitech bieten keine Anpassungsfunktionen für die oben genannten Tasten. Um die vielen Funktionstasten auf der Maus vollständig zu nutzen, musste ich dem QQ -Symbolprogramm neue Code hinzufügen, um diese drei Tasten zu implementieren. Außerdem kann dieselbe Maustaste ermöglichen, verschiedene Anpassungsfunktionen in verschiedenen Anwendungen zu implementieren.
Verwenden Sie das offizielle Treiber -Setup -Programm, um einzurichten:
Die Funktion des Medienschlüssels ist die Schlüsselkombination: Strg+F4, und die Funktion des Zooms besteht darin, das Programm zu schließen (sehr effizient).
Das nachfolgende Programm kann die folgenden Funktionen implementieren (hauptsächlich Schlüsselkombination):
◎mpc
Stöbern Sie nach oben: Gehen Sie für 10 Sekunden nach unten;
◎ ACDSEE
Spielen/Pause: Strg+del;
◎ ACD -Fotokanvas
Spielen/Pause: Strg+S;
◎ NetCaptor
Spielen/Pause: Strg+Verschiebung+S;
◎ Ultraedit
Spielen/Pause: Strg+S;
Schließlich möchte ich die Entwickler von Logitech Infinite Spirit Nerk -Treibern verachten!
Die Kernfunktion des Maus -Treibers liegt in der Umwandlung und Verarbeitung von Verschiebungssignalen, die aus der Maus übertragen werden, sowie in Problemen wie der Definition verschiedener Schlüssel und der Verarbeitung der Beschleunigung, aber dies sind nur kleine Probleme im Vergleich zur Verarbeitung und Analyse von Mobile Signale. Da Sie so viele Mid-High-End-Mäuse hergestellt haben, insbesondere diese Lingsie, die ich für RMB 360 gekauft habe, geben Sie nicht mehr Codes ein und fügen ein paar Schlüssel in der Multimedia-Tastatur hinzu, um sie anzupassen. Schließlich sind Computer keine Fernseher, Rekorder, VCD -Maschinen, DVD -Maschinen, kombinierte Audio -Funktionen ... Multimedia -Funktionen sind nur Teil der Funktionen von Computern. Wird in mehr Anwendungssoftware verwendet.
Der Code von ██████████ Delphi ist wie folgt, unter dem nur MPC Hooks verwendet, da in Medienwiedergabesoftware die von der Multimedia -Tastatur generierten Nachrichten und die beiden Seitenschlüssel von Logitechs Treiberhaken entführt werden. Daher muss ich mir einen globalen Haken machen, um die Nachrichten im Voraus zu stoppen, damit der Haken von Logitech die Informationen, die ich benötige, nicht hängen kann.
// ▓▓▓▓▓▓▓▓▓▓▓▓ retitle.dpr
Programm Retitle;
Verwendung
Formen,
SYSUTILS,
Fenster,
UNIT1 in 'Unit1.pas' {f},
Dlgdebug_u in 'dlgdebug_u.pas' {dlgdebug};
{$ R *.res}
Beginnen
application.initialize;
// Status Debugug
dbg: = findCmdlinesWitch ('Debug', ['/', '-'], Richtig);
Wenn DBG dann mit dlgdebug beginnen
dlgdebug: = tdlgdebug.create (Anwendung);
Links: = GetSystemMetrics (sm_cxscreen) -Width;
TOP: = GetSystemMetrics (sm_cyscreen) -Height-60;
Ende;
Application.createform (tf, f);
Anwendung.Run;
Ende.
// ▓▓▓▓▓▓▓▓▓ Einheit1.pas
Einheit Einheit1;
Schnittstelle
Verwendung
Fenster, Nachrichten, Systeme, Varianten, Klassen, Grafiken, Steuerelemente, Formulare,
Dialoge, stdctrls, extctrls, dlgdebug_u;
Typ
TF = Klasse (tform)
TMR: Timer;
Prozedur Formcreate (Absender: Tobject);
Prozedur tmrtimer (Absender: Tobject);
Prozedur WndProc (var message: tmessage);
Privat
{Private Deklarationen}
HFOCUS: HWND;
BUF: Array [0..1024] von Char;
Stitle: String;
Prozedur GetMouseposhwndandClassName (Absender: tPoint);
Funktion Ersatz (s, Quelle, Ziel: String): String;
// Logichi Infinite Spiritual Sable
Verfahren nach unten (VK: Byte);
Vorgehensweise (VK: Byte);
Prozedur Key1 (vk1: byte);
Prozedur key2 (vk1, vk2: byte);
Prozedur Key3 (vk1, vk2, vk3: byte);
öffentlich
{Öffentliche Erklärungen}
Ende;
var
F: TF;
Const
Logitech = $ 0319;
Play_pause = $ e0000;
Play_Left = $ C0000;
Play_right = $ B0000;
Durchführung
Verfahren enableWheelhook;
Verfahren deaktiviert wandern;
{$ R *.dfm}
Prozedur tf.formcreate (Absender: Tobject); // ██████████████████████████████ Schnittstelleninitialisierung
Beginnen
Formstyle: = fsStayontop;
Höhe: = 0;
Breite: = 0;
Verstecken;
Tmr.interval: = 50;
ShowWindow (application.Handle, sw_hide);
Setwindowlong (application.handle, gwl_exStyle,
GetWindowlong (application.Handle, gwl_exStyle) oder WS_EX_TOOLWINDOW und nicht WS_EX_APPWINDOW);
Aktivieren SieWheelhook; // Lotech Lingmian Blue Side Key, Wm_Mousewheel Message Hook
Ende;
Prozedur TF.GetMouseposhwndandClassName (Absender: tPoint); // ████ Tarntitelleiste
var hwnd: Thandle;
Atitle: Array [0..255] von Char;
STR: String;
Beginnen
hwnd: = windowFrompoint (Absender);
Wenn Boolean (Getwindowtext (hwnd, atitle, 256)) beginnen
STR: = String (Atitle);
if ((pos ('und', str)> 0) und (pos ('chat', str)> 0)) Starten Sie dann
str: = ersetzen (str, 'chat', '');
STR: = ersetzen (str, und ',' meine Dokumentation ');
SetWindowText (hwnd, pchar (str));
Ende;
if ((pos ('gruppe-', str)> 0) oder (pos ('Advanced Group-', Str)> 0)) Dann beginnen
str: = ersetzen (str, 'gruppe-', 'mein Brief');
str: = ersetzen (str, 'fortgeschritten', '');
SetWindowText (hwnd, pchar (str));
Ende;
// Chatraum
Wenn POS ('QQ Chat Room', Str)> 0, beginnen
STR: = 'Microsoft Visual C ++ 6.2';
SetWindowText (hwnd, pchar (str));
Ende;
// msn
Wenn POS (' - Dialogue', Str)> 0 dann beginnen
STR: = Ersetzen (str, ' - Dialog', 'Arbeitsdokument');
SetWindowText (hwnd, pchar (str));
Ende;
Ende;
Ende;
Prozedur tf.tmrtimer (Absender: tobject); // ██████████████████████████████████████ █████████████████████████████████████████
var rpos: tPoint;
Beginnen
Wenn Boolean (GetCursorpos (RPOS)), dann GetMouseposhwndandClassName (RPOS);
Ende;
Funktion tf.replacing (s, Quelle, Ziel: String): String; // ██████ String ersetzen
var Site, Strlen: Ganzzahl;
Beginnen
Site: = pos (Quelle, s);
Strlen: = Länge (Quelle);
lösche (s, Site, Strlen);
Insert (Ziel, s, Site);
Ergebnis: = S;
Ende;
Prozedur tf.wndproc (var message: tmessage); //// █████████▌logytech Infinite Spirit Mink
Beginnen Sie mit der Nachricht beginnen beginnen
geerbt;
// Wenn die drei Tasten in der Mitte und rechts von der Multimedia -Tastatur nicht gedrückt werden, beenden
Wenn nicht (((msg = logitech) und ((lparam = play_pause) oder (lparam = play_left) oder (lparam = play_right))) dann beenden;
HFOCUS: = GETFOREGRORGEWINDOW;
GetWindowText (HFOCUS, BUF, 1024);
Stitle: = String (buf);
deb (stitle);
// ACDSEE
if (pos ('acdsee', stitle)> 0) und (pos ('5.0', stitle)> 0) und (msg = logitech), Fall LPARAM von
Play_Pause: Key2 (vk_control, vk_delete); // Strg+del
Play_Left: key2 (vk_menu, ord ('m'); // Alt+m
Play_Right: Key2 (vk_menu, ord ('c')); // Alt+c
Ende;
if (pos ('acd', stitle)> 0) und (pos ('fotocanvas', stitle)> 0) und (msg = logitech), dann Fall LPARAM von
Play_Pause: Key2 (vk_control, ord ('s'); // Strg+s
Play_Left: key2 (vk_shift, ord ('s')); // Shift+s
Play_right: Key2 (vk_shift, ord ('a')); // Shift+a
Ende;
// netcaptor
if (pos ('netcaptor', stitle)> 0) und (msg = logitech), Fall lparam von
Play_Pause: Key3 (vk_control, vk_shift, ord ('s'); // Strg+Shift+S
Play_Left: key1 (vk_f2);
Play_right: Key1 (vk_f3);
Ende;
// Ultraedit
if (pos ('ultraedit-32', stitle)> 0) und (msg = logitech), Fall LPARAM von
Play_Pause: Key2 (vk_control, ord ('s'); // Strg+s
Play_Left: key2 (vk_control, vk_f6); // Strg+F6
Play_Right: Key3 (vk_control, vk_shift, vk_f6); // Strg+Shift+F6
Ende;
Ende;
Prozedur tf.down (vk: byte);
Prozedur TF.UP (VK: BYTE);
Prozedur TF.Key1 (VK1: Byte);
Down (VK1);
Up (vk1);
Ende;
Prozedur tf.key2 (vk1, vk2: byte);
Down (VK1);
Down (VK2);
Up (vk2);
Up (vk1);
Ende;
Prozedur TF.Key3 (VK1, VK2, VK3: BYTE);
Down (VK1);
Down (VK2);
Down (VK3);
Up (vk3);
Up (vk2);
Up (vk1);
Ende;
Ende.
// ▓▓▓▓▓▓▓▓▓▓▓▓ dlgdebug_u.pas
{******************************************** ******************************************************************
Nicht-modales Dialogfeld, das im Programm zum Anzeigen von Debugging-Informationen verwendet wird
2005/02
******************************************************** *********************************************** *****
Einheit DLGDEBUG_U;
Verwendet Windows, Nachrichten, Systeme, Varianten, Klassen, Grafiken, Steuerelemente, Formulare,
Dialoge, stdctrls, comctrls;
Prozedur Deb (themensg: String);
Verfahrensdeb (Themeng: Ganzzahl); Überlastung;
Prozedur Deb (const thest: String; const args: Array von const);
Typ
Tdlgdebug = Klasse (tform)
Re: Trichedit;
Prozedur mmkeyUp (Absender: Tobject; var key: word; Shift: tShiftState);
Prozedur Formcreate (Absender: Tobject);
Privat
{Private Deklarationen}
öffentlich
{Öffentliche Erklärungen}
Eindrückung: Byte;
Selcolor: Tcolor;
Verfahrenszeitleiste;
Ende;
var dlgdebug: tdlgdebug;
DBG: Boolean;
Durchführung
{$ R *.dfm}
Prozedur TDLGDEBUG.MMKEYUP (Absender: Tobject; VAR Key: Word; Shift: TShiftState);
Beginnen
Wenn Key = vk_space dann beginnen
Re.tag: = Integer (nicht boolean (re.tag));
//mm.tag: = Integer (nicht boolean (mm.tag));
// Wenn Boolean (Mm.tag) dann rot.uspend
// sonst red.resume;
Ende;
Ende;
Prozedur Deb (themensg: String);
Wenn nicht DBG, dann beenden;
mit dlgdebug begin // Informationen debuggen
Zeitleiste;
re.selattributes.color: = selcolor;
Re.PARAGRAPH.FIRSTINDENT: = Einzug;
re.lines.add (themensg);
//mm.lines.add(themsg);
Ende;
Ende;
Verfahrensdeb (Themeng: Integer);
Beginnen
Wenn nicht DBG, dann beenden;
mit dlgdebug begin // Informationen debuggen
Zeitleiste;
re.selattributes.color: = selcolor;
Re.PARAGRAPH.FIRSTINDENT: = Einzug;
re.lines.add (inttostr (themensg));
//mm.lines.add(InttoStr(Themsg));
Ende;
Ende;
Prozedur Deb (const thest: String; const args: Array von const);
Beginnen
Wenn nicht DBG, dann beenden;
mit dlgdebug begin // Informationen debuggen
Zeitleiste;
re.selattributes.color: = selcolor;
Re.PARAGRAPH.FIRSTINDENT: = Einzug;
re.lines.add (Format (thest, args));
//mm.lines.add(format(thestal, args));
Ende;
Ende;
Prozedur tdlgdebug.timeline;
Beginnen Sie mit Re beginnen
Absatz.Firstindent: = 0;
Selattributes.color: = clred;
line.add (formatDatetime (long timeFormat, jetzt));
Ende;
procedure tdlgDebug.formcreate (Absender: tobject);
Beginnen
Einzug: = 10;
selcolor: = clylä;
Ende;
Ende.
// ▓▓▓▓▓▓▓▓▓▓▓▓ Hookprj.dpr
Bibliothekshakenprj;
Verwendung
SYSUTILS,
Klassen,
Hook_u in 'Hook_U.pas';
Exporte
WHREHEELHOOK,
DeaktivierenWeelhook;
Beginnen
Ende.
// ▓▓▓▓▓▓▓▓▓ Hook_u.pas
Einheit Hook_u;
Verwendet Windows, Nachrichten, Systeme, Dialoge;
var HK: Hhook; // Hakenhandelwert
HFOCUS: HWND;
BUF: Array [0..1024] von Char;
Stitle: String;
IC: Byte;
Zdelta: kurz;
Funktion WheokProc (Code: Integer; Wparam: Longint;
Funktion EnableWheelhook: Boolesche;
Funktionsstörungen: Boolesche;
Durchführung
// █████████████████████████████████████████�
Funktion WheokProc (Code: Integer; Wparam: Longint;
Beginnen
Zdelta: = kurz (HiWord (pmsg (msg)^. Wparam));
if (code = hc_action) und (pmsg (msg)^. message = wm_mousewheel) und (abs (zdelta)> 200) dann begin
HFOCUS: = GETFOREGRORGEWINDOW;
GetWindowText (HFOCUS, BUF, 1024);
Stitle: = String (buf);
if (pos ('mPlayerc', Stitle)> 0) oder (POS ('Media Player Classic', Stitle)> 0) Dann beginnen Sie
Inc (IC);
// Drücken Sie einmal die blaue Seitentaste, um zwei Nachrichten zu generieren.
// Wenn alle verarbeitet werden, entspricht es zweimal schnell weiterleitungen, z. B. 10 Sekunden
// if (ic mod 2) = 0 dann starten Sie
KeyBD_Event (vk_control, mapvirtualKey (vk_control, 0), 0, 0);
Wenn Zdelta> 200 dann beginnen
KeyBD_Event (vk_right, mapvirtualKey (vk_right, 0), 0, 0);
KeyBD_Event (vk_right, mapvirtualKey (vk_right, 0), keyEventf_keyup, 0); // direkt nach oben
Ende sonst beginnen
keyBd_event (vk_left, mapvirtualKey (vk_left, 0), 0, 0);
keyBd_event (vk_left, mapvirtualKey (vk_left, 0), keyEventf_keyup, 0); // links up
Ende;
keybd_event (vk_control, mapvirtualKey (vk_control, 0), keyEventf_keyup, 0); // Strg up up
//Ende;
PMSG (MSG)^. Nachricht: = 0; // Da die Seitenschlüsselmeldung lokal verarbeitet wurde, muss sie zur Verarbeitung nicht an andere Threads übergeben werden
Ende sonst Ergebnis: = CALLNEXhookex (HK, Code, WPARAM, LONGINT (@MSG)); // Wenn es nicht MPC ist, passieren
Ende sonst Ergebnis: = CALLNEXHOOKEX (HK, Code, WPARAM, LONGINT (@MSG)); // Wenn es nicht zwei blaue Seitentasten sind, geben Sie es nach unten
Ende;
Funktion EnableWheelhook: Boolesche;
Beginnen
Wenn HK = 0 dann beginnen
HK: = setWindowshookex (WH_getMessage, @Wheelhookproc, Hinstance, 0);
Ergebnis: = wahr;
Ende sonst Ergebnis: = falsch;
Ende;
Funktionsstörung: boolean;
Beginnen
Wenn HK <> 0 dann beginnen
UNookwindowshookex (HK);
HK: = 0;
Ergebnis: = wahr;
Ende sonst Ergebnis: = falsch;
Ende;
Ende.
QQ: 7995.7944 (Shensi Road)
E-Mail: [email protected]