Frage

Ich suche nach einer Möglichkeit, die aktuelle Taskleiste -Symbole (nicht die Systemverbähte) für jedes Programm in der Taskleiste programmgesteuert zu erhalten.

Ich hatte nicht viel Glück mit MSDN oder Google, da alle Ergebnisse auf die Systemschale zusammenhängen.

Vorschläge oder Zeiger wären hilfreich.

EDIT: Ich habe Keegan Hernandez 'Idee ausprobiert, aber ich denke, ich hätte vielleicht etwas falsch gemacht. Der Code ist unten (C ++).

#include <iostream>
#include <vector>
#include <windows.h>
#include <sstream>
using namespace std;
vector<string> xxx;
bool EnumWindowsProc(HWND hwnd,int ll)
{
    if(ll=0)
    {
        //...
        if(IsWindowVisible(hwnd)==true){
        char tyty[129];
        GetWindowText(hwnd,tyty,128);
        stringstream lmlm;
        lmlm<<tyty;
        xxx.push_back(lmlm.str());
        return TRUE;
        }
    }
}
int main()
{
    EnumWindows((WNDENUMPROC)EnumWindowsProc,0);
    vector<string>::iterator it;
    for(it=xxx.begin();it<xxx.end();it++)
    {cout<< *it <<endl;}
    bool empty;
    cin>>empty;
}
War es hilfreich?

Lösung

Es gibt mehrere Probleme mit Ihrem Code, sehen Sie sich meine Korrekturen an. Wenden Sie die Warnungen (oder lesen Sie die Build -Ausgabe) auf Ihrem Compiler, es hätte Sie vor diesen gewarnt haben (oder haben) vor diesen gewarnt haben!

#include <iostream>
#include <vector>
#include <windows.h>
#include <sstream>
using namespace std;
vector<string> xxx;
// The CALLBACK part is important; it specifies the calling convention.
// If you get this wrong, the compiler will generate the wrong code and your
// program will crash.
// Better yet, use BOOL and LPARAM instead of bool and int.  Then you won't
// have to use a cast when calling EnumWindows.
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM ll)
{
    if(ll==0) // I think you meant '=='
    {
        //...
        if(IsWindowVisible(hwnd)==true){
        char tyty[129];
        GetWindowText(hwnd,tyty,128);
        stringstream lmlm;
        lmlm<<tyty;
        xxx.push_back(lmlm.str());
        //return TRUE; What if either if statement fails?  You haven't returned a value!
        }
    }
    return TRUE;
}
int main()
{
    EnumWindows(EnumWindowsProc,0);
    vector<string>::iterator it;
    for(it=xxx.begin();it<xxx.end();it++)
    {cout<< *it <<endl;}
    bool empty;
    cin>>empty;
}

Andere Tipps

Hoffentlich reicht dies aus, um Ihnen den Einstieg zu erleichtern:

WinAPI hat eine Funktion Enumwindows, die für jedes derzeit sofortige HWND eine Rückruffunktion aufruft. Um es zu verwenden, schreiben Sie einen Rückruf des Formulars:

Bool callback enumwindowsProc (hwnd hwnd, lparam lparam);

Rufen Sie dann Enumwindows (enumWindowsProc, LPARAM) an, damit die API Ihren Rückruf für jedes Fenster aufruft, in dem HWND ein bestimmtes Fenster darstellt.

Um festzustellen, ob jedes Fenster sichtbar und daher in der Taskleiste ist, können Sie die Funktion isWindowvisible (hwnd) auf jedem HWND verwenden, den der Rückruf erhält. Wenn Sie Glück haben, können Sie alle anderen Informationen erhalten, die Sie von den HWNDs benötigen, die an diesen Rückruf übergeben werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top