Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.04.24;
Скачать: [xml.tar.bz2];

Вниз

Запуск программы   Найти похожие ветки 

 
OxOTHuK   (2003-02-24 22:10) [0]

как отследить вновь запускаемую программу? узнать путь к ней и хэндл окна?


 
Cobalt   (2003-02-24 22:31) [1]

поиск в инете(Yandex, Google - не важно) - ToolHelp, CreateSnapshot


 
OxOTHuK   (2003-02-25 07:53) [2]

а что это такое? попробовал поискать - нету....
вероятно это можно организовать глобальными хуками, но КАК???


 
UNIVERSAL   (2003-02-25 16:48) [3]

CreateSnapshot - делает снимок всех запущенных процессов. Можешь поставить на таймер, можешь ставить CBT хук.


 
DVM   (2003-02-25 18:38) [4]

program ShellHookDemo;

uses
windows,
messages;

const
RSH_DEREGISTER = 0;
RSH_REGISTER = 1;
RSH_REGISTER_PROGMAN = 2;
RSH_REGISTER_TASKMAN = 3;

HSHELL_ACTIVATESHELLWINDOW = 3;
HSHELL_WINDOWCREATED = 1;
HSHELL_WINDOWDESTROYED = 2;
HSHELL_WINDOWACTIVATED = 4;
HSHELL_GETMINRECT = 5;
HSHELL_REDRAW = 6;
HSHELL_TASKMAN = 7;
HSHELL_LANGUAGE = 8;


var
wc : TWndClassEx; //


 
DVM   (2003-02-25 18:39) [5]

program ShellHookDemo;

uses
windows,
messages;

const
RSH_DEREGISTER = 0;
RSH_REGISTER = 1;
RSH_REGISTER_PROGMAN = 2;
RSH_REGISTER_TASKMAN = 3;

HSHELL_ACTIVATESHELLWINDOW = 3;
HSHELL_WINDOWCREATED = 1;
HSHELL_WINDOWDESTROYED = 2;
HSHELL_WINDOWACTIVATED = 4;
HSHELL_GETMINRECT = 5;
HSHELL_REDRAW = 6;
HSHELL_TASKMAN = 7;
HSHELL_LANGUAGE = 8;


var
wc : TWndClassEx;
MainWnd : HWND;
Mesg : TMsg;
WndListBox:hWnd;
WM_ShellHook:Integer;
xPos,yPos,nWidth,nHeight : Integer;
osInfo:OSVERSIONINFO;

Procedure RegisterShellHook(Wnd:hWnd;n:dword); stdcall;external "shell32.dll" index 181;

function ListBox_AddString(lb : THandle; txt : String) : integer;
begin
Result := SendMessage(lb, lb_addString, 0, integer(pchar(@txt[1])));
end;

function WindowProc(wnd:HWND; Msg : Integer; Wparam:Wparam; Lparam:Lparam):Lresult; stdcall;
begin
if msg=wm_shellhook then
begin
case wparam of
HSHELL_WINDOWCREATED: ListBox_AddString(WndListBox,"Window Created");//
HSHELL_WINDOWDESTROYED: ListBox_AddString(WndListBox,"Window Destroyed");
HSHELL_WINDOWACTIVATED: ListBox_AddString(WndListBox,"Window Activated");
end;
end;
case msg of
wm_destroy :
Begin
postquitmessage(0); exit;
Result:=0;
End;
else Result:=DefWindowProc(wnd,msg,wparam,lparam);
end;
End;


продолжение следует...


 
DVM   (2003-02-25 18:41) [6]

Продолжение

begin
wc.cbSize:=sizeof(wc);
wc.style:=cs_hredraw or cs_vredraw;
wc.lpfnWndProc:=@WindowProc;
wc.cbClsExtra:=0;
wc.cbWndExtra:=0;
wc.hInstance:=HInstance;
wc.hIcon:=LoadIcon(0,idi_application);
wc.hCursor:=LoadCursor(0,idc_arrow);
wc.hbrBackground:=COLOR_BTNFACE+1;
wc.lpszMenuName:=nil;
wc.lpszClassName:="ShellHookDemo";
RegisterClassEx(wc);//


 
OxOTHuK   (2003-02-25 22:23) [7]

Спасибо.... посмотрим....
за комментарии отдельное спасибо... =)


 
universal   (2003-02-26 08:42) [8]

Млин, DVM , коментарии в какой кодировке написаны, а то разобрать не могу, а очень хочется.


 
universal   (2003-02-26 09:11) [9]

А, вообще, пример классный. Только ничего про функцию RegisterShellHook я не нашёл, даже на сайте MSDN. DVM, если не трудно вышли на почту мне энто с комментариями в нормальной (Win Cyrilic) кодировке, плз.


 
universal   (2003-02-26 09:56) [10]

А как получить Handle созданого окна?


 
DVM   (2003-02-26 12:46) [11]

Что с кодировкой случилось не знаю я просто из Aditora текст копировал.
Пример этот вышлю, если надо.

> А как получить Handle созданого окна?

if msg=wm_shellhook then
begin
case wparam of
...
end;
{***** Вот здесь lparam сообщения и есть Handle*****}
Wnd:=lparam;
end;




 
UNIVERSAL   (2003-02-26 15:28) [12]

Спасибо буду ждать письма, а с хендлом окна я уже методом тыка разобрался. А вот чё то вызывая ф-ю GetWindowText, только заголовок не могу получить, почему-то, наверное его ещё нет что ли?


 
DVM   (2003-02-26 16:17) [13]

А хэндл не пустой? Насчет lparam я не проверял, но там по идее должен быть хэндл окна, которое создается/уничтожается.

GetWindowText немного глючная, есть др. способ получить заголовок.

Если хэндл есть, то окно уже создано, т.е. заголовок получить можно.

Я в свое время окна ловил хуком, но не таким, а стандартным, расположенным в dll, но в WinXp так не удавалось отловить создание консольных окон.

Есть еще одна тонкость: этот способ,недокументированный и предназначенный мелкософтом исключительно для своего эксплорера, поэтому желательно выгружать его из памяти.



 
UNIVERSAL   (2003-02-26 16:31) [14]

Нет, не пустой. При присвоении ему (окну) заголовка SetWindowText, прокатывает правда через раз. Мелькает иногда мой заголовок/его заголовок и остается ессно его заголовок.


 
DVM   (2003-02-26 16:42) [15]

Можно попробовать взять текст из окна посылом ему сообщения:

function GetText(Wnd: HWND): string;
var
textlength: Integer;
Text: PChar;
begin
textlength := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0);
if textlength = 0 then Result := ""
else
begin
GetMem(Text, textlength + 1);
SendMessage(Wnd, WM_GETTEXT, textlength + 1, Integer(Text));
Result := Text;
FreeMem(Text);
end;
end;


 
UNIVERSAL   (2003-02-26 17:30) [16]

Спасибо попробую, но думаю ситуация не изменится.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.04.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.009 c
3-76773
alexander_ua
2003-04-04 13:41
2003.04.24
Куда исчезают данные?


7-77185
GROL
2003-03-05 13:50
2003.04.24
XP и стандартные драйверы к матречным принтерам


1-76944
balykovdron
2003-04-12 12:15
2003.04.24
Помогите новичку вызвать поток.


14-77146
Uncle Archi
2003-04-07 20:34
2003.04.24
Арифметика.


3-76861
Zergling
2003-04-08 13:13
2003.04.24
Транзакции в локальных базах данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский