[Delphi Version] Logitech Infinite Spirit Sable ، Driver Patch - تنفيذ لاعب وسائط متعددة حقيقية! برنامج QQ QQ Icon Camouflage
██████████████ QQ ICON PROGRAM
اقلب "الدردشة مع SO-SO" في شريط عنوان نافذة الدردشة QQ إلى "مستند My Document So-So" ، ويصبح الرمز الموجود في نافذة الدردشة رمز Word Document ، والأيقونة الموجودة في الدرج يصبح أيضًا أيقونات أخرى في حالات مختلفة.
لا تتطلب أيقونات التغيير البرمجة ، فقط قم بتعديل ملف qqres.dll من QQ2004.
████████████ Logitech Infinite Spirit Sable ، تصحيح السائق - أدرك لاعب وسائط متعددة حقيقية
Logitech Infinite Spirit Mink هو ماوس لاسلكي متعدد الوظائف الذي تم إطلاقه بواسطة Logitech.
أكبر ميزة في هذا الماوس هي أنه يحتوي على العديد من مفاتيح الوظائف المضمنة ، بالإضافة إلى عجلة التمرير ، هناك 8 مفاتيح. تم تجهيز المفتاحين على الجانب مع العديد من الفئران من Logitech ، وتتمكن الوظائف بشكل أساسي من تصفحها لأعلى ولأسفل ؛ ، إلى الأمام ، للخلف ، +، -". بالإضافة إلى ذلك ، يمكن لعجلة التمرير إجراء التنقل عبر المتقاطع ، مما يعني أن هناك وظيفة تصفح يسار واليمين إضافية.
ولكن في الاستخدام الفعلي ، فإن وظائف مفتاح الوسائط المتعددة محدودة حقًا. لماذا تقول ذلك؟
مشغل الوسائط الذي أحب استخدامه هو MPC (MS Windows Media Player Classic).
فيما يلي سؤال حول أوجه القصور في MPC:
ما عليك سوى تشغيل/توقف مؤقتًا وانقر فوق الزر الأيسر أو المساحة ، والزر الأيسر موجود على الماوس ، وبالتالي فإن زر التشغيل/الإيقاف المؤقت زائدة عن الحاجة ؛
انقر فوق PGUP/PGDOWN على الملف التالي/السابق. حتى لو كنت تبحث عن ملفات فيديو تزيد أعمارها عن 10 دقائق ، فهي ليست مشكلة كبيرة للنقر يدويًا على الملف التالي بعد مشاهدة واحدة ، لذلك فإن هذين المفتاحين غير ضروريان.
لا توفر أحدث برامج تشغيل Logitech وظائف التخصيص للمفاتيح الثلاثة المذكورة أعلاه ، لذلك من أجل الاستفادة الكاملة من مفاتيح الوظائف على الماوس ، اضطررت إلى إضافة رمز جديد إلى برنامج أيقونة QQ لتنفيذ هذه المفاتيح الثلاثة. ويمكنه أيضًا تمكين زر الماوس نفسه من تنفيذ وظائف التخصيص المختلفة في تطبيقات مختلفة.
استخدم برنامج إعداد برنامج التشغيل الرسمي لإعداده:
وظيفة مفتاح الوسائط هي مجموعة المفاتيح: Ctrl+F4 ، ووظيفة التكبير هي إغلاق البرنامج (فعال للغاية).
يمكن للبرنامج اللاحق تنفيذ الوظائف التالية (المزيج الرئيسي بشكل رئيسي):
◎mpc
تصفح: تقدم لمدة 10 ثوان ؛
◎ Acdsee
Play/Pause: Ctrl+Del ؛
◎ ACD Fotocanvas
Play/Pause: Ctrl+S ؛
◎ Netcaptor
Play/Pause: Ctrl+shift+s ؛
◎ Ultraedit
Play/Pause: Ctrl+S ؛
أخيرًا ، أريد أن أحتقر مطوري لوجيتشن لانهائي سائقي Mink!
تكمن الوظيفة الأساسية لسائق الماوس في تحويل ومعالجة إشارات الإزاحة المنقولة من الماوس ، وكذلك مشاكل مثل تعريف المفاتيح المختلفة ومعالجة التسارع ، ولكن هذه مجرد مشاكل صغيرة مقارنة بمعالجة وتحليل لا توجد صعوبات تقنية وظيفية في هذا الجانب. نظرًا لأنك صنعت الكثير من الفئران من منتصف إلى أعلى ، خاصةً هذه Lingsie التي اشتريتها مقابل RMB 360 ، فلماذا لا تكتب المزيد من الرموز وإضافة بعض المفاتيح في لوحة مفاتيح الوسائط المتعددة لتخصيصها. بعد كل شيء ، ليست أجهزة الكمبيوتر هي أجهزة التلفزيون ، ومسجلات ، وآلات VCD ، وآلات DVD ، والصوت المدمج ... وظائف الوسائط المتعددة فقط جزء من وظائف أجهزة الكمبيوتر. تستخدم في المزيد من برامج التطبيق.
رمز ██████████ Delphi كما يلي ، من بينها فقط MPC يستخدم السنانير ، لأنه في برنامج تشغيل الوسائط ، يتم اختطاف الرسائل التي تم إنشاؤها بواسطة لوحة مفاتيح الوسائط المتعددة والفاتيح الجانبية بواسطة خطافات برنامج تشغيل Logitech. لذلك لا بد لي من صنع خطاف عالمي لنفسي لإيقاف الأخبار مقدمًا حتى لا يتمكن خطاف Logitech من ربط المعلومات التي أحتاجها.
// ▓▓▓▓▓▓▓▓▓▓▓▓ RETITLE.DPR
برنامج RETITLE ؛
يستخدم
الأشكال ،
sysutils ،
النوافذ ،
unit1 في 'unit1.pas' {f} ،
dlgdebug_u في 'dlgdebug_u.pas' {dlgdebug} ؛
{$ r *.res}
يبدأ
application.initialize ؛
// حالة التصحيح
dbg: = findCmdLinesWitch ('debug' ، ['/' ، '-'] ، true) ؛
إذا كان DBG ثم مع dlgdebug تبدأ
dlgdebug: = tdlgdebug.create (application) ؛
اليسار: = getSystemMetrics (SM_CXSCREEN)-العرض ؛
أعلى: = getSystemMetrics (sm_cyscreen) -height-60 ؛
نهاية؛
Application.CreateForm (TF ، F) ؛
application.run ؛
نهاية.
// ▓▓▓▓▓▓▓▓▓ unit1.pas
الوحدة 1 ؛
واجهة
يستخدم
Windows ، الرسائل ، sysutils ، المتغيرات ، الفئات ، الرسومات ، عناصر التحكم ، النماذج ،
مربعات حوار ، stdctrls ، extctrls ، dlgdebug_u ؛
يكتب
tf = فئة (tform)
TMR: تتيمر ؛
Formcreate الإجراء (المرسل: TOBJECT) ؛
الإجراء tmrtimer (المرسل: TOBJECT) ؛
الإجراء wndproc (رسالة var: tmessage) ؛
خاص
{إعلانات خاصة}
hfocus: hwnd ؛
buf: Array [0..1024] of Char ؛
stitle: سلسلة.
الإجراء getMouseposhwNdandClassName (المرسل: tpoint) ؛
وظيفة استبدال (s ، المصدر ، الهدف: سلسلة): سلسلة ؛
// Logichi Infinite Sublic Sable
الإجراء لأسفل (VK: بايت) ؛
الإجراء UP (VK: بايت) ؛
الإجراء key1 (vk1: byte) ؛
الإجراء key2 (vk1 ، vk2: byte) ؛
الإجراء مفتاح 3 (VK1 ، VK2 ، VK3: BYTE) ؛
عام
{الإعلانات العامة}
نهاية؛
var
F: TF ؛
كونست
logitech = $ 0319 ؛
play_pause = $ E0000 ؛
play_left = $ c0000 ؛
play_right = $ b0000 ؛
تطبيق
الإجراء EnableHeelhook
الإجراءات تعطيل
{$ r *.dfm}
الإجراء tf.formcreate (المرسل: TOBJECT) ؛ // ██████████████████████████████ تهيئة الواجهة
يبدأ
formstyle: = fsstayontop ؛
الارتفاع: = 0 ؛
العرض: = 0 ؛
يخفي؛
tmr.Interval: = 50 ؛
showwindow (application.handle ، sw_hide) ؛
setWindowlong (application.handle ، gwl_exstyle ،
getWindowlong (application.handle ، gwl_exstyle) أو ws_ex_toolwindow وليس ws_ex_appwindow) ؛
enablewheelhook ؛ // lotech lingmian blue side key ، wm_mousewheel hook
نهاية؛
الإجراء tf.getmouseposhwndandclassname (المرسل: tpoint) ؛ // ████ شريط العنوان التمويه
var hwnd: Thandle ؛
atitle: Array [0..255] of Char ؛
STR: سلسلة.
يبدأ
hwnd: = windowfrompoint (المرسل) ؛
لو
STR: = سلسلة (atitle) ؛
if ((pos ('و' ، str)> 0) و (pos ('chat' ، str)> 0)) ثم ابدأ
STR: = استبدال (str ، 'chat' ، '') ؛
STR: = استبدال (str ، "و" ، "وثائق بلدي") ؛
SetWindowText (HWND ، PCHAR (STR)) ؛
نهاية؛
if ((pos ('group-' ، str)> 0) أو (pos ('Advanced Group-' ، Str)> 0)) ثم ابدأ
str: = استبدال (str ، 'group-' ، 'رسالتي') ؛
STR: = استبدال (str ، 'Advanced' ، '') ؛
SetWindowText (HWND ، PCHAR (STR)) ؛
نهاية؛
// غرفة الدردشة
إذا كانت نقاط البيع ("QQ Chat Room" ، STR)> 0 ثم ابدأ
STR: = 'Microsoft Visual C ++ 6.2' ؛
SetWindowText (HWND ، PCHAR (STR)) ؛
نهاية؛
// MSN
إذا pos (' - حوار' ، str)> 0 ثم ابدأ
STR: = استبدال (str ، ' - الحوار "،" وثيقة العمل ") ؛
SetWindowText (HWND ، PCHAR (STR)) ؛
نهاية؛
نهاية؛
نهاية؛
الإجراء tf.tmrtimer (المرسل: tobject) ؛ // ██████████████████████████████████████ █████████████████████████████████████████
var rpos: tpoint ؛
يبدأ
إذا كان Boolean (getCursorpos (RPOS)) ثم getMouseposhwNdandClassName (RPOs) ؛
نهاية؛
دالة tf.replacing (S ، المصدر ، الهدف: السلسلة): سلسلة ؛ // ██████ استبدال السلسلة
موقع var ، strlen: integer ؛
يبدأ
الموقع: = pos (المصدر ، s) ؛
Strlen: = الطول (المصدر) ؛
حذف (s ، الموقع ، strlen) ؛
إدراج (الهدف ، s ، الموقع) ؛
النتيجة: = s ؛
نهاية؛
الإجراء tf.wndproc (رسالة var: tmessage) ؛ //// █████████▌logytech infinite Spirit Mink
ابدأ بالرسالة تبدأ
ورث
// إذا لم يتم الضغط على المفاتيح الثلاثة الموجودة في الوسط واليمين لوحة مفاتيح الوسائط المتعددة
إذا لم يكن ((msg = logitech) و ((lparam = play_pause) أو (lparam = play_left) أو (lparam = play_right))) ثم الخروج ؛
hfocus: = getForeGroundWindow ؛
getWindowtext (hfocus ، buf ، 1024) ؛
stitle: = سلسلة (buf) ؛
ديب (stitle) ؛
// Acdsee
if (pos ('acdsee' ، stitle)> 0) و (pos ('5.0' ، stitle)> 0) و (msg = logitech)
play_pause: key2 (vk_control ، vk_delete) ؛ // ctrl+del
play_left: key2 (vk_menu ، ord ('m')) ؛ // alt+m
play_right: key2 (vk_menu ، ord ('c')) ؛ // alt+c
نهاية؛
if (pos ('acd' ، stitle)> 0) و (pos ('fotocanvas' ، stitle)> 0) و (msg = logitech) ثم case lparam of
play_pause: key2 (vk_control ، ord ('s')) ؛ // ctrl+s
play_left: key2 (vk_shift ، ord ('s')) ؛ // shift+s
play_right: key2 (vk_shift ، ord ('a')) ؛ // shift+a
نهاية؛
// netcaptor
if (pos ('netcaptor' ، stitle)> 0) و (msg = logitech) ثم case lparam of
play_pause: key3 (vk_control ، vk_shift ، ord ('s')) ؛ // ctrl+shift+s
play_left: key1 (vk_f2) ؛
play_right: key1 (vk_f3) ؛
نهاية؛
// Ultraedit
if (pos ('ultraedit-32' ، stitle)> 0) و (msg = logitech) ثم case lparam of
play_pause: key2 (vk_control ، ord ('s')) ؛ // ctrl+s
play_left: key2 (vk_control ، vk_f6) ؛ // ctrl+f6
play_right: key3 (vk_control ، vk_shift ، vk_f6) ؛ // ctrl+shift+f6
نهاية؛
نهاية
الإجراء TF.Down (VK: BYTE) ؛
الإجراء TF.UP (VK: BYTE) ؛
الإجراء TF.Key1 (VK1: BYTE) ؛
أسفل (VK1) ؛
UP (VK1) ؛
نهاية؛
الإجراء TF.Key2 (VK1 ، VK2: BYTE) ؛
أسفل (VK1) ؛
أسفل (VK2) ؛
UP (VK2) ؛
UP (VK1) ؛
نهاية؛
الإجراء TF.Key3 (VK1 ، VK2 ، VK3: BYTE) ؛
أسفل (VK1) ؛
أسفل (VK2) ؛
أسفل (VK3) ؛
UP (VK3) ؛
UP (VK2) ؛
UP (VK1) ؛
نهاية؛
نهاية.
// ▓▓▓▓▓▓▓▓▓▓▓▓ dlgdebug_u.pas
{*************************************************** ******** ************************************
مربع الحوار غير الوسائط المستخدم في البرنامج لعرض معلومات تصحيح الأخطاء
2005/02
****************************************************** ******* ********************************************* *****
وحدة DLGDEBUG_U ؛
يستخدم النوافذ والرسائل والأشكال والمتغيرات والفئات والرسومات أو عناصر التحكم أو النماذج
مربعات الحوار ، stdctrls ، comctrls ؛
الإجراء Deb (themsg: string) ؛
الإجراء Deb (themsg: عدد صحيح) ؛ الحمل الزائد ؛
الإجراء DEB (const thestr: args ؛ const args: مجموعة من const) ؛
يكتب
tdlgdebug = فئة (tform)
رد: Trichedit ؛
الإجراء MMKEYUP (المرسل: TOBJECT ؛ VAR KEY: WORD ؛ Shift: TSHIFTSTATE) ؛
Formcreate الإجراء (المرسل: TOBJECT) ؛
خاص
{إعلانات خاصة}
عام
{الإعلانات العامة}
المسافة البادئة: بايت ؛
selcolor: tcolor ؛
الجدول الزمني الإجراء ؛
نهاية؛
var dlgdebug: tdlgdebug ؛
DBG: منطقية ؛
تطبيق
{$ r *.dfm}
الإجراء tdlgdebug.mmkeyup (المرسل: TOBJECT ؛ VAR مفتاح: Word ؛ Shift: TshiftState) ؛
يبدأ
إذا كان المفتاح = vk_space ثم ابدأ
re.tag: = integer (وليس منطقي (re.tag)) ؛
//mm.tag: = integer (وليس منطقية (mm.tag)) ؛
// إذا كانت منطقية (mm.tag) ثم red.suspend
// else red.resume ؛
نهاية؛
نهاية؛
الإجراء Deb (Themsg: String) ؛
إذا لم يكن DBG ثم الخروج ؛
مع DLGDEBUG تبدأ // معلومات التصحيح
الجدول الزمني
re.selattributes.color: = selcolor ؛
re.paragraph.firstIndent: = المسافة البادئة ؛
re.lines.add (themsg) ؛
//mm.lines.add(themsg) ؛
نهاية؛
نهاية؛
الإجراء deb (themsg: integer) ؛
يبدأ
إذا لم يكن DBG ثم الخروج ؛
مع DLGDEBUG تبدأ // معلومات التصحيح
الجدول الزمني
re.selattributes.color: = selcolor ؛
re.paragraph.firstIndent: = المسافة البادئة ؛
re.lines.add (inttoStr (themsg)) ؛
//mm.lines.add(inttostr(themsg)) ؛
نهاية؛
نهاية؛
الإجراء DEB (const thestr: args ؛ const args: مجموعة من const) ؛
يبدأ
إذا لم يكن DBG ثم الخروج ؛
مع DLGDEBUG تبدأ // معلومات التصحيح
الجدول الزمني
re.selattributes.color: = selcolor ؛
re.paragraph.firstIndent: = المسافة البادئة ؛
re.lines.add (تنسيق (thestr ، args)) ؛
//mm.lines.add(format(thestr ، args)) ؛
نهاية؛
نهاية؛
الإجراء tdlgdebug.timeline ؛
ابدأ مع البدء
Paragraph.FirstIndent: = 0 ؛
selattributes.color: = clred ؛
Lines.Add (FormatDateTime (longtimtformat ، الآن)) ؛
نهاية
الإجراء tdlgdebug.formcreate (المرسل: tobject) ؛
يبدأ
المسافة البادئة: = 10 ؛
selcolor: = clyellow ؛
نهاية؛
نهاية.
// ▓▓▓▓▓▓▓▓▓▓▓▓ hookprj.dpr
مكتبة hookprj ؛
يستخدم
sysutils ،
فصول ،
hook_u في 'hook_u.pas' ؛
صادرات
enableheelhook ،
DisableWheleHook
يبدأ
نهاية.
// ▓▓▓▓▓▓▓▓▓ hook_u.pas
وحدة هوك_
يستخدم Windows ، الرسائل ، sysutils ، مربعات الحوار ؛
var hk: Hhook ؛ // Hook Handle Value
hfocus: hwnd ؛
buf: Array [0..1024] of Char ؛
stitle: سلسلة.
IC: بايت ؛
Zdelta: قصير ؛
وظيفة WheelHookProc (رمز: عدد صحيح ؛ wparam: longint ؛ msg: longint): lresult ؛
وظيفة Enablehook: Boolean ؛
وظيفة Disableheelhook: Boolean ؛
تطبيق
// █████████████████████████████████████████�
وظيفة WheelHookProc (رمز: عدد صحيح ؛ wparam: longint ؛ msg: longint): lresult ؛
يبدأ
Zdelta: = Short (HiWord (pmsg (msg)^. wparam)) ؛
if (code = hc_action) و (pmsg (msg)^. message = wm_mousewheel) و (abs (zdelta)> 200) ثم ابدأ
hfocus: = getForeGroundWindow ؛
getWindowtext (hfocus ، buf ، 1024) ؛
stitle: = سلسلة (buf) ؛
if (pos ('mplayerc' ، stitle)> 0) أو (pos ('Media Player Classic' ، stitle)> 0) ثم ابدأ
INC (IC) ؛
// اضغط على مفتاح الجانب الأزرق مرة واحدة لإنشاء رسالتين.
// إذا تمت معالجتها ، فهذا يعادل إعادة توجيه سريع مرتين ، أي 10 ثوانٍ
// if (IC mod 2) = 0 ثم ابدأ
keybd_event (vk_control ، mapVirtualKey (vk_control ، 0) ، 0 ، 0) ؛
إذا Zdelta> 200 ثم ابدأ
keybd_event (vk_right ، mapvirtualkey (vk_right ، 0) ، 0 ، 0) ؛
keybd_event (vk_right ، mapvirtualkey (vk_right ، 0) ، keyeventf_keyup ، 0) ؛ // right up
نهاية أخرى تبدأ
keybd_event (vk_left ، mapvirtualkey (vk_left ، 0) ، 0 ، 0) ؛
keybd_event (vk_left ، mapvirtualkey (vk_left ، 0) ، keyeventf_keyup ، 0) ؛ // Left Up
نهاية؛
keybd_event (vk_control ، mapVirtualKey (vk_control ، 0) ، keyeventf_keyup ، 0) ؛ // ctrl up
//نهاية؛
PMSG (msg)^. الرسالة: = 0 ؛ // لأن رسالة المفتاح الجانبي قد تمت معالجتها محليًا ، فلا يجب تسليمها إلى مؤشرات ترابط أخرى للمعالجة
نهاية Else النتيجة: = callnexthookex (HK ، Code ، Wparam ، Longint (@MSG)) ؛
END ELSE النتيجة: = callnexthookex (HK ، CODE ، WPARAM ، Longint (@MSG)) ؛
نهاية؛
وظيفة Enablehook: Boolean ؛
يبدأ
إذا هونج كونغ = 0 ثم ابدأ
HK: = SetWindowShookex (wh_getMessage ، wheelhookproc ، hinstance ، 0) ؛
النتيجة: = صحيح ؛
نهاية أخرى النتيجة: = خطأ ؛
نهاية؛
وظيفة DisableHeelhook: Boolean ؛
يبدأ
إذا كان HK <> 0 ثم ابدأ
unikwindowshookex (HK) ؛
هونج كونج: = 0 ؛
النتيجة: = صحيح ؛
نهاية أخرى النتيجة: = خطأ ؛
نهاية؛
نهاية.
QQ: 7995.7944 (شينسي رود)
البريد الإلكتروني: [email protected]