2009-09-02 3 views
4

마우스 위치에서 Windows 시작 메뉴를 활성화해야합니다.WIndows 시작 메뉴 표시 방법

CTRL + ESC 또는 Win 키를 특정 창에 보내고 나중에 창을 이동할 수 있다는 것을 알고 있지만 잠시 후 원래 위치에 메뉴가 표시됩니다 (단, 후크를 설치하지 않으면 잔인합니다). 작업).

일부 dll 호출을 사용하거나 쉘 또는 일부 메시지를 보내는 몇 가지 방법이 있습니다.

Ty

+1

저는 2 년 반 만에 아무도 시작 메뉴를 표시하는 방법을 묻지 않았습니다 (실제로 아무도 [공식, 문서화 된, 대답]를 제공하지는 않습니다.) (http : //stackoverflow.com/questions/2755202/)). 그러나 마우스 포인터가 기본 위치가 아닌 _ 시작되면 _ 시작 메뉴를 여는 방법을 묻습니다. – JdeBP

답변

1

버튼을 프로그래밍 방식으로 "누르는"경우에도 동일한 동작을합니까?

// Find the Start button 
    HANDLE hScreenDC = GetDC(0); 
    DWORD height = GetDeviceCaps(hScreenDC, VERTRES); 
    ReleaseDC(0, hScreenDC); 
    hTaskBarWnd = FindWindow("Shell_TrayWnd", 0); 
    hStartButtonWnd = GetWindow(hTaskBarWnd, GW_CHILD); 

    // Now simulate a press on the Start button 
    SendMessage(hButtonWnd, WM_LBUTTONDOWN, 
     MK_LBUTTON, LOWORD(5) + HIWORD(height - 20)); 

그렇지 않으면 WinSpy++을 사용하여 "Shell_TrayWnd"창을 탐색하거나 유사한 유틸리티를 사용하여 수, 아마도 시작 메뉴는 트레이 창의 자식 창입니다.

+0

코드는 WM_LBUTTODOWN의 Lparam으로 0 (또는 작은 값, 아마도 클라이언트 영역의 버튼이어야 함)을 전달할 때만 작동합니다. 그것은 자식 창이 아닌 것 같지만 매번 다시 만들었습니다 .... – majkinetor

+0

확실히 할 수 있습니다. (예 : Stardock의 DesktopX와 같은) 애플 리케이션이 있습니다. – majkinetor

+0

그렇다면 종속성 워커를 사용하여 다음에 의해 사용 된 가져 오기를 검사 할 수 있습니다. DesktopX 유틸리티를 사용하면 찾고있는 API 함수가 표시 될 수 있습니다. – Gabriella

1
[DllImport("user32.dll", SetLastError = true)] 
public static extern IntPtr FindWindow (string lpClassName, string lpWindowName); 

[DllImport("user32.dll")] 
public static extern bool ShowWindow (IntPtr hWnd, ShowWindowCommand nCmdShow); 

int ShowCmd = 5; 
int HideCmd = 0; 
ShowWindow(FindWindow("DV2ControlHost", "Start menu"), ShowCmd); 

적어도 Windows 7에서 트릭을해야합니다. 다시 숨기려면 "ShowCmd"대신 "HideCmd"를 사용하십시오.

관련 문제