लघु संस्करण: मुझे लगता है कि मुझे बॉलून टूलटिप आइकन से छुटकारा पाने के लिए Windows संदेश के परिणामस्वरूप बुलाए जाने वाले PowerShell में ईवेंट का उपयोग करके ठीक से मदद करने की ज़रूरत है। मुझे लगता है कि मुझे एक शक्तिशाली बॉलून टूलटिप प्रदर्शित करना है।PowerShell
लांग संस्करण:
मैं एक लंबे समय से चल PowerShell आदेश (निर्माण) है कि मैं चाहते हैं सूचना भेजता है जब यह सिस्टम ट्रे/सूचना क्षेत्र में एक गुब्बारा टूलटिप के माध्यम से पूरा करता है।
मैं एक लिखित-बुलूनटिप स्क्रिप्ट (नीचे) बनाने में सक्षम था जो लगभग वही करता है जो मैं चाहता हूं। एकमात्र समस्या यह है कि, as sometimes happens with tray icons, ट्रे आइकन तब तक गायब नहीं होता जब तक कि मैं उस पर माउस नहीं डालता। NotifyIcon का प्रतिनिधित्व करने के लिए एक ही वैश्विक चर का पुनः उपयोग करके, मैं इस स्क्रिप्ट का पुन: उपयोग करने में सक्षम हूं और इसे रखता हूं ताकि केवल एक सिस्टम ट्रे आइकन बना रहता है (जब तक कि मैं उस पर माउस न हो)। यह अभी भी एक हैक की तरह लगता है। मैंने एक ईवेंट हैंडलर जोड़ने की कोशिश की ताकि इसे BalloonTipClosed ईवेंट पर अधिसूचित किया जा सके और फिर वहां इसका निपटान किया जा सके। इवेंट हैंडलर में, मैंने उन सभी तीन तकनीकों को आजमाया जो मैंने देखा है, जो कि लिंगरिंग आइकन से छुटकारा पाने के लिए सुझाए गए हैं।
कष्टप्रद हिस्सा यह है कि एक साधारण .Dispose
स्क्रिप्ट के बाद की कॉल पर काम करता प्रतीत होता है, जिससे मुझे लगता है कि ईवेंट स्क्रिप्ट ब्लॉक बिल्कुल नहीं कहा जा रहा है।
मैंने सत्यापित किया है कि टिप के बाद बुलून टिपक्लोज्ड को अलग-अलग WinForms ऐप में फेंकने के बाद बुलाया जाता है।
क्या मुझे कुछ बुनियादी याद आ रही है? किसी भी प्रकार की मदद की बेहद सराहना की जाती है। धन्यवाद!
param
(
$text,
$title = "",
$icon = "Info",
$timeout=15000
)
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | out-null
[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") | out-null
if ($global:writeBalloonTipIcon)
{
# This gets rid of the previous one
$global:writeBalloonTipIcon.Dispose()
}
$global:writeBalloonTipIcon = new-object System.Windows.Forms.NotifyIcon
$global:writeBalloonTipIcon.Icon = [System.Drawing.SystemIcons]::Information
# FIXME: This *should* cleanup the icon after it's done, but it doesn't seem to work
$global:writeBalloonTipIcon.add_BalloonTipClosed(
{
# this *should* work, but it's not. What am I missing?
$global:writeBalloonTipIcon.Icon = $null;
$global:writeBalloonTipIcon.Visible = $false;
$global:writeBalloonTipIcon.Dispose();
});
$global:writeBalloonTipIcon.Visible = $true;
$global:writeBalloonTipIcon.ShowBalloonTip($timeout, $title, $text, $icon);
शायद थोड़ा सा ऑफटॉपिक, लेकिन मुझे विंडोज के लिए बहुत उपयोगी ग्रोल मिला। जयकुल ने एक पुस्तकालय लिखा जो कार्यक्षमता को लपेटता है। एक प्लगइन भी है जो आपको सूचित करता है जब आपका निर्माण/पुनर्निर्माण खत्म हो जाता है। आप इसे यहां पा सकते हैं: http://huddledmasses.org/more-growl-for-windows-from-powershell/ (मुझे नहीं पता कि यह नवीनतम संस्करण है) – stej
क्या आपने इसे हल किया है? – stej
वास्तव में, कोई त्वरित समाधान नहीं था, इसलिए हम केवल एक वैश्विक आइकन रीसाइक्लिंग करते रहते हैं। यह एक उचित कामकाज है जब तक हम एसटीए मुद्दे को संभालने से वास्तव में इसे ठीक करने के लिए प्रेरित नहीं हो जाते। –