C++ WinApi Symbol aus der Tastkleiste ausblenden funktioniert nicht.



  • Hallo Leute.

    Ich möchte ein kleines Programm schreiben, welches bei bestimmten Tastendrücker bestimmte Funktionen ausführt. (soetwas wie Makros).

    z.B. wenn ich strg,umschalt und E drücker, soll der InternetExplorer gestartet werden.

    Das ganze mach ich nur so zum spaß^^.

    Ich möchte nun, dass das Programm komplett unsichtbar agiert.
    Dazu habe ich ein Win32 Projekt erstellt und erstelle mir ein Fenster.

    Mit Hilfe von DirectInput8 frage ich die Tasten ab.
    Mein Fenster erstelle ich mit der folgenden Funktion:

    HWND CreateMainWindow(HINSTANCE hInst)
    {
    	HWND hWnd;
    	WNDCLASSEX windowclass;
    
    	const char szClassName[] = "Window";
    
    	windowclass.cbSize = sizeof (WNDCLASSEX);
    	windowclass.style = CS_HREDRAW | CS_VREDRAW;
    	windowclass.lpfnWndProc = WindowProc;
    	windowclass.cbClsExtra = 0;
    	windowclass.cbWndExtra = 0;
    	windowclass.hInstance = hInst;
    	windowclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    	windowclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    	windowclass.hCursor = LoadCursor (NULL, IDC_ARROW);
    	windowclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND+1;
    
    	windowclass.lpszMenuName = NULL;
    	windowclass.lpszClassName = szClassName;
    	if(!RegisterClassEx (&windowclass))
    		return (NULL);
    
    	hWnd = CreateWindowEx (NULL, szClassName, "Window", WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT, CW_USEDEFAULT, 300, 135, NULL, NULL, hInst, NULL);
    
    	return (hWnd);
    }
    

    Nun habe ich schon sehr viel gesucht, und bin auch auf die sache mit dem WS_EX_TOOLWINDOW gekommen.

    Folgenden Code habe ich dann in der oben genannten Funktion eingebaut, bevor return (hWnd); aufgerufen wird.

    SetWindowLongPtr(hWnd, GWL_EXSTYLE, GetWindowLongPtr(hWnd, GWL_EXSTYLE) | WS_EX_TOOLWINDOW );
    

    Das aussehen von Fenster verändert sich, doch ich habe immer noch ein Symbol in der Tastkleiste.

    Ich habe mir das so gedacht, dass ich erst das Symbol aus der Taskleiste entferne und dann das Fenster mit Hilfe von ShowWindow(WS_HIDE); ausblenden.

    Weiß jemand, wie ich das hinbekomme?
    Oder muss ich das anders lösen als so, wie ich mir das bis jetzt gedacht habe?

    Mit freundlichem Gruß
    xXSlayerXx



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) 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.



  • Einfach

    xXSlayerXx schrieb:

    ShowWindow(SW_HIDE);

    😕



  • wenn das mal so einfach wäre.

    mit ShowWindow(SW_HIDE); lasse ich bloß das fenster vom desktop verschwinden.
    Jedoch soll es auch nicht in der Taskleiste angezeigt werden.



  • ShowWindow(hWnd, SW_HIDE);
    SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_TOOLWINDOW);
    ShowWindow(hWnd, SW_SHOW);
    

  • Mod

    Und warum gibst Du den Stil in CreateWindowEx nicht einfach gleich an?



  • xXSlayerXx schrieb:

    z.B. wenn ich strg,umschalt und E drücker, soll der InternetExplorer gestartet werden.

    Als Tip:
    Verknüpfung erstellen (oder bestehenden aus Startmenu oder quicklaunch rauskramen)
    Rechtsklick -> Eigenschaften

    Unter Tastenkombination kann man eine solche eingeben, mit der die Verknüfung gestartet werden kann.


Log in to reply