Dienst-Programmierung mit ner MessageBox?
-
das problem ist vermutlich, dass der service unter dem systembenutzer ausgeführt wird. dieser verfügt aber über keinen desktop auf dem die messagebox angezeigt werden könnte...
services sind nicht dazu gedacht direkt mit dem benutzer zu interagieren. bedenke, dass ein service auch laufen kann, wenn niemand eingeloggt ist...
-
Dem ist so, also dass es ein Systembenutzer ist.
Wie soll man es denn ausführen können?
Also welcher benutzer muss denn den sein?
Ich habe jetzt "Komunikation zwischen Dienst und Desktop zulassen" aktiviert.
Nun bekomme ich eine Nachricht dass ein Dienst ein Fenster für mich hat.
Wenn ich auf "Fenster annehmen" klicke, wechselt mein Computer auf einen Leeren Desktop, wo alles im 2k Look ist, und zeigt mir das Fenster an.Wieso ist dass so? Kann man dass ändern?
Danke für die Antworten.
-
Dieser Thread wurde von Moderator/in Tim aus dem Forum ANSI C in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
probiers damit: http://msdn2.microsoft.com/en-us/library/aa383842.aspx

------------------------------------------
------------------------------------------
------------------------------------------
------------------------------------------
------------------------------------------
------------------------------------------
------------------------------------------
------------------------------------------
------------------------------------------
------------------------------------------
------------------------------------------
------------------------------------------
------------------------------------------
------------------------------------------
-
Das ist ja alles schmutzig.. Warum lasst ihr das Programm nicht einfach im Hintergrund laufen, warum muss es ein Dienst sein?
-
Im endeffeckt habe ich es umgeschrieben, es läuft nun im Hintergrund.
Nur was halt schlecht ist: Zum Beenden muss man im TaskManager rumpfuschen, und da manche Leute 2 linke Hände haben...Naja als Dienst müsste man ja auch Adminrechte haben um ihn zu Terminieren.
Danke eurer Hilfe.
-
Wie man muss den Taskmanager bemühen um dein Programm zu beenden?
Das ist nicht gerade die feine englische Art den User darum zu bitten das Programm abzuschiessen wenn er es beenden will.
-
Tja, was währe denn ein anderer Weg, dass Programm (wen es hidden ist) zu beenden? Ohne Dienst geht dass ja nicht.
Naja schon mit Tastenkürzeln, aber wenn ich anfange Systemweit die Tastatur abzuhören werde ich als Trojaner/Virus 'entlarvt' oder 'beschimpft' und gelöscht.
-
Du könntest ein kleines Icon neben der Systemuhr platzieren, bei einem Doppelklick beendet es sich; alternativ sogar ein Menü einbauen

-
Ja. Jetzt kommt die weltbewegende Frage: "Wie mache ich dass?".
Ich meine den Icon erstellen, OK.
Nur ihn dann wieder zu Killn!? Er ist immer noch da, dass programm schon aus.Ausserdem, er bringt nicht viel oder?
Er ist da, und wenn man draufklickt... nichts.
Wie bekomme ich OnClick Evenets hin?
-
lippoliv schrieb:
Ja. Jetzt kommt die weltbewegende Frage: "Wie mache ich dass?".
Ich meine den Icon erstellen, OK.
Nur ihn dann wieder zu Killn!? Er ist immer noch da, dass programm schon aus.Ausserdem, er bringt nicht viel oder?
Er ist da, und wenn man draufklickt... nichts.
Wie bekomme ich OnClick Evenets hin?Sag mal seit wann programmierst du und was willst du eigentlich?
Kennst du dich überhaupt schon ein wenig mit der WinApi aus oder machst du das jetzt weil du hierhin verschoben wurdest? Falls du dich noch garnicht auskennst (so wie es scheint!) dann würde ich erstmal versuchen ein normales fenster mit ein paar buttons usw. zu erstellen.
Ansonsten brauchst du z.B. Shell_NotifyIcon und dazu steht alles in der MSDN drin.schirrmie
-
Ich Programmiere C seit 3 Monaten. Ich habe noch nie was mit der API gemacht.
Ich hatte gestern irgendwie nicht viel zu dieser Funktion "Shell_NotifyIcon" gefunden. Werd aber nochmal schauen.Danke für die Hilfe.
Will mir wer sagen wo ich bei msdn einstellen kann, dass ich C programmiere und nicht C#, C++, Java, Basic oder sonstige andere Sprachen?
Ich finde da viel für Visual Basic, aber für C find ich da wenig...[edit] MSDN hat irgendwie keine Funktino zum intern suchen oder? Habe gerade über 3 Umwege, angefangen bei einer Googlesuche -> MSDN: The Taskbar -> MSDN: Shell_NotifyIcon.
Komisch.. Naja jetzt kann ich ersmtal lesen.
-
Es tut mir jetzt leid, aber eine sache (will) ich einwach nicht verstehen:
bool SysTray_IconOpts( HWND hWnd, bool add ) { int ret; ret = 0; if( 1 == add ) { /*Nötigkeitsdaten für die Tray Option. */ NOTIFYICONDATA nid; char *ballonText = "This is NaDiA. Its the 'net send' commando for Vista", *ballonTitle = "NachrichtenDienstApplikation(NaDiA)"; memset(&nid, 0, sizeof(nid)); nid.cbSize = sizeof(nid); /*Das Fenster, zu dem der Tray-Eintrag gehört. */ nid.hWnd = hWnd; /*Die Tray_ID, damit sie später gelöscht werden kann. */ nid.uID = 1; /*Das icon dess Tray-Eintrages. */ nid.hIcon = NULL; nid.uCallbackMessage = MYWM_NOTIFYICON; /*Was alles möglich sein soll, momentan nur der Icon und das Draufklicken. */ nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; ret = Shell_NotifyIcon(NIM_ADD, &nid); } else { /*Nötigkeitsdaten für die Tray Option. */ NOTIFYICONDATA nid; memset(&nid, 0, sizeof(nid)); nid.cbSize = sizeof(nid); /*Das Fenster, zu dem der Tray-Eintrag gehört. */ nid.hWnd = hWnd; /*Die Tray_ID, damit sie später gelöscht werden kann. */ nid.uID = 1; ret = Shell_NotifyIcon(NIM_DELETE, &nid); } return ret; }So habe ich den code aus MSDN kommentiert.
Dass manche Kommentare nicht ganz übereinstimmen, z.B. dassvon uFlags liegt daran, dass ich gerade überlege wo meine Funktionvoid On_MYWM_NOTIFYICON( WPARAM wParam, LPARAM lParam ) { UINT uID; UINT uMouseMsg; /*Die Gesendete Message. */ uID = (UINT) wParam; /*Die gedrückte Maustaste. */ uMouseMsg = (UINT) lParam; if( WM_LBUTTONDOWN == uMouseMsg ) { printf( "hi" ); } else printf( "hi2" ); }Aufgerufen wird.
Die Funktionsnamen stimmen mit MSDN überein, und irgendwie geht dass nicht:nid.uCallbackMessage = WM_NOTIFYICON;Dieser abschnitt (uCallbackMessage) ist wohl sowas wie 'OnClick' wenn ich dass richtig verstanden habe.
Nur erkennt mein Compiler/Linker what ever, das nicht an.server.c: In function `SysTray_IconOpts': server.c:155: error: `MYWM_NOTIFYICON' undeclared (first use in this function) server.c:155: error: (Each undeclared identifier is reported only once server.c:155: error: for each function it appears in.)Verstehe ich ja auch, ich habe ja lediglich ne Funktion 'On_MYWM_NOTIFYICON'.
Kann mir jemand dass erklären?
-
nid.uCallbackMessage erwartet einen Zahlenwert
-
Ja ich hatt schon öfters die Variante
nid.uCallbackMessage = WM_USER;gelesen, dass geht ja auch, aber es passiert nichts.
Er ruft ja die Funktion nicht auf.[edit]
Brauche ich auch diese WndProc function?
-
lippoliv schrieb:
Brauche ich auch diese WndProc function?
Ja, genau darum dreht sich ja auch das "nid.uCallbackMessage". Eben diese Nachricht bekommst du dann bei Events zugeschickt

-
Danke. Werds mal versuchen, wenn ich dann mal wieder Zeit habe.
Spätestens im Januar.
-
Hey nochmal,
ich bleibe beim Dienst,aber wie es aussieht, ist es wohl UNMÖGLICH aus einem Dienst ein Fenster anzuzeigen,
selbst wenn man über CreateProcess einen neuen Prozess erstellt oder wie sehe ich dass?
-
Hättest du dich nur ein wenig mit der Materie beschäftigt, wüsstest du dass es unter Vista keine interaktiven Dienste mehr gibt. MB_SERVICE_NOTIFICATION als Flag für die Messagebox noch funktioniert, musst du mal probieren.
-
Wie oft habe ich diesen Satz schon gehört, verstanden und trotzdem im Hintergedanken gehabt "Es währe schwachsinn wenn es eine 0%ige Chance gäbe"...
Dienste währen dann sowas von wenig wert...
Ja es kann sein wass ich was falsch gemacht habe aber die Zeile:
MessageBoxEx( NULL, buf, titel, MB_SERVICE_NOTIFICATION, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US) );
oder
MessageBox( NULL, buf, titel, MB_SERVICE_NOTIFICATION );
gingen LEIDER beide nciht...
Bitte sag mir einfach ich habe einen Fehler eingebaut...

Ich bin SOOO knapp am verzweifeln...