ctrl+alt+del przy uzyciu keybd_event

0

Hello!
Chcialem napisac program, ktory sam bedzie wciskal mi kombinacje klawiszy ctrl+alt+del. Ponizszy kod, nie wiem z jakiego powodu, nie realizuje tego zadania.

keybd_event(VK_CONTROL,0,0,0);//ctrl
keybd_event(VK_MENU,0,0,0);//alt
keybd_event(VK_DELETE,0,0,0);//del
keybd_event(VK_DELETE,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);

Testowalem gruntownie jego dzialanie i kombinacje ctrl+alt, ctrl+del, etc. dzialaja poprawnie. Ctrl+F4 wykonane przy uzyciu keybd_event prawidlowo zamykalo mi program. Dlaczego ctrl+alt+del nie dziala?

0

zrób tak :D

uint hwnd, hmenu
hwnd = FindWindow("Shell_TrayWnd", NULL)
hmenu = GetMenu(hwnd)

SendMessage(hwnd, WM_COMMAND, 420, hmenu)
/*
  408 Ustaw datę/godzinę
  421 Dostosuj powiadomienia...
  403 Okna kaskadowo
  404 Okna sąsiadująco w poziomie
  405 Okna sąsiadująco w pionie
  407 Pokaż pulpit
  416 Cofnij
  420 Menedżer zadań 
  424 Zablokuj pasek zadań
  413 Właściwości
  403 Kaskadowo
  404 Sąsiadująco w poziomie
  405 Sąsiadująco w pionie
  311 Minimalizuj grupę
48913 Zamknij grupę
*/
0

Gdy hwnd i hmenu deklarowalem typu UINT, to kompilator (Dev-cpp) zglaszal blad. Dalem odpowiednio typow: HWND i HMENU.
Po wywolaniu SendMessage z parametrami takimi jak napisales, nic sie nie dzieje. Sprawdzilem tez dla parametru 408 - faktycznie, pojawia sie okno ustawiania daty/godziny. 407 (pokaz pulpit) juz nie dziala.

0

Pewnie dlatego że to są dane z explorera dla xp pro i home. Zrób inaczej.
Podejżyj zasoby explorera w np. ResHackerze i wylookaj ID dla tego menu.

albo

WINRECT rc
POINT pt
hwnd = FindWindow("Shell_TrayWnd", NULL)
GetWindowRect(hwnd, rc)

PostMessage(hwnd, WM_RBUTTONUP,0,0)
Sleep(100)
rc.top -= 55
GetCursorPos(pt)
SetCursorPos(10, rc.top)
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) // klik
SetCursorPos(pt.x, pt.y) // kursor spowrotem

Chyba że nie masz 2000/xp to też nie zadziała

Po PostMessage() i Sleep(), funkcja WindowFromPoint(10, rc.top-10) zwraca uchwyt do okna z klasą #32768 (czyli menu) ale nawet GetMenuItemCount() zwraca error z takim uchwytem :-/
IsMenu(hMenu) zwraca zero

0

pracuje na win98, to nie da rady.
thx

jakby ktos mial jakies propozycje, to bede wdzieczny.

1 użytkowników online, w tym zalogowanych: 0, gości: 1