Kopiuj
#define UNICODE
#include <windows.h>
#include <objbase.h>
#include <docobj.h>
#include <shlguid.h>
#include <wchar.h>
#include <list>
#include <vector>
UINT WM_TSKBRCRT;
using namespace std;
LRESULT CALLBACK WndProc1(HWND,UINT,WPARAM,LPARAM);
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam);
INT WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,INT nShow)
{
MSG msgs;
WNDCLASSEX wc;
ZeroMemory(&wc,sizeof(WNDCLASSEX));
wc.lpfnWndProc=WndProc1;
wc.hInstance=GetModuleHandle(0);
wc.lpszClassName=L"Shell_TrayWnd";
wc.cbSize=sizeof(WNDCLASSEX);
if(!RegisterClassEx(&wc)) return 0;
HWND VirtualTrayWnd=CreateWindowEx(WS_EX_TOOLWINDOW|WS_EX_TOPMOST,L"Shell_TrayWnd",0,WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,0,0,0,0,NULL,NULL,GetModuleHandle(0),NULL);
if(!VirtualTrayWnd) return 0;
wc.lpszClassName=L"TrayNotifyWnd";
if(!RegisterClassEx(&wc)) return 0;
HWND VirtualNotifyWnd=CreateWindowEx(WS_EX_TOOLWINDOW|WS_EX_TOPMOST,L"Shell_TrayWnd",0,WS_CHILD,0,0,0,0,VirtualTrayWnd,NULL,GetModuleHandle(0),NULL);
WM_TSKBRCRT=RegisterWindowMessage(L"TaskbarCreated");
EnumWindows(EnumWindowsProc,0);
CoInitialize(0);
list<IOleCommandTarget*> objects;
int count = 0;
HKEY hk;
if(!RegOpenKeyEx(HKEY_LOCAL_MACHINE,L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ShellServiceObjectDelayLoad",0,KEY_READ,&hk))
{
DWORD values;
if (!RegQueryInfoKey(hk,0,0,0,0,0,0,&values,0,0,0,0))
{
for (DWORD index=0;index<values;index++)
{
WCHAR wszText[256];
WCHAR wszClsid[42];
DWORD cch1=256*2,cch2=42*2,type;
if (!RegEnumValue(hk,index,wszText,&cch1,0,&type,(BYTE*)wszClsid,&cch2)&&(type=REG_SZ)&&(cch2>(37*2)))
{
wszClsid[cch2/2]=0;
CLSID _cls;
if (!CLSIDFromString(wszClsid, &_cls))
{
IOleCommandTarget *pcmd;
if (!CoCreateInstance(_cls,0,CLSCTX_INPROC_SERVER,IID_IOleCommandTarget,(void**)&pcmd))
{
if (!pcmd->Exec(&CGID_ShellServiceObject, (DWORD)2,(DWORD) 0, NULL, NULL))
{
objects.push_back(pcmd);
count++;
}
else pcmd->Release();
}
}
}
}
}
RegCloseKey(hk);
}
while(GetMessage(&msgs,0,0,00))
{
TranslateMessage(&msgs);
DispatchMessage(&msgs);
}
CoUninitialize();
return msgs.wParam;
}
LRESULT CALLBACK WndProc1(HWND hwnd,UINT msg,WPARAM wPar,LPARAM lPar)
{
switch(msg)
{
case WM_COPYDATA:
MessageBox(0,L"O lol dziala",0,0);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,msg,wPar,lPar);
}
return 0;
}
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM)
{
PostMessage(hwnd,WM_TSKBRCRT,0,0);
return 1;
}