كيف يمكنني التعامل برمجياً مع مواقع أيقونات سطح مكتب Windows؟

StackOverflow https://stackoverflow.com/questions/131690

سؤال

منذ عدة سنوات مضت، حاولت ببراءة أن أكتب تطبيقًا صغيرًا لحفظ أيقونات سطح المكتب التي تم وضعها بشكل تكتيكي لأنني سئمت من سحبها مرة أخرى إلى مواقعها عندما يقوم أحد الأحداث بإعادة ضبطها.لقد استسلمت بعد قضاء الكثير من الوقت بعد أن فشلت في العثور على طريقة للاستعلام عن موضع أيقوناتي على سطح المكتب، ناهيك عن حفظها وإعادة ضبطها.

هل يعرف أحد أين يحتفظ Windows بهذه المعلومات وما إذا كانت هناك واجهة برمجة تطبيقات لتعيينها؟

شكرا ، ريتشارد

هل كانت مفيدة؟

المحلول

إذا لم أكن مخطئًا، فإن سطح المكتب هو مجرد ListView، وسيتعين عليك إرسال ملف LVM_SETITEMPOSITION رسالة إلى مقبض سطح المكتب.

لقد بحثت في Google قليلاً عن بعض أكواد C# ولم أتمكن من العثور على مثال، لكنني وجدت المقالة التالية. توري:...الحصول على/تعيين مواضع أيقونات سطح المكتب؟.إنه كود دلفي، لكنني أجده سهل القراءة ومع بعض عمليات P/Invoces ستتمكن من ترجمته إلى c#.

نصائح أخرى

سطح المكتب هو مجرد عنصر تحكم ListView ويمكنك الحصول على مقبضه وإرسال رسائل إليه لتحريك الرموز باستخدام LVM_SETITEMPOSITION.

ومع ذلك، يعد الحصول على مواضع الأيقونات باستخدام LVMGETITEMPOS أكثر تعقيدًا بعض الشيء.يجب عليك تمرير مؤشر إلى بنية POINT مثل LPARAM الخاص بك.إذا حاولت القيام بذلك، فمن المحتمل أن تتعطل Explorer.المشكلة هي أنك قمت بتمرير مؤشر في مساحة العنوان الخاصة بك، والذي فسره عنصر التحكم كمؤشر في مساحة عنوان Explorer.أوه!

الحل الذي استخدمته هو إدخال ملف DLL في عملية Explorer وإرسال الرسالة من هناك.ثم عليك فقط أن يكون لديك طريقة لإعادة معلومات المنصب إلى عمليتك.

ما زلت أبحث في هذا وسأنشر النتيجة بمجرد أن أحصل أخيرًا على شيء يعمل.أنا أنشر هذا لأنه، بفضل مشاركة Davy بشكل غير مباشر، وجدت أيضًا تطبيق VB كلاسيكي:

خلط رموز سطح المكتب باستخدام اتصال الذاكرة بين العمليات

ومن المحتمل أن يكون هذا هو الأساس للكود الخاص بي.

ليس لدي أي فكرة عن واجهة برمجة التطبيقات (API)، لكني أعرف Ultramon (http://www.realtimesoft.com/ultramon/) يحتوي على ميزة مضمنة للحفاظ على موضع الرمز (على الرغم من أنني لم أستخدمها مطلقًا للحفاظ على موقع الرمز، إلا أنه لا غنى عنه لاستخدام الشاشات المتعددة).يعمل الإصدار التجريبي الأخير بشكل لا تشوبه شائبة مع نظام التشغيل Vista (باستثناء وجود خلل بسيط أو اثنين في بعض الأحيان عند تسجيل الدخول إلى جهازي عبر RDP)، وبالطبع، لم أواجه أية مشكلات مع XP.لقد استخدمته لأكثر من أربع سنوات حتى الآن.

وهل ذكرت أنها أفضل أداة لاستخدام الشاشات المتعددة؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top