Laden...

Tab Control / NotifyIcon

Erstellt von stift vor 19 Jahren Letzter Beitrag vor 16 Jahren 9.039 Views
S
stift Themenstarter:in
201 Beiträge seit 2005
vor 19 Jahren
Tab Control / NotifyIcon

Hallo Leute,

ich habe zwei Probleme mit einen C#-Programm von mir.

  1. Ich moechte nicht, dass kein Eintrag bzw. Icon des Programms in der Tab Control (Alt + Tab) erscheint.

  2. Im Context Menu habe ich Links ins Internet eingebaut, wenn ich auf die Links aufrufe und dann das Programm durch Zone Alarm geblockt wird, stuertzt es ab. Kann mann das verhindern?
    Der Source Code fuer die Links lautet :


System.Diagnostics.Process.Start("http://www.test.de");

Oder gibt es noch eine andere Methode Links aufzurufen?

Servus

_
416 Beiträge seit 2005
vor 19 Jahren

@1. Imho erscheint jedes Fenster aus der Taskleiste auch in diesem Tab-Control. Also einfach Form.SchowInTaskbar = false;

@2. Scheint ein ZoneAlarm spezifisches Problem zu sein. Mein Norton Internet Security hat da nichts degegen. Mit einem try { ... } catch{} solltest du aber auch diese eventualität abfangen können. Wie du dann aber den Link aufruft weiß ich auch nicht. Wenn du rausbekommen würdest, welches Programm der Standardbrowser des Nutzers ist, könntest du es direkt aufrufen: z.b: "iexplore.exe www.test.de". Da sollte keine Firewall mehr dahinter steigen können.

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 19 Jahren

this.ShowInTaskbar = false;

steht bereits im Code bzw. bringt nicht das gewuenschte Ergebnis.

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo tb,

Wenn du rausbekommen würdest, welches Programm der Standardbrowser des Nutzers ist, könntest du es direkt aufrufen: z.b: "iexplore.exe
>
". Da sollte keine Firewall mehr dahinter steigen können.

Kerio Firewall erkennt, wenn eine Anwendung einen andere startet und erlaubt auch das zu unterbinden.

herbivore

_
416 Beiträge seit 2005
vor 19 Jahren

ok hab 1. jetzt mal selbst ausprobiert und die einzige Möglichkeit die funktioniert hat, war die BorderStyle auf Fixed- bzw SizeableToolWindow zu stellen.
Hat den Nachteil dass:

  1. der Titel kleiner ist als bei normalen Programmen
  2. es kein Minimize oder Maximize-Knopf gibt
49.485 Beiträge seit 2005
vor 19 Jahren

Hallo stift,

wie tb schon schrieb, tut der FormBorderStyle was du willst, allerdings mit Nebenwirkungen. Ich habe deshalb mal versucht die Sache zu verfolgen und die Stelle zu finden, wo das Nützliche vom Unerwünschten getrennt wird. Leider scheint das erst auf der Win32-API-Ebene zu passieren, zumindest gibt es das ToolWindow direkt als extended windows style WS_EX_TOOLWINDOW. Da ist wohl wirklich nichts zu machen.

Was Form.ShowInTaskbar = false angeht, so hat das durchaus eine Wirkung auf das Alt-Tab-Fenster, denn dann wird statt der einzelnen Fenster der Anwendung nur die Anwendnung selbst eingetragen. Es wird auch nicht mehr das Icon des jeweiligen Fensters angezeigt, sondern ein "fliegendes Windows"-Logo. Ein Ansatz könnte also sein, Form.ShowInTaskbar = false zu setzen und dann auf Applikationsebene (statt auf Fensterebene) zu suchen, wie man den Applikationseintrag des Alt-Tab-Fensters loswird. Ich habe allerdings noch nichts gefunden.

Deshalb stelle ich mal eine Gegenfrage an alle: Wie kann man beeinflussen, ob eine Anwendung auf dem 'Anwendungen'-Reiter des Task-Managers auftaucht?

Vielleicht ergibt sich ja darüber ein Zugang zu dem Gewünschten.

HTH

herbivore

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 19 Jahren

Danke.

BorderStyle auf Fixed- bzw SizeableToolWindow hat geholfen, aber jetzt ist die Titelleiste da, dass sollte nicht sein.

Vielleicht sollte ich mehr ueber das Programm schreiben, ich moechte eigentlich nur NotifyIcon, dass ein contextMenu hat, mit denn ich verschiedene Link bzw. Programme aurufen kann.

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo stift,

das kommt oft gut, wenn man schreibt, was man eigentlich möchte 🙂

Wenn Du nur ein NotifyIcon willst, dann erstelle dieses direkt im Main und erzeuge kein Form. Das Ergebnis, tata: Es gibt keinen Eintrag im Alt-Tab-Fenster.

Wenn du später (z.B. als Reaktion auf ein MenuItem.Click) ein Form erzeugt, erscheint dies im Alt-Tab-Fenster, aber der Eintrag verschwindet auch wieder, wenn man das Fenster schließt.

HTH

herbivore

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 19 Jahren

Wie muss ich das erzeugen? Main?

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo stift,

deine Verwunderung überrascht mich etwas, anyway, hier kommt etwas minimalistischer Code:


using System;
using System.Windows.Forms;
using System.Drawing;

//*****************************************************************************
abstract class NotIco
{
   private static NotifyIcon  notico;

   //==========================================================================
   public static void Main (string [] astrArg)
   {
      ContextMenu cm;
      MenuItem    miCurr;

      cm = new ContextMenu ();

      miCurr = new MenuItem ();
      miCurr.Index = 0;
      miCurr.Text = "&New";
      miCurr.Click += new System.EventHandler (NewClick);
      cm.MenuItems.Add (miCurr);

      miCurr = new MenuItem ();
      miCurr.Index = 1;
      miCurr.Text = "E&xit";
      miCurr.Click += new System.EventHandler (ExitClick);
      cm.MenuItems.Add (miCurr);

      notico = new NotifyIcon ();
      notico.Icon = new Icon("smile.ico");
      notico.Text = "Doppelclick mich!";
      notico.Visible = true;
      notico.ContextMenu = cm;
      notico.DoubleClick += new EventHandler (NotifyIconDoubleClick);

      Application.Run ();
   }

   //==========================================================================
   protected static void ExitClick (Object sender, EventArgs e)
   {
      notico.Dispose ();
      Application.Exit ();
   }

   //==========================================================================
   protected static void NewClick (Object sender, EventArgs e)
   {
      // nur als Beispiel:
      // new MyForm ().Show ();
   }

   //==========================================================================
   protected static void NotifyIconDoubleClick (Object sender, EventArgs e)
   {
      // Was immer du willst
   }

}

HTH

herbivore

PS: Das Snippet gibt es jetzt auch - mit etwas mehr beschreibenden Text - in [Snippet] Vorlage für Tray-/NotifyIcon-Anwendung.

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 19 Jahren

Ich habe als Compilier Visual Studio .net 2003.

Funktioniert da auch der Code?

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo stift,

hast du es denn schon probiert? Ich wüsste nicht, warum es nicht gehen sollte. Allerdings halte ich nicht viel von diesen visuellen Entwicklungsumgebungen und kenne mich entsprechend wenig damit aus.

herbivore

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 19 Jahren

Ja.

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 19 Jahren

Koenntest du die erfoderlichen Files pasten.

Und eine kleine Step by Step anleitung schreiben.

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo Community,

mir fehlen hier etwas die Worte. Kann bitte mal einer der Visual-Studio-Gurus hinzugesprungen kommen. Vielen Dank!

herbivore

B
44 Beiträge seit 2004
vor 19 Jahren

Also ich habe da einen ganz anderen Ansatz:

Probier mal etwas mit dem FormWindowStatus und dem Form.OnResize Event.

Mein Rezept um das "Programm" aus dem "Alt+Tab" Dialog heraus zu bekommen ist -> Form.Hide();

Also, als Beispiel:

Form1
-> OnResize()
-> Prüfen auf FormWindowState
-> Wenn minimiert, NotifyIcon einblenden und Form1.Hide();
-> Wenn ! minimiert, NotifyIcon ausblenden und Form1.Show();

Klappt eigentlich immer prima.

_
416 Beiträge seit 2005
vor 19 Jahren

@stift:
ich versteh dein prob auch grad nicht.

  1. neues Projekt anlegen (Windows-Anwendung)
  2. in der einzigen *.cs Datei des Projektes sämtlichen Code löschen und herbivores code reinkopieren
  3. Eigenschaften vom Projekt aufrufen und NotIco als StartObjekt eintragen
  4. F5 drücken und freuen

Bei mir funktionierts prima! 🙂

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 19 Jahren

in die Form1.cs , oder?

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo stift,

bei allem Verständnis für Anfänger: Wenn es dir schon alles so vorgekaut wird: Irgendwann musst du mindestens mal selbst runterschlucken, um statt zu werden.

herbivore

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 19 Jahren

Jetzt funktioniert es Danke.

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 19 Jahren
Ein weiteres Problem

Wenn ich das Programm ueber die Registry automatisch starten will, kommt eine Fehlermeldung, dass das Programm ein Bug hat und dann Programm startet nicht.
An was liegt dies?

V
28 Beiträge seit 2005
vor 18 Jahren

🙂 Lustig.

Copy -> Paste = Have fun 🙂

Baue nicht auf Ratschäge dummer Menschen. Du erkennst sie daran, dass sie in mehr als der Hälfte bei ihren Ratschlägen in der Vergangenheit unrecht hatten. Dr. Otto Buchegger

Was ich nicht leiden kann: "Ach, das ist ja einfach" ...alles ist einfach, wenn man weiß wie es geht! Ahhhh!!!

E
10 Beiträge seit 2005
vor 18 Jahren

Original von stift

  1. Ich moechte nicht, dass kein Eintrag bzw. Icon des Programms in der Tab Control (Alt + Tab) erscheint.

Wenn Du nicht möchtest, das kein Eintrag erscheint, musst Du Dir doch gar keine Gedanken machen. Dein Programm wird erscheinen, wenn Du keine besonderen Massnahmen ergreifst.

Ich hbe so den Verdacht, diemeisten Antworten hier gehen an Deiner Frage vorbei 😉

T
125 Beiträge seit 2005
vor 16 Jahren

Ich glaube das es so nicht ohne Sinnlosen mehraufwand nicht geht. Da kann man auch gleich NotifyIcon neu schreiben!!! Schaut euch im Reflector die Klasse an darin ist ein NativeWindow. Nur kommt man irgendwie net an die Handle davon ran. Vielleicht gibt es noch tricki Win32 APIs die ich net kenne. Hab selbst schon mit einem externen NativeWindow versucht, jedoch scheitert es wahrscheinlich daran das ich kein Message Object habe worin lparam und wparam drin ist. Wenn ihr wist woher ich das bekommen könnte?