Schrift
[thread]4914[/thread]

Win32::Daemon & Win32::GUI::AddNotifyIcon: funktioniert das zusammen?

Leser: 3


<< >> 9 Einträge, 1 Seite
zipster
 2005-04-05 15:00
#43316 #43316
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
Hoi,

ich habe den Beitrag von Froschpopo mit dem Trayicon entdeckt.
Da ich es sehr interessant fand dachte ich mir teste doch mal was so damit funktioniert.
Nun hatte ich vor ein kleines Tool zu schreiben das bei Systemstart automatisch per Dienst gestartet wird und als Trayicon unten erscheint.

Sinn daran ist zu sehen ob das Tool läuft und um den Dienst per Rechtsklick zu starten zu stopen und so weiter...

Aber irgendwie schaffe ich dies nicht so ganz.
Wenn ich es per Hand ausführe sieht man das Trayicon, aber wenn es per Dienst gestartet sieht man es nicht.

Könnt ihr mir weiterhelfen?

Hier mein "TEST" Code:
Code: (dl )
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!perl

use Win32::Daemon;
use Win32::GUI;

my $id = "1";
$main = Win32::GUI::Window->new(-title => 'Backupi',

-left => 100,

-top => 100,

-width => 150,

-height => 100,

-name => 'Main',

-visible => 0

);

$icon = new Win32::GUI::Icon('server.ICO');
$ni = $main->AddNotifyIcon(-name => "systray",
-id => $id,
-icon => $icon,
-tip => "Backupi");
Win32::Daemon::StartService();

while (SERVICE_START_PENDING != Win32::Daemon::State())
{
sleep(1);
}

Win32::Daemon::State(SERVICE_RUNNING);



while (1)
{
open FOUT, ">>c:\\win32testserv.log";
print FOUT localtime() . "\n";
close FOUT;
sleep 3;
if (Win32::Daemon::State() == SERVICE_STOP_PENDING)
{
open FOUT, ">>c:\\win32testserv.log";
print FOUT "Jetzt ist aber Schluss\n";
close FOUT;
exit 0;
}

}


Win32::Daemon::StopService();
Win32::Daemon::State(SERVICE_STOPPED);
sub systray_RightClick
{
$systray_menu = new Win32::GUI::Menu( "SystrayMenu Functions" => "SystrayMenu",
"> Starte den Dienst" => "AmphetaDesk::OS::Windows::_OpenBrowser",
"> Stope den Dienst" => "AmphetaDesk::OS::Windows::_RefreshChannels",
"> Exit" => "SystrayExit"
);
my($x, $y) = Win32::GUI::GetCursorPos();
$main->TrackPopupMenu($systray_menu->{SystrayMenu}, $x, $y-50);
}
sub Main_Terminate { &exit_program; }
sub SystrayExit_Click { &exit_program; }

sub exit_program
{
Win32::GUI::NotifyIcon::Delete( $ni, -id => $id );
exit;
}
\n\n

<!--EDIT|zipster|1112700136-->
Crian
 2005-04-05 18:38
#43317 #43317
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
scnr: perldoc perlstyle
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
zipster
 2005-04-05 19:02
#43318 #43318
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
Genau deswegen habe ich folgendes geschrieben:
Quote
Hier mein "TEST" Code:


Den durch das kopieren hat sich irgendwie komplett verrückt.
Ich habe aber auch schon schlimmeren Code gesehen und auch selbst geschrieben.:blush:

Für Tips zur Lösung meines Problems wäre ich sehr Dankbar.:laugh:
zipster
 2005-04-07 11:13
#43319 #43319
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
*Nach Oben schieb*

Hat keiner ne Idee?
Ich will ja nicht nerven aber ich könnte das echt gut gebrauchen.
pKai
 2005-04-07 12:24
#43320 #43320
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Man könnte das "Bedienteil" im Systray als separates Programm realisieren, das - im Userkontext gestartet - den Dienst steuert.
So macht das auch die Virenscanner-Software, die bei mir hier läuft.
I sense a soul in search of answers.
zipster
 2005-04-07 12:44
#43321 #43321
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
Cool erstmal vielen Dank für deine Antwort pKai. :D

Könntest du vieleicht mal näher beschreiben? Ich verstehe nämlich noch nicht so ganz wie du das meinst... *schäme*
pKai
 2005-04-07 15:08
#43322 #43322
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Also bei besagtem Virenscanner ist es folgendermaßen:
Es gibt den Dienst der ab Boot läuft und vor sich hinwerkelt und es gibt ein GUI (mit Systray-Eintrag). Letzteres wird beim Anmelden des Anwenders gestartet. Das GUI-Teil hat ein entsprechendes Menü, um dem Dienst Anweisungen zu erteilen (z. B.: "Mach mal jetzt ein Update").
I sense a soul in search of answers.
zipster
 2005-04-07 15:47
#43323 #43323
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
Und wie mache ich das es beim Anmelden gestartet wird?

Das Menü zumachen ist ja kein Problem.
pKai
 2005-04-07 16:14
#43324 #43324
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Windows kennt
  • maschinenspezifische
  • User-spezifische
  • Domänen-spezifische
  • AD-spezifische
Startrampen für Programme beim Logon.
Kommt auf dein Umfeld an, was am besten ist.
I sense a soul in search of answers.
<< >> 9 Einträge, 1 Seite



View all threads created 2005-04-05 15:00.