Как узнать handle приложения
Для управления создаваемыми в процессе работы советника графическими объектами средствами WINAPI требуется знать определители этих объектов. Для установления handle основного окна такая возможность предоставлена специальной функцией WindowHandle(. ).
Похоже, что подобной функции для графических объектов не существует или . её не предоставляют в пользование. Но, очень нужно. Или поясните, пожалуйста, как правильно сформировать handle графического объекта. Буду очень благодарен.
Ещё одно дополнение. МТ4 предоставляет оператор ObjectDescription для определения handle объектов всех типов кроме OBJ_TEXT и OBJ_LABEL.
Мои попытки получить дескриптор обыкновенной линии с помощью оператора
не увенчались успехом. В качестве дескриптора объекта с именем "obj_line" Alert не выдаёт ни одного знака - пусто. Вопрос 1: в чём тут дело?
Кроме того, о ператор O bjectDescription имеет тип string, что не вяжется с типом дескриптора объектов от WINAPI (они там целочисленные). Вопрос 2: эти дескрипторы строятся по-разному и не имеют друг к другу отношения?
Понятно, спасибо. Тогда на кой ляд нужна функция ObjectDescription?! Ведь для линий, например, мы всегда будем получать "шиш", поскольку они текст не содержат. Не думаю, что такую "бессмыслицу" допустили разработчики. Что-то здесь не так. Может быть, эту "текстовую подпись у объекта" формирует МТ4, и она действительно не имеет отношения к дескриптору объекта от Windows? И как узнать настоящий "виндосовский" дескриптор объекта? Описание может быть у любого графического объекта. У линии тоже. dokpiknik >>:Понятно, спасибо. Тогда на кой ляд нужна функция ObjectDescription?! Ведь для линий, например, мы всегда будем получать "шиш", поскольку они текст не содержат. Не думаю, что такую "бессмыслицу" допустили разработчики. Что-то здесь не так. Может быть, эту "текстовую подпись у объекта" формирует МТ4, и она действительно не имеет отношения к дескриптору объекта от Windows? И как узнать настоящий "виндосовский" дескриптор объекта?
К дескриптору окна она действительно отношения не имеет. Мало того - я сейчас тут WinSpy даже полазил - все объекты система отрисовывает сама - т.е. окон, их представляющих, а соответсвенно и хендлов для них, попросту нет.
К дескриптору окна она действительно отношения не имеет. Мало того - я сейчас тут WinSpy даже полазил - все объекты система отрисовывает сама - т.е. окон, их представляющих, а соответсвенно и хендлов для них, попросту нет.
Под словом "система" Вы имеете в виду МТ4? Внутренним идентификатором объекта в МТ4 является его имя. Мне бы хватило научиться определять по имени объекта его "свойство выделенности" и менять это свойство (поиск handle объекта - это моя попытка решить эту проблему, а не идея фикс). Как это делается? Ведь каким-то образом управляет всем этим сама система МТ4. Может быть, знает кто-нибудь?
Как можно из своей программы закрыть чужую?
PostThreadMessage(AnotherProg_MainThreadID,WM_CLOSE, 0 , 0 );
PostMessage(AnotherProg_MainWindow,WM_CLOSE, 0 , 0 );
Как можно определить Handle окна,над которым находится мышка?
Автор ответа: rhf
Убиваем активное приложение
Данная функция позволяет завершить выполнение любой активной программы по её classname или заголовку окна.
procedure KillProgram(Classname : string ; WindowTitle : string );
TheWindow := FindWindow(Classname, WindowTitle);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
Как найти окно по неполному названию?
function TForm1.Find(s: string ): hWnd;
buff: array [ 0 .. 127 ] of Char;
Wnd := GetWindow(Handle, gw_HWndFirst);
while Wnd <> 0 do
if (Wnd <> Application.Handle) and
(GetWindow(Wnd, gw_Owner) = 0 ) and
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0 ) then
GetWindowText(Wnd, buff, sizeof(buff));
if pos(s, StrPas(buff)) > 0 then
Wnd := GetWindow(Wnd, gw_hWndNext);
Как перехватывать события, посланные другим приложениям?
Для отслеживания каких-то событий во всей Windows нужно установить ловушку (hook).
Например, такая ловушка может отслеживать все события, связанные с мышью, где бы ни находился курсор. Можно отслеживать и события клавиатуры.
Для ловушки нужна функция, которая, после установки ловушки при помощи SetWindowsHookEx, будет вызываться при каждом нужном событии.
Эта функция получает всю информацию о событии. UnhookWindowsHookEx уничтожает ловушку.
Как вывести результат работы консоли в Memo?
Это пример запуска консольных программ с передачей ей консольного ввода (как если бы он был введен с клавиатуры после запуска программы) и чтением консольного вывода. Таким способом можно запускать например стандартный виндовый ftp.exe (в невидимом окне) и тем самым отказаться от использования специализированных, зачастую глючных компонент.
Как эмулировать нажатия клавиш в другой программе?
Этот модуль включает две процедуры, которые эмулируют популярные Visual Basic процедуры : Sendkeys and AppActivate. SendKeys берет PChar
'> Народ как узнать хендл главного окна процесса? , надо найти главное окно процесса по PID чтобы можно было этот процесс Требуется закрыть процесс для чего надо найти его главное окно а как найти по PID-у главное окно этого процесса чтоб можно было ему послать команду на закрытие?Ну вот, щас напишу пример специально.
Private Declare Function EnumThreadWindows Lib "user32.dll" (ByVal dwThreadId As Long, ByVal lpfn As Long, ByVal lParam As Long) As Long
dwThreadId - где взять индефикатор потока?
lpfn, lParam - че это за параметры?
по ней инфы мало
Private Declare Function PostThreadMessage Lib "user32.dll" Alias "PostThreadMessageA" (ByVal idThread As Long, ByVal msg As Long, ByVal wParam As Long, lParam As Any) As Long
wParam, lParam - это чего за два параметра?
Добавлено 19.08.07, 18:05
Хотя все равно, правильно вызывать EndTask и передавать ей в качестве hWnd хэндл окна. Первый попавшийся со стилем WS_POPUP, хотя точно не скажу
декларацию дай а то в инете чет не нашел, и почему окно должно быть WS_POPUP.
и очень сумневаюсь что любое окно подойдет если я правильно понял эта функция отправляет команду закрытия окна значит если окно не главное то эффект будет такой же как и от SendMessage это окно закроется а процесс незавершится
там только четыре страницы найдено и все на англицком кроме декларации больше нефега нема
Declare Function EndTask Lib "user32.dll" (ByVal hWnd As IntPtr) As Integer
IntPtr - блин и че это за тип переменной ?
мож кто нить напишет как EndTask пользоваться если хендл окна находится в глобальной переменной hwin
Добавлено 20.08.07, 05:56
в яхуу нашол другой вид декларации:
Declare Function EndTask Lib "user32" Alias "EndTask" (ByVal hwnd As Long, _
ByVal nShutDown as Long, ByVal nForce as Long, ) As Long
непонял какова фига там после nForce as Long делает запятая и непонятно че за параметры nShutDown и nForce но без запятой и с нулевыми значениями параметров(nShutDown и nForce) все работает как надо находиш любое окно и после выполнения EndTask программа выполняет штатный выход.
теперь подскажите как правильно декларация должна выглядеть и че кроме хендла за остальные параметры ?
Можно ли это сделать во время загрузки библиотеки, т.е. в функции dlopen()?
Дело в том, что мне нужно знать этот handler уже при инициализации иблиотеки, т.е. в функции _init().
Должно решаться через интерфейс ld.so.
Во фряхе есть /usr/include/link.h, не знаю, как он называтся в линуксе.
Дело не в этом. Дело в том, что делается некая программа, которая создает динамические библиотеки. Библиотеки специфичны, должны инициироваться каждая по-своему, и каждая из них при инициализации должна знать handle, которым потом будет оперировать и пользователь. Библиотеки-то могут использоваться сторониними пользователями.
> Дело не в этом. Дело в том, что делается некая программа, которая > создает динамические библиотеки. Библиотеки специфичны, должны > инициироваться каждая по-своему, и каждая из них при инициализации > должна знать handle, которым потом будет оперировать и > пользователь. Библиотеки-то могут использоваться сторониними > пользователями.
напиши либу типа openlib в которой будут твои функции load_file и unload_file которые будут использовать сторонние пользователи а прога будет генерить "правильные" либы чтобы они правильно работали с твоими load_file и unload_file. и будут эти либы инициироваться по своему .. у каждой свой _init - только разные libname или modulename.
Если все это не подходит то поспешу тебя огорчить .. .so это не .dll из so ты никогда не увидишь символы вызывающей стороны(в винде можно). С другой стороны вызывающая сторона видит как свои так и .soшные символы .. так что .so без работы вызывающей стороны никогда не узнает про тот handle который она держит.
Читайте также:
- Как зарядить яндекс станцию с телефоном
- Почему в приложении инстаграм происходит сбой
- Для приложения системный вызов внешне ничем не отличается от вызова обычной функции языка си
- В чем различие пвтр как самостоятельного документа и пвтр как приложения к коллективному договору
- Что можно отслеживать в приложении segway ninebot