IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Узнать Handle окна по имени файла
сообщение
Сообщение #1


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Привет всем.

Мне нужно узнать хэндл окна. Допустим, запускаю я cmd через ShellExecute, и нужно мне получить её хэндл. Через FindWindow нельзя, т.к. заголовок cmd может быть разный - у некоторых в начале приписывается "Администратор" (видимо, сидят под администратором). Я думаю, можно перебирать все окна и искать по слову cmd в заголовке. Попробовал ф-ю EnumWindows, вот так:

var mypointer:pointer;
t:hwnd;
function MyCallbackFunction(Wnd:HWnd; P: Pointer):Bool; stdcall;
begin
messagebox(0,pchar(GetModuleName(GetClassLong(wnd,GCL_HMODULE))),'',0);
if pos('CMD',uppercase(GetModuleName(GetClassLong(wnd,GCL_HMODULE))))>0 then t:=wnd;
end;

...

shellexecute(0,'open','cmd',0,0,sw_show);
EnumWindows(@MyCallbackFunction, LongInt(MyPointer));
if t=0 then messagebox(0,'dfdf','',0);
...

, и нифига, getmodulename не хочет возвращать имя файла по хэндлу. Помогите, а то меня скоро в гугле как ддос-бота забанят))


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Цитата
Теперь - вопрос на засыпку: а зачем тебе что-то печатать в консоли, да еще созданной через ShellExecute? Если тебе просто нужна консоль, скажем, для вывода, то есть AllocConsole + GetStdHandle, и пиши сколько хочешь в STD_OUTPUT_HANDLE... О том, как запустить процесс и перехватить его вывод написано в DRKB. Так зачем консоль понадобилась?


Ну, мне надо исполнить cmd-команду, но как будто от имени пользователя, через bat-файл не вариант. Короче, я отказался от cmd в пользу окошка Выполнить. Делаю так:

var t,editt,but:hwnd;
...
keybd_event(vk_LWIN,0,0,0);
keybd_event(byte('R'),0,0,0);
keybd_event(byte('R'),0,KEYEVENTF_KEYUP,0);
keybd_event(vk_LWIN,0,KEYEVENTF_KEYUP,0);
t:=findwindow(nil,'Выполнить');
editt:=findwindowex(t,0,'ComboBox','');
but:=findwindowex(t,0,'Button','OK');
...


Окошко находится, ComboBox в нём - тоже, даже получается записать туда строку, а вот кнопка что-то не хочет. Вообще, FindWindowEx ищет на всех дочерних "компонентах" окнА, чей хэндл был передан, или только на основной форме? Просто на Win7 кнопки на какой-то белой полосе, типа TBevel или TPanel, что-то такое. Можно, конечно, сделать EnumChildWindows, чтобы посмотреть все контролы, но может и так можно?

Цитата
создавать процесс через CreateProcess, а потом делать вот так

Ага, мне говорили про такой способ, но я испугался множества входных параметров этой функции smile.gif

Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Unconnected   Узнать Handle окна по имени файла   29.05.2010 21:34
volvo   Кто тебе сказал, что имя модуля - это заголовок? З…   29.05.2010 22:20
Unconnected   Спасибо, это работает. Ещё вопрос, как можно смени…   30.05.2010 3:39
volvo   В чем неработоспособность проявляется? Я вот сдела…   30.05.2010 5:44
Unconnected   раскладка блокнота тут же поменялась на английскую…   30.05.2010 6:02
volvo   А... Ну, так ты бы и говорил, что хочешь работать …   30.05.2010 6:39
Unconnected   Ого, ну и заморочки. Я сейчас попробовал работать …   30.05.2010 13:36
volvo   У тебя будет гораздо больше проблем, чем ты думаеш…   30.05.2010 14:23
Unconnected   Ну, мне надо исполнить cmd-команду, но как будто…   31.05.2010 1:47
volvo   :blink: Эт чего было? Ты что, серьезно вызываешь о…   31.05.2010 3:23
Unconnected   Разобрался, узнал много нового ) Только вот этот к…   31.05.2010 20:13
volvo   Как ни пытался - не получилось у меня, чтоб AV выл…   31.05.2010 22:28
Unconnected   Ага, поставил именно в начале и конце программы - …   1.06.2010 22:11
volvo   Ты про Shell.Application? Вот тут: MSDN -> Shel…   1.06.2010 22:17
Unconnected   Спасибо, в итоге добился, чего хотел :)   2.06.2010 3:35
Unconnected   Volvo, а вот, чисто теоретически, можешь предполож…   3.06.2010 3:13
volvo   Теоретически - могу, такое будет, когда программа …   3.06.2010 3:41
Unconnected   Странно, ведь апи-команды, вызываемые из консоли…   3.06.2010 20:13
volvo   Зато поведение консольного окна отличается от того…   3.06.2010 20:29
Unconnected   Даа, апи сила) Почитал, переделал (коряво, кажется…   4.06.2010 0:45


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 22:56
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name