чье окошко alt tab

Тема в разделе "WASM.WIN32", создана пользователем XshStasX, 7 фев 2012.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Какой процесс владеет окном которое возникает при нажатии alt tab ?
     
  2. expert

    expert New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2009
    Сообщения:
    151
    explorer
     
  3. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Не в курсе, но очевидно, что этим занимается Проводник (explorer.exe), кто же ещё-то?
     
  4. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    врядли проводник, если его убить. окошко alt tab все равно работает между задачами.
     
  5. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Проблема в том что через EnumWindows его не удается засечь, пробывал так ( с учетом разных оконных станций/рабочих столов)
    Код сохраняет в файл все новые окна под курсором.
    Spy++ видет окно, но так как если нажать/отпустить хоть одну клавишу кроме тав окно пропадает, в Spy++ удаеться просмотреть только HWND и класс окна ( он стандартный ( )

    Пробывал настраивать это
    Код (Text):
    1.  http://qwers.com/Poleznie-soveti-dlja-Windows7/Reestr/reenasint5.htm
    для задержки пропадания окна, ни какой реакции.

    Код (Text):
    1. #include <map>
    2. #include <vector>
    3.  
    4. std::map<HWND,DWORD>    Process;
    5.  
    6. VOID DWORDToHex(DWORD hex, PCHAR str)
    7. {
    8.     char mh[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    9.    
    10.     for (int i =8; i; --i)
    11.     {
    12.         int a = (0x0F << (i-1)*4) & hex;
    13.         a = a >> (i-1)*4;
    14.         str[8-i] = mh[a & 0x0F];
    15.     };
    16.     str[8] = 0;
    17. };
    18.  
    19. BOOL CALLBACK WndEnumChild(HWND hwnd, LPARAM lParam)
    20. {
    21.     std::vector<PCHAR>  *vstr = (std::vector<PCHAR> *)lParam;
    22.     DWORD IdProcess;
    23.     BOOLEAN IsExist = TRUE;
    24.     RECT    Window;
    25.     POINT   cur;
    26.     GetWindowRect(hwnd,&Window);
    27.     GetCursorPos(&cur);
    28.  
    29.     if ( (Window.left <= cur.x) && (Window.right > cur.x) )
    30.     if ( (Window.top <= cur.y) && (Window.bottom > cur.y) )
    31.     {
    32.  
    33.         if ( (IdProcess = Process[hwnd]) == 0 )
    34.         {
    35.                 IsExist = FALSE;
    36.         }
    37.         GetWindowThreadProcessId(hwnd,&IdProcess);
    38.         Process[hwnd] = IdProcess;
    39.         if ( IsExist == FALSE )
    40.         {
    41.             char hex_hwnd[16];
    42.             DWORDToHex((DWORD)hwnd,hex_hwnd);
    43.             vstr->push_back(STR::New(2,"\t\t 0x",hex_hwnd));
    44.         }
    45.     }
    46.     EnumChildWindows(hwnd,WndEnumChild,lParam);
    47.     return TRUE;
    48. }
    49. BOOL CALLBACK WndEnumProc(HWND hwnd, LPARAM lParam)
    50. {
    51.     EnumChildWindows(hwnd,WndEnumChild,lParam);
    52.     return TRUE;
    53. }
    54.  
    55. BOOL CALLBACK EnumDesktop(PCHAR astr, LPARAM lParam)
    56. {
    57.     std::vector<PCHAR>  *vstr = (std::vector<PCHAR> *)lParam;
    58.     HDESK   hDesk;
    59.     vstr->push_back(STR::New(2,"\t",astr));
    60.     hDesk = OpenDesktopA(astr,0,FALSE,DESKTOP_ENUMERATE);
    61.     if ( hDesk )
    62.     {
    63.         EnumDesktopWindows(hDesk,WndEnumProc,lParam);
    64.     CloseDesktop(hDesk);
    65.     }
    66.     return TRUE;
    67. }
    68.  
    69. BOOL CALLBACK EnumStation(PCHAR str, LPARAM lParam)
    70. {
    71.     std::vector<PCHAR>  *vstr = (std::vector<PCHAR> *)lParam;
    72.     HWINSTA hWin;
    73.     vstr->push_back(STR::New(str));
    74.     hWin = OpenWindowStationA(str,FALSE,GENERIC_READ );
    75.     if ( hWin )
    76.     {
    77.         EnumDesktopsA(hWin,EnumDesktop,lParam);
    78.         CloseWindowStation(hWin);
    79.     }
    80.     return TRUE;
    81. }
    82.  
    83. BOOLEAN FileWrite(PCHAR FileName,PVOID Data,DWORD Size)
    84. {
    85.     HANDLE  hFile;
    86.     DWORD s;
    87.  
    88.     hFile = CreateFileA(FileName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
    89.     if ( hFile == INVALID_HANDLE_VALUE)
    90.         return FALSE;
    91.     SetFilePointer(hFile,0,NULL,FILE_END);
    92.     WriteFile(hFile,Data,Size,&s,NULL);
    93.     CloseHandle(hFile);
    94.     return s == Size;
    95. }
    96.  
    97. DWORD WINAPI Start()
    98. {
    99.     std::vector<PCHAR>  vstr;
    100. while(1)
    101. {
    102.     EnumWindowStationsA(EnumStation,(LPARAM)&vstr);
    103.     for (int i=0; i < vstr.size(); ++ i)
    104.     {
    105.         PCHAR   str = STR::New(2,vstr[i],"\r\n");
    106.         FileWrite("C:\\winlogon_window.txt",str,m_lstrlen(str));
    107.         STR::Free(str);
    108.         STR::Free(vstr[i]);
    109.     }
    110.     vstr.clear();
    111.     Sleep(100);
    112. }
    113.     return 10;
    114. }
    115.  
    116.  
    117. void main ()
    118. {
    119.  Start();
    120. }
     
  6. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    2 XshStasX

    #32771 csrss

    Spy++ тут не годится, поэтому у меня полно других, которые могут :)
    к примеру, тут в Проектах есть HTSpy, чтобы показал - запускаешь и на окно по alt+tab наводишь курсор

    ------
    > если нажать/отпустить хоть одну клавишу кроме тав окно пропадает

    LShift, RShift
     
  7. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    kero
    спасибо:) так и думал что csrss не успел проверить его.