Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Laufende Programme in Schnellstartleiste scließen mit C++

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
03.09.2009, 00:04 Uhr
mkRE



Hallo leute ich benutze den Borland C++ Builder nter Windows.
Habe ein Problem ich weiß jetz nach langer suche wie man (unter GUI) exe Dateien öffnet und schließt.das schließen funktioniert bei mir nur bei offenen fenstern mit der FindWindows() und der SendMessage() leider habe ich jetzt herausgefunden das Programme die in der Schnellstart leiste laufen nicht gefunden werden habe dazu paar andre Funktionen gefunden

EnumWindows() und EnumWindowsProc() die msdn ist für mich noch momentan neuland ich versuch mich einzufinden aber nicht mit hilfe andrer.

Jetzt habe ich schon mal ein Prog geschrieben was eine Test exe öffnet und danach schließen soll aber mit hilfe der Enum's.Der unten aufgeführte Code geht nicht so kann mir einer oder mehre Schritt für schritt helfen für Anfänger wie ich das richtig mache??

Bitte Bitte

Ich habe schon einige Einträge gefunden in Google und überall aber alles nur zum teil verständlich für mich :-(



C++:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <Psapi.h>
#pragma hdrstop
#include <windows.h>
#include "UEXETest.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
#pragma comment(lib, "User32.lib")

//---------------------------------------------------------------------------
TForm1 *Form1;

HANDLE HWND_VNC_VIEWER;

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShellExecute(NULL,"open","c:\\Programme\\RealVNC\\VNC4\\VNCViewer",NULL,NULL,SW_SHOWNORMAL);
}


//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{

HWND_VNC_VIEWER=FindWindow(NULL,"VNC Viewer");


BOOL CALLBACK EnumWindowsProc(HWND_VNC_VIEWER,NULL);


BOOL EnumWindows(EnumWindowsProc,NULL);


SendMessage(EnumWindows, WM_CLOSE,NULL,NULL);



}


Dieser Post wurde am 03.09.2009 um 11:37 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.09.2009, 11:41 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,

such mal hier im forum nach "enumwindows" da findeste genug beispiele um das zum laufen zu bringen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.09.2009, 13:38 Uhr
mkRE



ich habe mich hier umgescaut und es werden nur fragen zu speziellen angelegenheiten gestellt ich wahr leider nie gut im Puzzeln :-) ich brauche jemanden der mir mit seiner Hilfe einen Denkanstoß gibt wie gesagt ich beginne gerade mit WinAPI und habe erst zwei Funktionen verstanden.Wenn mir jemand weiterhilft schritt für schritt mit dem oben genannten Problem wehr echt schön.
Manchmal braucht man halt länger um etwas zu verstehen.

Bitte helft mir ich versuchs ja parallel selber so ist das nicht.aber meistens weiß ich nicht was ich da tuh.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.09.2009, 15:31 Uhr
~mkRE
Gast



C++:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "UWinAPI.h"
#include <windows.h>
#include <Psapi.h>
#pragma comment(lib, "User32.lib")
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
BOOL CALLBACK ShowAllWindows(HWND hwnd,LPARAM lParam);

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

//---------------------------------------------------------------------------
// Callback-Funktion schreibt Titelleisten-Texte aller gefundenen Non-Child-
// Fenster in die ListBox:
//---------------------------------------------------------------------------
BOOL CALLBACK ShowAllWindows(HWND hwnd,LPARAM lParam)
{
  char pcWinTitle[256]; // Für Fenster-Titel...

  // Falls kein Child-Fenster:
  if(!GetWindow(hwnd, GW_OWNER))
  {
    // Fenster-Title (Caption) auslesen:
    GetWindowText(hwnd, pcWinTitle, 255);

    // Falls Titel vorhanden in die Listbox einfügen:
    if(AnsiString(pcWinTitle).Trim() != EmptyStr)
      Form1 -> ListBox1 -> Items -> Add(pcWinTitle);
  }
  // true zurückgeben, um Aufzählung fortzusetzten:
  return TRUE;
}



//---------------------------------------------------------------------------
// Beenden aller Rechner-Instanzen:
//---------------------------------------------------------------------------
BOOL CALLBACK KillAllCalcInstances(HWND hwnd,LPARAM lParam)
{
  char pcWinTitle[256]; // Für Fenster-Titel...
  DWORD pid = 0; // Für die Process-Id
  HANDLE hProcess; // Process-Handle

  // Falls kein Child-Fenster:
  if(!GetWindow(hwnd, GW_OWNER))
  {
    // Fenster-Title (Caption) auslesen:
    GetWindowText(hwnd, pcWinTitle, 255);

    // Falls Win-Rechner, Fenster schliessen:
    if(AnsiString(pcWinTitle) == "Rechner")
    {
      //-------------------------------------
      // und hier entweder höflich nachfragen,
      // was das Programm vom Beenden hält:
      PostMessage(hwnd, WM_CLOSE, 0,0);
      //-------------------------------------
      // oder einfach Process beenden:

      // Process-Id besorgen:
      // GetWindowThreadProcessId(hwnd, &pid);
      // Process mit allen Zugriffsrechten öffnen:
      // hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
      // und tschüss...
      // TerminateProcess(hProcess, 0);
  }
  // true zurückgeben, um Aufzählung fortzusetzten:
  return TRUE;
}

}



Hallo leute habe mir diesen Code abgeschrieben und ein Projekt erstellt wie es vorgegeben ist habs auf www.source-community.de gefunden leider Stoppt mein Compiler bei BOOL CALLBACK ShowAllWindows(HWND hwnd,LPARAM lParam) mit den fehlermeldungen unten:





[C++ Fehler] UWinAPI.cpp(25): E2108 Ungültige Verwendung von typedef 'BOOL'
[C++ Fehler] UWinAPI.cpp(25): E2379 In Anweisung fehlt ;
[C++ Fehler] UWinAPI.cpp(110): E2134 Abschließendes } fehlt

was mach ich den jetzt dort falsch ist doch alles Richtig???

meine güte kann doch nicht so schwer sein???oder was agt ihr??

Dieser Post wurde am 04.09.2009 um 09:17 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.09.2009, 09:21 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja ein (guter) compiler würde dir sagen: "Lokale Funktionsdefinitionen sind ungültig" (o.ä)


C++:
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   // hier erstellst du deinen Form-konstruktor und machst ihn auf

BOOL CALLBACK ShowAllWindows(HWND hwnd,LPARAM lParam)
{
  // und hier erstellst du eine neue funktion und machst die auf

  // ...
}

// ...


} // und ganz am ende machst du deinen Konstruktor erst wieder zu.


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.09.2009, 11:26 Uhr
mkRE



NAja ich hab jetzt das Problem gestern selber gelöst mit deinen Antworten kann ich nichts anfangen ich sehe dabei keine Hilfe nur kurze staytments.
Meine Frage ist warum hast du FloSoft mein Thema GetWindowText() als Doppelpost zugemacht es geht dort schon um ein weiteres Problem.Was soll das.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.09.2009, 11:29 Uhr
mkRE



Also Nochmal:

Hallo leute ich habe mich den ganzen Tag durchs Internet und hier gewühlt um ein Funktionierendes Programm zu basteln um alle fensternamen herauszufinden.Den Code habe ich herausgefunden auf einer Seite :



C++:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ListBox1->Clear();
EnumWindows((WNDENUMPROC)ShowAllWindows,0);
}


BOOL CALLBACK ShowAllWindows(HWND hwnd,LPARAM lParam)
{
char pcWinTitle[256];


if(!GetWindow(hwnd, GW_OWNER))
{
GetWindowText(hwnd, pcWinTitle, 255);
//mach was mit dem Titel ->durchsuchen o.a.

if(AnsiString(pcWinTitle).Trim() != EmptyStr)
Form1 -> ListBox1 -> Items -> Add(pcWinTitle);




}
return true;

}




So jetzt werden mir zwar alle laufenden Fensternamen angezeigt jetzt weiß ich nicht wie ich mein gesuchtes Fenster Herausfinde und es dann schließen kann.

Es geht mir mehr um Fenster die in der Schnellstartleite versteckt sind.

Andere fenster kann ich schon schließen halt nur die die feste fensternamen haben.
Das geht ja mit FindWindow() und SendMessage().


Habt ihr paar tipps evtl einen guten code??

ich verzwefle mit den Schnellstart Fenstern!!!


Bearbeitung:

Codetags selbst verwenden!!!


Dieser Post wurde am 05.09.2009 um 11:43 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
04.09.2009, 23:22 Uhr
Hans
Library Walker
(Operator)


Hi,

ich bin mir zwar nicht sicher, weil ich mich mit der VCL nicht auskenne, aber ich fürchte, Du haust VCL und WinAPI durcheinander, und das beisst sich irgendwo, weil die VCL ihre eigene Art hat, auf die WinAPI zu zugreifen.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.09.2009, 16:43 Uhr
TOSHMAX



Hallo,

wenn du mir erklären kannst, was genau du unter "Fenster die in der Schnellstartleiste versteckt sind" verstehst, kann ich dir vielleicht weiterhelfen.

Meinst du möglicherweise Fenster, die nicht in der Taskleiste angezeigt werden?
Und falls du noch ein Beispiel für eines dieser Fenster / Programme hättest, würde mir das auch sehr helfen.

Gruß
Toshmax
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
05.09.2009, 19:24 Uhr
mkRE



Hi also es geht mir genauer um die kleinen Symbole die unten ganz rechts in der Taskleiste sind wo z.B Zone Alarm im Hintergrund läuft oder bei mir der Fall möchte ich die Tray Icons von DynDNS und VNC Server abschalten die dor angezeigt werden sobald die beiden Progs aktiv sind.

Das ist eigentlich mein ganzes Problem.

Ich kann die beiden schonmal starten und Fenster wenn diese offen sind schließen.

Wenn ich aber die VNC Server starte dann öffnet sich ein cmd fenster das habe ich versucht per FindWindow() und SendMessage zu schließen das ging nicht weil dort quasi der Pfad angezeigt wurde als fenstername.


Fänds super wenn du eine Idee hast.


Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: