Что такое код getdesktopwindow

GetWindowTextW

Только начал изучать WinAPI, как сразу же столкнулся с такой проблемой:

30.09.2013, 10:11

GetWindowTextW показывает ? вместо вайд чаров
При использовании GetWindowTextW, не могу получить название окон с русскими, скажем, буквами. .

Или воспользуйтесь поиском по форуму:

30.09.2013, 10:44 2

Функция GetWindow возвращает окно, а у тебя что написано?

Добавлено через 12 минут
А p что такое?

Что такое код getdesktopwindow

Итак, друг мой, снова засучим рукава и своей грубой мозолистой рабоче-крестьянской рукой полезем в кишочки Windows. Мы гимназиев не кончали, и не будем делать умного лица и говорить непонятных слов. Открываем VB и объявляем функции.
Но прежде чем продолжать измываться над API, скажу пару слов о том, что всем и так известно — об иерахии окон, т.е. об отношении окон друг к другу (типа: кто здесь главный). Может не совсем к месту, но я давно нарисовал картиночку с окнами и ужас как хочу ее куда-нибудь влепить.
Ну так вот. Во-первых, самое главное окно, специфическое окно это — Desktop — т.е. наш экран монитора — там где ты любишь ставить свои дурацкие обои, где висят иконки и на который выскакивает ScreenSaver в самый неподходящий момент.

Думаю, я не смогу поразить тебя следующими заявлением:
Окно может иметь дочерние и родительские окна.
Посмотрим на все ж на мою картиночку — рисунок 5.

Для окна 1 окна 3 и 4 являются дочерними, поскольку они физически находятся внутри этого окна. А окно 1 для них является родительским. Окно 5 тоже имеет родителем окно 1. Но оно находится в другом месте экрана и называется собственным. Окна, которые не имеют родителей (окно 1 и окно 2) называются окнами верхнего уровня. Кроме того они находятся на одном уровне иерархии, поэтому являются соседями. Окна 3 и 4 — тоже соседи. А по отношению к Десктопу окна 1 и 2 являются дочерними. Все это будет важно при наших попытках работать с окнами, потому что ряд API-функций конкретно предназначены для нахождения окна, исходя именно из его иерархического положения.

В принципе, окна 1 и 2 на самом деле являются дочерними окнами к десктопу. Для чего я это говорю. Часто поиск хендла окна начинается именно с десктопа — специфического окна, хендл которого всегда под рукой.
Итак, поскольку десктоп всегда под рукой, то искать его не надо. Чтобы определить хендл десктопа, надо просто объявить и использовать функцию GetDesktopWindow. Например в коде формы (не создавая стандартного модуля) в процедуре кнопки Command1 это выглядит так:

Option Explicit
Private Declare Function GetDesktopWindow Lib «user32» () As Long

Private Sub Command1_Click()
‘объявляем переменную, в которую функция возвратит хендл десктопа
Dim HandleDesktop As Long
‘используем функцию
HandleDesktop = GetDesktopWindow()
‘выводим значение хендла десктопа в Text1
Text1 = HandleDesktop
End Sub

Опять-таки повторюсь, хендл не надо присваивать в переменную, здесь это сделано чисто иллюстративно. Если нам нужен хендл десктопа, можно сразу, вместо хендла использовать функцию GetDesktopWindow.

Мы, например, можем получить разрешение экрана. Конечно, это можно сделать и внутренними возможностями VB (объект Screen), но тем не менее. Для этого используем функцию GetWindowRect. С помощью этой функции мы на самом деле можем получить размеры окна. А размер окна Desktop собственно и есть разрешение экрана. Создадим новый exe-проект, положим на форму Label1 и Command1, в процедуре которой и будем писать код. Создавать стандартный модуль опять-таки не будем.

‘Сперва в разделе Declaration объявим функцию для определения хендла десктопа:
Option Explicit
Private Declare Function GetDesktopWindow Lib «user32» () As Long
‘и нашу функцию для определения размеров прямоугольника
Private Declare Function GetWindowRect Lib «user32» ( ByVal hwnd As Long , lpRect As RECT) As Long

Здесь, как мы видим, требуется структура RECT, в которую возвращаются размеры окна. В предудущей главе мы уже использовали структуру POINTAPI. Наша новая структура RECT тоже очень нужная структура, и мы разберем ее поподробней, но сначала объявим в форме:

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Итак в структуру входят четыре поля, из которых первые два Left и Top определяют координаты первого угла прямоугольника, а два других Right и Bottom — противоположного. Совсем необязательно первый угол будет верхним левым. На самом деле он может быть и внизу и справа. Координаты его могут быть и положительными и отрицательными, т.е. реально все зависит, как данные будут прописаны в структуру, так как расположение противоположных углов выбирается условно.
Кроме того имеется еще один нюанс: точка, определенная полями Right и Bottom сама не входит в прямоугольник, а выдвинута из него на 1 пиксель. Из это вытекает, что ширина и высота прямоугольника вычисляется простым вычитанием (если первый угол — верхний левый, т.е. нормальная ситуация):
Ширина = .right — .left
Высота = .bottom — .top
или их модулей (абсолютных величин), если прямоугольник как бы вывернутый. А кроме того прямоугольник вообще может не содержать ни одного пиксела, т.е. быть пустым. На нижеследующим рисунке показана типичная экранная система координат. На ней красным обозначено классическое расположение точек углов прямоугольника:

Однако может быть, например и наоборот (показано голубым цветом). Все эти сведения нам несомненно понадобятся в будущем.

Вернемся к нашему коду. Дальнейший код будем писать в процедуре кнопки Command1:

Private Sub Command1_Click()
‘объявим переменную для возвращаемого значения функции GetWindowRect
Dim ddd As Long
‘и переменную как RECT для структуры нашего десктопа
Dim SizeScreen As RECT
‘используем функциюGetWindowRect, причем в ней вместо хендла десктопа сразу применяем функцию GetDesktopWindow
ddd = GetWindowRect (GetDesktopWindow(), SizeScreen)
‘выводим готовый результат на экран
Label1 = «Разрешение » & SizeScreen.Right & » x » & SizeScreen.Bottom
End Sub

Если что не так, скачать этот малюсенький код можно вверху страницы.

Что такое код getdesktopwindow

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Старший модератор)]

Лучшие эксперты в этом разделе

Gluck
Статус: 7-й класс
Рейтинг: 812
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 459
puporev
Статус: Профессионал
Рейтинг: 270
Перейти к консультации №:

Здравствуйте.
Такая проблема: нужно в отдельном потоке запустить такой код ShellExecute(GetDesktopWindow(), ‘open’, PChar(‘что-то тут’), nil, nil, SW_SHOWNORMAL). Пытался сам разобраться, не получилось. Так что если нетрудно исходничек с комментариями.

Состояние: Консультация закрыта

Здравствуйте, Dimon007!
Информацию о потоках Вы можете найти здесь:
http://uchenik.vofka.ru/index.php?dpt=3&C > http://callipso.bestcode.org/delphi/artical/num2.html

Консультировал: Савенко Вадим Иванович
Дата отправки: 16.07.2006, 07:40

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Здравствуйте, Dimon007!
Для запуска внешней программы, для посылки письма или для создания ссылки на сайт вам понадобиться всего одна функция ShellExecute, которая описывается в модуле ShellAPI — не забудьте подключить его в uses.

Этой функции нужно указать несколько параметров:

Дескриптор родительского окна
Выполняемое действие. Этот параметр может принимать следующие значения «open», «print», «explore» — соответственно открытие, печать или исследование. Можно указывать nil — тогда будет выполняться действие по умолчанию — «open».
Имя файла или папки, или e-mail, или URL
Параметры
Каталог по умолчанию
Способ вывода окна. В качестве значения можно указать:
SW_HIDE Скрывает окно и активизирует другое.
SW_MAXIMIZE Разворачивает окно.
SW_MINIMIZE Сворачивает окно.
SW_RESTORE Активизирует и выводит окно. Если окно было развёрнуто или свёрнуто — восстанавливает исходный размер и позицию.
SW_SHOW Активизирует и выводит окно с его оригинальным размером и положением.
SW_SHOWDEFAULT Активизирует с установками, заданными в структуре STARTUPINFO, которая была передана при создании процесса приложением запускающим нужную программу.
SW_SHOWMAXIMIZED Выводит окно в развёрнутом виде.
SW_SHOWMINIMIZED Выводит окно в виде пиктограммы на панели задач.
SW_SHOWMINNOACTIVE Выводит окно в свёрнутом виде на панели задач и не передаёт ему фокус ввода, т.е. окно, которое до этого было активно остаётся активно по прежнему.
SW_SHOWNA Отображает окно в его текущем состоянии. Активное окно остаётся активным по прежнему.
SW_SHOWNOACTIVATE Выводит окно в его последнем положении и с последними используемыми размерами. Активное окно остаётся активным по прежнему.
SW_SHOWNORMAL Выводит окно. Если оно было свёрнуто или развёрнуто — восстанавливает его оригинальные размеры и позицию.

Примеры:
// Запуск файла
ShellExecute(Handle, nil, ‘c:\windows\calc.exe’, nil, nil, SW_SHOW);

// Просмотр каталога
ShellExecute(Handle, nil, ‘c:\windows’, nil, nil, SW_SHOW);

// Ссылка на сайт
ShellExecute(Handle, nil, ‘http://www.site.ru’, nil, nil, SW_SHOW);

// Послать E-mail
ShellExecute(Handle, nil, ‘mailto:DelphiWorld@mail.ru’, nil, nil, SW_SHOW);

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Из MSDN:
HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);

Соответственно 3-й параметр это файл или папка которую вы хотите открыть.
Пример тоже из MSDN:
To open a folder, use either of the following calls:
ShellExecute(handle, NULL, path_to_folder, NULL, NULL, SW_SHOWNORMAL);
or
ShellExecute(handle, «open», path_to_folder, NULL, NULL, SW_SHOWNORMAL);
To explore a folder, use:
ShellExecute(handle, «explore», path_to_folder, NULL, NULL, SW_SHOWNORMAL);
To launch the Shell’s Find utility for a directory, use:
ShellExecute(handle, «find», path_to_folder, NULL, NULL, 0);

Консультировал: Степанов Сергей Игоревич
Дата отправки: 16.07.2006, 20:44

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Непонятно, как это «в отдельном потоке», если я не ошибаюсь, выполняя эту функцию вы открываете программу, а для неё в системе выделяется один (или больше) потоков.

К потоку вашей программы, вызывающей эту функцию вроде как не имеет отношения, или не прав?

Консультировал: Антонов Никита Вячеславович
Дата отправки: 16.07.2006, 21:46

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Склад программиста. C C++ Pascal Java и Assembler Исходники

Паскаль исходники. Паскаль программы. Pascal исходники. Pascal программы. С программы исходники. Исходники ассемблер. Ассемблер задачи. Си программы. Исходники Паскаль. Исходники C. Исходники Си. Си программы. Си исходники. Си задачи. Паскаль задачи. Задачи на паскале. Задачи по паскале. Решить задачу по паскалю. Бесплатные исходники. Скачать бесплатно исходники. Бесплатные программы. Исходники C++, исходники СИ++. Скачать бесплатно исходники. Исходники бесплатно. Java исходники. Java классы.

разница между GetDesktopWindow () и HWND_DESKTOP

November 2020

2.4k раз

Там есть функция Win32 API, GetDesktopWindow() , которая возвращает дескриптор окна рабочего стола.

И есть еще один — HWND_DESKTOP макро. Я не мог найти официальную информацию в MSDN, но он находится в WINUSER.H

Итак, что же между ними разница?

1 ответы

HWND_DESKTOP используется только MapWindowRect() для указания с помощью координат экрана, как описано в MSDN . Вы заметите , его значение равно NULL, который также перечислены там. Я предполагаю , что HWND_DESKTOP пришел первым.

Конечно, действительные окна не могут быть NULL для реального, так HWND_DESKTOP это не ручки окна рабочего стола. Хотя я не знаю ни одного реального хороших вещей , которые вы можете сделать с ним, надлежащим образом , чтобы получить дескриптор окна рабочего стола является с этой функцией.

(Для чего это стоит, пример для GetDesktopWindow() использует возвращенный дескриптор для размещения диалогового окна на экране. Я не знаю , если текущее предпочтение использовать рабочую область текущего монитора вместо . )

GetDesktopWindow

Описание: function GetDesktopWindow: HWnd;

Считывает описатель окна окна pабочей области Windows.

Возвpащаемое значение:

Идентификатоp окна pабочей области Windows. функция находится в файле user32.dll

GetDeviceCaps

Описание: function GetDeviceCaps(DC: HDC; Index: Integer): Integer;

Считывает с дисплея хаpактеpную для устpойства инфоpмацию.

Паpаметpы:

DC: Идентификатоp контекста устpойства.

Index: Возвpащаемый элемент. См. pаздел «Возможности устpойства» в главе 1.

Возвpащаемое значение:

Нужное значение элемента. функция находится в файле gdi32.dll

Что такое код getdesktopwindow

Итак, друг мой, снова засучим рукава и своей грубой мозолистой рабоче-крестьянской рукой полезем в кишочки Windows. Мы гимназиев не кончали, и не будем делать умного лица и говорить непонятных слов. Открываем VB и объявляем функции.
Но прежде чем продолжать измываться над API, скажу пару слов о том, что всем и так известно — об иерахии окон, т.е. об отношении окон друг к другу (типа: кто здесь главный). Может не совсем к месту, но я давно нарисовал картиночку с окнами и ужас как хочу ее куда-нибудь влепить.
Ну так вот. Во-первых, самое главное окно, специфическое окно это — Desktop — т.е. наш экран монитора — там где ты любишь ставить свои дурацкие обои, где висят иконки и на который выскакивает ScreenSaver в самый неподходящий момент.

Думаю, я не смогу поразить тебя следующими заявлением:
Окно может иметь дочерние и родительские окна.
Посмотрим на все ж на мою картиночку — рисунок 5.

Для окна 1 окна 3 и 4 являются дочерними, поскольку они физически находятся внутри этого окна. А окно 1 для них является родительским. Окно 5 тоже имеет родителем окно 1. Но оно находится в другом месте экрана и называется собственным. Окна, которые не имеют родителей (окно 1 и окно 2) называются окнами верхнего уровня. Кроме того они находятся на одном уровне иерархии, поэтому являются соседями. Окна 3 и 4 — тоже соседи. А по отношению к Десктопу окна 1 и 2 являются дочерними. Все это будет важно при наших попытках работать с окнами, потому что ряд API-функций конкретно предназначены для нахождения окна, исходя именно из его иерархического положения.

В принципе, окна 1 и 2 на самом деле являются дочерними окнами к десктопу. Для чего я это говорю. Часто поиск хендла окна начинается именно с десктопа — специфического окна, хендл которого всегда под рукой.
Итак, поскольку десктоп всегда под рукой, то искать его не надо. Чтобы определить хендл десктопа, надо просто объявить и использовать функцию GetDesktopWindow. Например в коде формы (не создавая стандартного модуля) в процедуре кнопки Command1 это выглядит так:

Option Explicit
Private Declare Function GetDesktopWindow Lib «user32» () As Long

Private Sub Command1_Click()
‘объявляем переменную, в которую функция возвратит хендл десктопа
Dim HandleDesktop As Long
‘используем функцию
HandleDesktop = GetDesktopWindow()
‘выводим значение хендла десктопа в Text1
Text1 = HandleDesktop
End Sub

Опять-таки повторюсь, хендл не надо присваивать в переменную, здесь это сделано чисто иллюстративно. Если нам нужен хендл десктопа, можно сразу, вместо хендла использовать функцию GetDesktopWindow.

Мы, например, можем получить разрешение экрана. Конечно, это можно сделать и внутренними возможностями VB (объект Screen), но тем не менее. Для этого используем функцию GetWindowRect. С помощью этой функции мы на самом деле можем получить размеры окна. А размер окна Desktop собственно и есть разрешение экрана. Создадим новый exe-проект, положим на форму Label1 и Command1, в процедуре которой и будем писать код. Создавать стандартный модуль опять-таки не будем.

‘Сперва в разделе Declaration объявим функцию для определения хендла десктопа:
Option Explicit
Private Declare Function GetDesktopWindow Lib «user32» () As Long
‘и нашу функцию для определения размеров прямоугольника
Private Declare Function GetWindowRect Lib «user32» ( ByVal hwnd As Long , lpRect As RECT) As Long

Здесь, как мы видим, требуется структура RECT, в которую возвращаются размеры окна. В предудущей главе мы уже использовали структуру POINTAPI. Наша новая структура RECT тоже очень нужная структура, и мы разберем ее поподробней, но сначала объявим в форме:

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Итак в структуру входят четыре поля, из которых первые два Left и Top определяют координаты первого угла прямоугольника, а два других Right и Bottom — противоположного. Совсем необязательно первый угол будет верхним левым. На самом деле он может быть и внизу и справа. Координаты его могут быть и положительными и отрицательными, т.е. реально все зависит, как данные будут прописаны в структуру, так как расположение противоположных углов выбирается условно.
Кроме того имеется еще один нюанс: точка, определенная полями Right и Bottom сама не входит в прямоугольник, а выдвинута из него на 1 пиксель. Из это вытекает, что ширина и высота прямоугольника вычисляется простым вычитанием (если первый угол — верхний левый, т.е. нормальная ситуация):
Ширина = .right — .left
Высота = .bottom — .top
или их модулей (абсолютных величин), если прямоугольник как бы вывернутый. А кроме того прямоугольник вообще может не содержать ни одного пиксела, т.е. быть пустым. На нижеследующим рисунке показана типичная экранная система координат. На ней красным обозначено классическое расположение точек углов прямоугольника:

Однако может быть, например и наоборот (показано голубым цветом). Все эти сведения нам несомненно понадобятся в будущем.

Вернемся к нашему коду. Дальнейший код будем писать в процедуре кнопки Command1:

Private Sub Command1_Click()
‘объявим переменную для возвращаемого значения функции GetWindowRect
Dim ddd As Long
‘и переменную как RECT для структуры нашего десктопа
Dim SizeScreen As RECT
‘используем функциюGetWindowRect, причем в ней вместо хендла десктопа сразу применяем функцию GetDesktopWindow
ddd = GetWindowRect (GetDesktopWindow(), SizeScreen)
‘выводим готовый результат на экран
Label1 = «Разрешение » & SizeScreen.Right & » x » & SizeScreen.Bottom
End Sub

Если что не так, скачать этот малюсенький код можно вверху страницы.

Что такое код getdesktopwindow

Это пример программы, которая рисует на DeskTop’e
за курсором мыши.

#include «stdafx.h»
#include

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
<
MSG msg;
POINT Point;
HPEN Pen;
HDC dc;

SetTimer(NULL,NULL,1,NULL);
GetCursorPos(&Point);
int preX = Point.x, preY = Point.y;
dc = GetDC(0); //или dc = GetDC(GetDesktopWindow());

while (GetMessage(&msg, NULL, NULL, NULL))
<
if (msg.message == WM_TIMER)
<
GetCursorPos(&Point);
Pen = CreatePen(PS_SOLID,10,RGB(255,0,0));
SelectObject(dc,Pen);
SetPixel(dc,Point.x,Point.y,RGB(0,0,0)); //рисует точку
MoveToEx(dc,preX,preY,NULL);
LineTo(dc,Point.x,Point.y); // соединяет точки прямой
preX = Point.x;
preY = Point.y;
>
>
return 0;
>

Выхода в программе не предусмотрено

как работать с функцией GetDesktopWindow(); 24.06.01 23:41
Автор: 1 Статус: Незарегистрированный пользователь
как работать с функцией GetDesktopWindow();
могу ли узнав handle of the desktop window к примеру рисовать на рабочем столе?
если да то как это реализовать
[C++] как работать с функцией GetDesktopWindow(); 25.06.01 01:04
Автор: Vital Статус: Незарегистрированный пользователь
> как работать с функцией GetDesktopWindow();
> могу ли узнав handle of the desktop window к примеру
> рисовать на рабочем столе?
> если да то как это реализовать

Это пример программы, которая рисует на DeskTop’e
за курсором мыши.

#include «stdafx.h»
#include

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
<
MSG msg;
POINT Point;
HPEN Pen;
HDC dc;

разница между GetDesktopWindow () и HWND_DESKTOP

November 2020

2.4k раз

Там есть функция Win32 API, GetDesktopWindow() , которая возвращает дескриптор окна рабочего стола.

И есть еще один — HWND_DESKTOP макро. Я не мог найти официальную информацию в MSDN, но он находится в WINUSER.H

Итак, что же между ними разница?

1 ответы

HWND_DESKTOP используется только MapWindowRect() для указания с помощью координат экрана, как описано в MSDN . Вы заметите , его значение равно NULL, который также перечислены там. Я предполагаю , что HWND_DESKTOP пришел первым.

Конечно, действительные окна не могут быть NULL для реального, так HWND_DESKTOP это не ручки окна рабочего стола. Хотя я не знаю ни одного реального хороших вещей , которые вы можете сделать с ним, надлежащим образом , чтобы получить дескриптор окна рабочего стола является с этой функцией.

(Для чего это стоит, пример для GetDesktopWindow() использует возвращенный дескриптор для размещения диалогового окна на экране. Я не знаю , если текущее предпочтение использовать рабочую область текущего монитора вместо . )

Thread: What does GetDesktopWindow get?

Thread Tools
Display
  • Linear Mode
  • Switch to Hybrid Mode
  • Switch to Threaded Mode

What does GetDesktopWindow get?

API GetDesktopWindow is surposed to return the handle to the «Desktop window». I have seen plenty examples that use GetDesktopWindow to modify the desktop window. However,
if I run the following code, the sText contains nothing, and sClass contains «#32769». I am using Win2000.

Private Sub Form_Load()
Dim h As Long, r As Long
Dim sText As String * 256, sClass As String * 64

h = GetDesktopWindow
r = GetWindowText(h, sText, 256)
r = GetClassName(h, sClass, 64)
Label2.Caption = sClass
Label1.Caption = sText

Anything wrong with this program?

A spy program shows that the desktop has 3 windows:

Class Name Window Text

SysListView32
SHELLDELL_DefView
Progman Program Manager

Which of these windows do I get from a GetDesktopWindow call?

Another question. If I enumerate windows, how do I know I have reached the desktop? One of the class names above?

Илон Маск рекомендует:  Стандартный элемент управления commandbutton
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL