Zjištění, jestli je viditelná plocha (HWND_DESKTOP) – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zjištění, jestli je viditelná plocha (HWND_DESKTOP) – C / C++ – Fórum – Programujte.comZjištění, jestli je viditelná plocha (HWND_DESKTOP) – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
ProXicT0
Návštěvník
19. 3. 2014   #1
-
0
-

Zdravím, 
chtěl bych nějakým způsobem zjistit, jestli je viditelná pouze uživatelská plocha (HWND_DESKTOP), tudíž (HWND)NULL. Problém je, že plocha je mateřské okno všech ostatních oken.  A právě proto kvůli tomu nemůže fungovat toto:

bool Show_Hide_state = true;
HWND hProgman = FindWindow("Progman", 0);
if(hProgman)
{
    HWND hDesktop = FindWindowEx(hProgman, 0, "SHELLDLL_DefView", 0);
    if(hDesktop)
        {
           if(GetAsyncKeyState(_KeyStroke) && IsWindowVisible(hDesktop) == true)
            {
                //***
                continue;
            }
         }
}

Protože i když bude viditelné jiné okno, vždy to bude jen podokno plochy.
Zkoušl jsem i funkce jako: 
GetDesktopWindow()IsWindowVisible()GetTopWindow()GetForegroundWindow() a mnoho dalších, ale také neúspěšně.
Nevíte někdo, jak bych mohl opravdu zjistit, jestli je viditelná POUZE plocha?
Předem díky ;-)

Nahlásit jako SPAM
IP: 77.240.98.–
Radek Chalupa
~ Redaktor
+1
Super člen
19. 3. 2014   #2
-
0
-

#1 ProXicT
Možná pokud bys napsal co chceš s tím (a proč zrovna právě s tímto) oknem provádět, nějaké řešení toho co chceš udělat by se našlo.

Nicméně jedno blbé a dost pomalé řešení by bylo projít všechny body obrazovky a pomocí API funkce WindowFromPoint zjistíš která všechna okna jsou zrovna viditelná;

Radek Chalupa 
- vývoj software na zakázku 
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC) 
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
ProXicT0
Návštěvník
19. 3. 2014   #3
-
0
-

#2 Radek Chalupa
Chtěl bych pomocí toho skrývat ikony na ploše, pokud je viditelná pouze plocha a žádné jiné okno není aktivní. Skrývat ikony už aplikace umí.

Nahlásit jako SPAM
IP: 77.240.98.–
Radek Chalupa
~ Redaktor
+1
Super člen
19. 3. 2014   #4
-
0
-

#3 ProXicT
Možná zjistit co vrací GetForegroundWindow při té "čisté ploše" a pak při to volat při tom testu a porovnat třídu okna které ti ta fce vrátí (pomocí GetClassName)

Radek Chalupa 
- vývoj software na zakázku 
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC) 
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
ProXicT0
Návštěvník
19. 3. 2014   #5
-
0
-

#4 Radek Chalupa
Jak se snažím, tak se snažím, ale nemůžu přijít na to, jak vypsat HWND, nemůžu prostě překonvertovat HWND na char ani string. Vím, že to jsou 2 jiné objekty, ale jak jinak mám zjistit, co vrací GetForegroundWindow()?

Nahlásit jako SPAM
IP: 77.240.98.–
ProXicT0
Návštěvník
19. 3. 2014   #6
-
0
-

#4 Radek Chalupa
Tak možná už to mám, ale nevím, jestli je to dobře: 

HWND test = GetForegroundWindow();
char buffer[128];
sprintf(buffer, "Window handle is [0x%08x]", test);
MessageBox(hwnd, buffer, "info:", MB_OK);

Pokaždé když to zkompiluju mi to hodí jiné HWND i když je vždy aktivní jen plocha. Je možné, že by to bralo HWND toho MessageBoxu?

Nahlásit jako SPAM
IP: 77.240.98.–
ProXicT0
Návštěvník
19. 3. 2014   #7
-
0
-

#4 Radek Chalupa
Tak i když to pro jistotu zapíšu do souboru, vždy to hodí jiný handle.

Nahlásit jako SPAM
IP: 77.240.98.–
liborb
~ Redaktor
+18
Guru
20. 3. 2014   #8
-
0
-

Ještě můžeš zkusit jít cestou EnumChildWindows, projít všechna podokna a testovat minimalizaci, polohu, .... prostě budeš mít od všech HWND.

Nahlásit jako SPAM
IP: 188.75.135.–
ProXicT0
Návštěvník
20. 3. 2014   #9
-
0
-

#8 liborb
Nevím, jestli tomu správně rozumím, ta fce je rekurzivní, pokud vrátí false? Nemám ani tucha, jak bych tu funkci použil.

Nahlásit jako SPAM
IP: 77.240.98.–
ProXicT0
Návštěvník
20. 3. 2014   #10
-
0
-

#8 liborb
*dokud nevrátí false...

Nahlásit jako SPAM
IP: 77.240.98.–
Radek Chalupa
~ Redaktor
+1
Super člen
20. 3. 2014   #11
-
0
-

#10 ProXicT
Není rekurzivní, ale v parametru zadáš adresu své funkce, která bude volaná "zevnitř" pro každé nalezené okno, nějak takhle:

BOOL CALLBACK enum_child_proc(HWND hwnd, LPARAM lparam)
{
	// tady nějak zpracuju handle hwnd
	return TRUE;
	// pokud chci ukončit předčasně (např. nalezl hledané okno) vrátím FALSE
	return FALSE;
}

// Zavolám vyčíslení oken
EnumChildWindows(NULL, enum_child_proc, 0);

Radek Chalupa 
- vývoj software na zakázku 
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC) 
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
Radek Chalupa
~ Redaktor
+1
Super člen
20. 3. 2014   #12
-
+1
-
Zajímavé

#10 ProXicT
Zkusil jsem průběžně sledovat co vrací GetForegroundWindow. Když spustíš následující program, v bublině u traye se ti bude po 5 sekundách zobrazovat aktuální foreground-window, resp. handle a jméno třídy. Program ukončíš klikem na tu ikonu, okno zůstává neviditelné, můžeš sledovat co tam bude při zavření/minimalizaci všech aplikací atd, z toho možná zjistíš jak postavit podmínku pro skrytí těch ikon plochy.

#include "stdafx.h"

#define _STR_TRIDA L"MojeOkno"

HWND _hwnd;
NOTIFYICONDATA _nid;

void on_timer()
{
	HWND h = GetForegroundWindow();
	wchar_t trida[250];
	wchar_t text[250];
	if (GetClassNameW(h, trida, sizeof(trida)/sizeof(wchar_t)) == 0)
		return;
	_nid.uFlags = NIF_INFO;
	_nid.uFlags = NIF_INFO | NIF_SHOWTIP;
	StringCbPrintf(text, sizeof(text), L"HWND: %X\nTřída: %s", (int)h, trida);
	StringCbCopyN(_nid.szInfo, sizeof(_nid.szInfo), text, sizeof(_nid.szInfo) - sizeof(wchar_t));
	Shell_NotifyIconW(NIM_MODIFY, &_nid);
}

LRESULT CALLBACK window_proc(HWND hwnd, UINT zprava, WPARAM wparam, LPARAM lparam)
{
	switch (zprava)
	{
	case WM_TIMER:
		on_timer();
		break;
	case WM_CLOSE:
		{
			memset(&_nid, 0, sizeof(_nid));
			_nid.cbSize = sizeof(NOTIFYICONDATA);
			_nid.hWnd = hwnd;
			_nid.uID = 1;
			Shell_NotifyIconW(NIM_DELETE, &_nid);
		}
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_APP + 1:
		if (LOWORD(lparam) == WM_LBUTTONUP)
			PostMessage(hwnd, WM_CLOSE, 0, 0);
		break;
	}
	return DefWindowProc(hwnd, zprava, wparam, lparam);
}

int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int)
{
	MSG msg;
	WNDCLASSEX wc;
	memset(&wc, 0, sizeof(wc));
	wc.cbSize = sizeof(WNDCLASSEX);
	wc.lpfnWndProc	= window_proc;
	wc.hInstance = hInstance;
	wc.hIcon = LoadIcon(NULL, IDI_INFORMATION);
	wc.hCursor = NULL;
	wc.hbrBackground = NULL;
	wc.lpszClassName = _STR_TRIDA;
	wc.hIconSm = LoadIcon(NULL, IDI_INFORMATION);
	if (!RegisterClassEx(&wc))
		return 0;
	_hwnd = CreateWindowEx(0, _STR_TRIDA, L"Test", WS_POPUP, 0, 0, 0, 0, NULL, NULL, hInstance, NULL);
	memset(&_nid, 0, sizeof(_nid));
	_nid.cbSize = sizeof(_nid);
	_nid.hIcon = LoadIcon(NULL, IDI_INFORMATION);
	_nid.hWnd = _hwnd;
	_nid.uID = 1;
	_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
	_nid.uFlags |= NIF_SHOWTIP;
	_nid.uCallbackMessage = WM_APP + 1;
	_nid.uVersion = NOTIFYICON_VERSION_4;
	StringCbCopyNW(_nid.szTip, sizeof(_nid.szTip), L"Test plochy", sizeof(_nid.szTip) - sizeof(wchar_t));
	if (!Shell_NotifyIconW(NIM_ADD, &_nid))
		return 0;
	_nid.uVersion = NOTIFYICON_VERSION_4;
	if (!Shell_NotifyIconW(NIM_SETVERSION, &_nid))
		return 0;
	SetTimer(_hwnd,1, 5000, NULL);
	on_timer();
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return 0;
}

Radek Chalupa 
- vývoj software na zakázku 
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC) 
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
ProXicT0
Návštěvník
20. 3. 2014   #13
-
0
-

#12 Radek Chalupa
Díky moc, zítra když bude čas, tak to vyzkouším :)

Nahlásit jako SPAM
IP: 77.240.98.–
ProXicT0
Návštěvník
20. 3. 2014   #14
-
0
-

#12 Radek Chalupa
Zkusil jsem to ještě teď.  

#include <windows.h>
#include <stdio.h>
#pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow);

HWND hwnd;
HINSTANCE hInstance;
MSG msg;

void OnTime();

#define CLASS_NAME "My Window"
NOTIFYICONDATA nid;

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_DESTROY:
	{
		PostQuitMessage(0);
	}
		break;

	case WM_CLOSE:
	{
		DestroyWindow(hwnd);
	}
		break;

	case WM_TIMER:
	{
		OnTime();
	}
		break;

	case WM_APP + 1:
	{
		if(LOWORD(lParam) == WM_LBUTTONUP)
		{
			PostMessage(hwnd, WM_CLOSE, 0, 0);
		}
	}
		break;
	}
	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
	WNDCLASSEX wc;
	ZeroMemory(&wc, sizeof(wc));
	wc.cbSize = sizeof(WNDCLASSEX);
	wc.lpfnWndProc = WndProc;
	wc.hInstance = hInstance;
	wc.hIcon = LoadIcon(NULL, IDI_INFORMATION);
	wc.hIconSm = NULL;
	wc.hCursor = NULL;
	wc.hbrBackground = NULL;
	wc.lpszClassName = CLASS_NAME;
	RegisterClassEx(&wc);
	
	hwnd = CreateWindow(CLASS_NAME, "Test", WS_POPUP, 0, 0, 0, 0, NULL, NULL, hInstance, NULL);
	
	ZeroMemory(&nid, sizeof(nid));
	nid.cbSize = sizeof(nid);
	nid.hIcon = LoadIcon(NULL, IDI_INFORMATION);
	nid.hWnd = hwnd;
	nid.uID = 1;
	nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
	nid.uFlags |= NIF_SHOWTIP;
	nid.uCallbackMessage = WM_APP + 1;
	nid.uVersion = NOTIFYICON_VERSION_4;
	strcpy(nid.szTip, "Test plochy");
	if(!Shell_NotifyIcon(NIM_ADD, &nid))
		return 0;
	nid.uVersion = NOTIFYICON_VERSION_4;
	if(!Shell_NotifyIcon(NIM_SETVERSION, &nid))
		return 0;
	SetTimer(hwnd, 1, 5000, NULL);
	
	OnTime();

	while(GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}

void OnTime()
{
	HWND handle = GetForegroundWindow();
	char _class[250];
	char _output[250];
	if(GetClassName(handle, _class, sizeof(_class) / sizeof(char)) == 0)
	{
		return;
	}
	nid.uFlags = NIF_INFO | NIF_SHOWTIP;
	sprintf(_output, "HWND: %X\nTřída: %s", (int)handle, _class);
	strcpy(nid.szInfo, _output);
	Shell_NotifyIcon(NIM_MODIFY, &nid);
}

Někdy mi to hází třídu "WorkerW" a někdy "Progman", ale zachytávat, jestli je viditelný handle progmana už jsem zkoušel a nefungovalo to. Zkusím tedy testovat "WorkerW" a dám vědět.

Nahlásit jako SPAM
IP: 77.240.98.–
ProXicT0
Návštěvník
20. 3. 2014   #15
-
0
-

#12 Radek Chalupa
Já už opravdu netušim, co s tím je. MessageBox mi vypisuje třídu jak se mu zachce, resp. zřejmě fce GetForegroundWindow() si funguje jak chce. Několikrát to hodí stejný handle, pak to chvilku hází jiný handle a následně opět předchozí. Dokonce mi to vypisuje třídu Google Chromu i když je chrome  minimalizovaný. V podmínce mám, že pokud se název třídy rovná těm třídám, co mi MessageBox vypsal nejvícekrát, a zároveň když mám stisknutou klávesovou zkratku, ať skryje, nebo ukáže ikony. Nestane se ale vůbec nic. 

void ShowHideDesktopIcons()
{
	HWND DesktopIcons = NULL;
	HWND handle = NULL;
	HWND hProgman = FindWindow("Progman", 0);
	int i = 0;
	if(hProgman)
	{
		HWND hDesktop = FindWindowEx(hProgman, 0, "SHELLDLL_DefView", 0);
		if(hDesktop)
		{
			DesktopIcons = FindWindowEx(hDesktop, 0, "SysListView32", 0);
			while(true)
			{
				handle = GetForegroundWindow();
				char _class[250];
				GetClassName(handle, _class, sizeof(_class) / sizeof(char));
				if(i == 1000)
				{
					MessageBox(NULL, _class, "Foreground Class:", MB_OK);
				}
				i++;
				if(i > 1000)
				{
					i = 0;
				}
				if(GetAsyncKeyState(VK_LMENU) && (ctrl ? GetAsyncKeyState(VK_LCONTROL) : TRUE) && GetAsyncKeyState(_KeyStroke) && (_class == "WorkerW" || _class == "Progman") && key == false)
				{
					key = true;
					Show_Hide_state = !Show_Hide_state;
					continue;
				}
				if(!GetAsyncKeyState(_KeyStroke))
				{
					key = false;
				}
								
				ShowWindow(DesktopIcons, (Show_Hide_state ? SW_SHOW : SW_HIDE));
				Sleep(5);
			}
		}
	}
}

Také mám menší problém s celým tím programem, že když tam mám notifikační ikonu v liště a restartuju Explorer, tak mi ikona zmizí, ale program stále běží. 

void SysTrayIcon()
{
	nid.cbSize = sizeof(NOTIFYICONDATA);
	nid.hWnd = hwnd;
	nid.uID = ID_TRAY_APP_ICON; // ID ikony v system tray.
	nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
	nid.uCallbackMessage = WM_SYSICON;
	nid.hIcon = (HICON)LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_ICON)); // Nahraje obrázek ikony v system tray.
	ZeroMemory(nid.szTip, sizeof(nid.szTip));
	strcpy(nid.szTip, "MyDesktop");

	Shell_NotifyIcon(NIM_ADD, &nid); // Přidá ikonu do system tray..
}

//V proceduře mám:
	case WM_SYSCOMMAND:
	{
		switch(wParam & 0xFFF0)
		{
		case SC_MINIMIZE:
		case SC_CLOSE:
			ShowWindow(hwnd, SW_HIDE);
			return 0;
			break;
		}
	}
		break;

	case WM_SYSICON:
	{
		if(lParam == WM_LBUTTONDBLCLK)
		{
			ShowWindow(hwnd, SW_SHOW);
			SetForegroundWindow(hwnd);
		}
		if(lParam == WM_RBUTTONDOWN)
		{
			POINT curPoint;
			GetCursorPos(&curPoint);
			SetForegroundWindow(hwnd);
			int clicked = TrackPopupMenu(Hmenu, TPM_RETURNCMD | TPM_NONOTIFY, curPoint.x, curPoint.y, 0, hwnd, NULL);
			if(clicked == ID_TRAY_EXIT)
			{
				HWND DesktopIcons = NULL;
				HWND hProgman = FindWindow("Progman", 0);
				if(hProgman)
				{
					HWND hDesktop = FindWindowEx(hProgman, 0, "SHELLDLL_DefView", 0);
					if(hDesktop)
					{
						DesktopIcons = FindWindowEx(hDesktop, 0, "SysListView32", 0);
						ShowWindow(DesktopIcons, SW_SHOW);
					}
				}
				Shell_NotifyIcon(NIM_DELETE, &nid);
				PostQuitMessage(0);
			}
		}
	}
		break;

	case WM_NCHITTEST:
	{
		UINT uHitTest = DefWindowProc(hwnd, WM_NCHITTEST, wParam, lParam);
		if(uHitTest == HTCLIENT)
		{
			return HTCAPTION;
		}
		else
		{
			return uHitTest;
		}
	}
		break;
Nahlásit jako SPAM
IP: 77.240.98.–
Radek Chalupa
~ Redaktor
+1
Super člen
21. 3. 2014   #16
-
0
-

#15 ProXicT
Když spustím tu notifikaci u traye (tj. žádný messagebox) a jsou všechny ostatní aplikace minimalizované, jako foregroud je buď "Progman" (pokud kliknu na plochu, bez ohledu na to zda na nějakou ikonu nebo mezi ně) nebo "Shell_TrayWnd" (pokud jsem kliknu na taskbar). Jiné třídy to nehlásí. Může to být závislé na verzi windows a nastaveném vzhledu. Já mám Windows 7 a zapnuté Aero.

Radek Chalupa 
- vývoj software na zakázku 
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC) 
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
ProXicT0
Návštěvník
21. 3. 2014   #17
-
0
-

#16 Radek Chalupa
Já mám windows 8, vše mám minimalizované, kliknu na plochu a hlásí mi to Progman, někdy WorkerW a občas dokonce Google Chrome i když je minimalizovaný. Nejčastěji však Progman. Tak ověřuji, jestli je v popředí Progman, nebo WorkerW, ať se splní podmínka, ale ta se nikdy nesplní. Ten MessageBox má jako handle NULL, takže tomu vůbec nevadí, ale nefunguje to ani bez něho. Opravdu tomu nerozumím.

Nahlásit jako SPAM
IP: 77.240.98.–
Řešení
Radek Chalupa
~ Redaktor
+1
Super člen
21. 3. 2014   #18
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

#17 ProXicT
Hmm, tak jsem to zkusil v trial verzi osmiček a chová se to stejně jako ve Win7...

Přidal jsem tam automatické skrývání na timer, popř. ruční na horkou klávesu a skrývá a obnovuje to ikony bez problému.

#include "stdafx.h"

#define _STR_TRIDA L"MojeOkno"

HWND _hwnd;
HWND _hwnd_ikony;
NOTIFYICONDATA _nid;

void on_timer()
{
	HWND h = GetForegroundWindow();
	wchar_t trida[250];
	wchar_t text[250];
	if (GetClassNameW(h, trida, sizeof(trida)/sizeof(wchar_t)) == 0)
		return;
	_nid.uFlags = NIF_INFO;
	_nid.uFlags = NIF_INFO | NIF_SHOWTIP;
	StringCbPrintf(text, sizeof(text), L"HWND: %X\nTřída: %s", (int)h, trida);
	StringCbCopyN(_nid.szInfo, sizeof(_nid.szInfo), text, sizeof(_nid.szInfo) - sizeof(wchar_t));
	Shell_NotifyIconW(NIM_MODIFY, &_nid);
	if ((lstrcmpi(trida, L"Progman") == 0) || (lstrcmpi(trida, L"Shell_TrayWnd") == 0))
		ShowWindow(_hwnd_ikony, SW_HIDE);
	else
		{
			ShowWindow(_hwnd_ikony, SW_RESTORE);
			ShowWindow(_hwnd_ikony, SW_SHOW);
		}
}

LRESULT CALLBACK window_proc(HWND hwnd, UINT zprava, WPARAM wparam, LPARAM lparam)
{
	switch (zprava)
	{
	case WM_HOTKEY:
		if (IsWindowVisible(_hwnd_ikony))
			ShowWindow(_hwnd_ikony, SW_HIDE);
		else
		{
			ShowWindow(_hwnd_ikony, SW_RESTORE);
			ShowWindow(_hwnd_ikony, SW_SHOW);
		}
		break;
	case WM_TIMER:
		on_timer();
		break;
	case WM_CLOSE:
		{
			UnregisterHotKey(_hwnd, 1);
			ShowWindow(_hwnd_ikony, SW_RESTORE);
			ShowWindow(_hwnd_ikony, SW_SHOW);
			memset(&_nid, 0, sizeof(_nid));
			_nid.cbSize = sizeof(NOTIFYICONDATA);
			_nid.hWnd = hwnd;
			_nid.uID = 1;
			Shell_NotifyIconW(NIM_DELETE, &_nid);
		}
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_APP + 1:
		if (LOWORD(lparam) == WM_LBUTTONUP)
			PostMessage(hwnd, WM_CLOSE, 0, 0);
		break;
	}
	return DefWindowProc(hwnd, zprava, wparam, lparam);
}

int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int)
{
	_hwnd_ikony = FindWindow(L"Progman", NULL);
	if (_hwnd_ikony)
		_hwnd_ikony = FindWindowEx(_hwnd_ikony, NULL, L"SHELLDLL_DefView", NULL);
	if (_hwnd_ikony)
		_hwnd_ikony = FindWindowEx(_hwnd_ikony, NULL, L"SysListView32", NULL);
	if (!_hwnd_ikony)
		return 0;
	MSG msg;
	WNDCLASSEX wc;
	memset(&wc, 0, sizeof(wc));
	wc.cbSize = sizeof(WNDCLASSEX);
	wc.lpfnWndProc	= window_proc;
	wc.hInstance = hInstance;
	wc.hIcon = LoadIcon(NULL, IDI_INFORMATION);
	wc.hCursor = NULL;
	wc.hbrBackground = NULL;
	wc.lpszClassName = _STR_TRIDA;
	wc.hIconSm = LoadIcon(NULL, IDI_INFORMATION);
	if (!RegisterClassEx(&wc))
		return 0;
	_hwnd = CreateWindowEx(0, _STR_TRIDA, L"Test", WS_POPUP, 0, 0, 0, 0, NULL, NULL, hInstance, NULL);
	memset(&_nid, 0, sizeof(_nid));
	_nid.cbSize = sizeof(_nid);
	_nid.hIcon = LoadIcon(NULL, IDI_INFORMATION);
	_nid.hWnd = _hwnd;
	_nid.uID = 1;
	_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
	_nid.uFlags |= NIF_SHOWTIP;
	_nid.uCallbackMessage = WM_APP + 1;
	_nid.uVersion = NOTIFYICON_VERSION_4;
	StringCbCopyNW(_nid.szTip, sizeof(_nid.szTip), L"Test plochy", sizeof(_nid.szTip) - sizeof(wchar_t));
	if (!Shell_NotifyIconW(NIM_ADD, &_nid))
		return 0;
	_nid.uVersion = NOTIFYICON_VERSION_4;
	if (!Shell_NotifyIconW(NIM_SETVERSION, &_nid))
		return 0;
	SetTimer(_hwnd,1, 5000, NULL);
	on_timer();
	RegisterHotKey(_hwnd, 1, 0, VK_SCROLL);
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return 0;
}

Radek Chalupa 
- vývoj software na zakázku 
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC) 
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
ProXicT0
Návštěvník
21. 3. 2014   #19
-
0
-

#18 Radek Chalupa
Aha, už chápu, kde byla chyba. Nedošlo mi, že nemůžu porovnávat if(_class == "Progman") <= nikdy se rovnat totiž nebude, ale musím to porovnávat takto: if(strcmp(_class, "Progman") == 0). Vůbec mi to v té chvíli, když jsem to psal nedošlo. Tak díky moc! Nevim, jak dlouho bych si s tím ještě lámal hlavu. Tak ještě jednou díky za pomoc a zároveň přeji vše nejlepší k svátku ;-)

Nahlásit jako SPAM
IP: 77.240.98.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý