Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Windows/Dos > Xендл Desktop


Автор: Moky 10.12.2015, 21:15
День добрый, форумчане!
Разбираясь с устройством и условиями доступа к Desktop’у, столкнулся с малопонятной мне вещью. В Инете можно встретить достаточно примеров и описаний взятия дескриптора.
Одни делают это так:  invoke GetDesktopWindow;
другие так: invoke FindWindow,'Progman','Program Manager', или близко к этому.
А давайте объединим усилия:
Код

format PE GUI 4.0
entry start 
include 'win32ax.inc'
section '.data' data readable writable
formats db 'Число = %.0i',0
result  db 0x100 dup (?)
section '.code' code readable executable
start:
invoke FindWindow,'Progman','Program Manager'
        invoke wsprintf,result,formats,eax
      invoke MessageBox, 0,result, 'Хендл Стола 1', MB_OK
invoke GetDesktopWindow
       invoke wsprintf,result,formats,eax
    invoke MessageBox, 0,result, 'Хендл Стола 2', MB_OK
    invoke ExitProcess,0       
      section '.idata' import data readable
library kernel32,'KERNEL32.DLL',user32,'USER32.DLL'
INCLUDE 'api\kernel32.inc'
INCLUDE 'api\user32.inc'


Запустив программу я обнаружил, а числа то разные,  первое, у меня, 65774, второе 65552, а идентификаторы одного и того же окна. Как я понимаю.
Заранее благодарен кому кто не поленился объяснить тугодуму этот парадокс, а может я что-то путаю?
С уважением, Moky.

Автор: Sajtran 11.12.2015, 11:17
лучше пользоваться GetDesktopWindow, шелл может быть отличный от эксплорера

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Xendl-Desktop-id5669c1dcae2015a8218b4567#findElement_E7045_566a8688ae201534703b65e3_0

Автор: Moky 14.12.2015, 16:45
Как удалось выяснить, то есть как всегда, некоторые статьи в Инете вводят в заблуждение.
  GetDesktopWindow это действительно дескриптор Desktopa, а
FindWindow,'Progman','Program Manager' - процесса Explorer. Соответственно функции возвращают разные числа.
Персональное спасибо Sajtran!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)