Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 14.12.2014, 21:58   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

А, правой рукой к левому уху.
http://support.microsoft.com/kb/130510/ru
Сильно не вникал, но по-моему и через параметр этого можно добиться
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.12.2014, 22:19   #12
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,103
По умолчанию

а можно еще вин + e нажать
p51x вне форума Ответить с цитированием
Старый 15.12.2014, 08:22   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Цитата:
но по-моему и через параметр этого можно добиться
Угу. И использовать ShellExecute с параметром "open".
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.12.2014, 17:39   #14
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,534
По умолчанию

я же сказал, что открыть новое окно и искать его хэндл - не вариант, я же писал выше. комбинации клавиш я знаю и так.
вот, нашёл работающую функцию по определению хэндлов всех дочерних элементов
Код:
var s:PChar;
begin
   h1:=FindWindow(nil,'Компьютер');
   s:=GetMemory(200);
   SendMessage(hw,WM_GetText,200,integer(s));
   ListBox1.Items.Add(IntToStr(h1));
   FreeMemory(s);
   EnumChildWindows(hw,@GetNew,0);
end;
буду её теперь мучать....
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 15.12.2014 в 17:42.
NetSpace вне форума Ответить с цитированием
Старый 15.12.2014, 21:35   #15
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,413
По умолчанию

Цитата:
Сообщение от NetSpace Посмотреть сообщение
мне надо открыть Мой компьютер с выбором дисков за секунду. для этого мне надо в этой адресной строке проводника ввести текст "Компьютер" и виртуально нажать ENTER.
К чему такие сложности? Сразу выполнить ShellExecute с параметром в виде нужного диска и папки:
Код:
ShellExecute 0, "", "explorer.exe", " c:\Program Files", "C:\", SW_SHOWNORMAL
Сразу откроется проводник на нужной папке.
kvitaliy вне форума Ответить с цитированием
Старый 15.12.2014, 21:39   #16
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,413
По умолчанию

Искать хендл запущенного проводника не надо - его возвратит GetForegroundWindow(), т.к. он будет в фокусе после запуска.
kvitaliy вне форума Ответить с цитированием
Старый 15.12.2014, 21:53   #17
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,534
Радость

Всем спасибо за ответы и наталкивания на решение.
решил всё же отлавливать координаты формы и при помощи пролетающей над ней виртуальную мышь считывать хэндл. вкратце, процедура выгдлядит вот так:
Код:
procedure TForm1.Button1Click(Sender:TObject);
var Mn_Hnd,Hnd:HWND;
    pt:TPoint;
begin
   //типа положение мыши и под ним объект с неизвестным хэндлом
   pt.x:=90;
   pt.y:=40;
   Mn_Hnd:=WindowFromPoint(pt);
   Windows.ScreenToClient(Mn_Hnd,pt);
   Hnd:=ChildWindowFromPointEx(Mn_Hnd,pt,CWP_ALL);
   PostMessage(Hnd,WM_LBUTTONDOWN,0,0);
   PostMessage(Hnd,WM_SETCURSOR,0,MakeLong(HTCLIENT,WM_LBUTTONDOWN));
   PostMessage(Hnd,WM_LBUTTONUP,0,0);
   PostMessage(Hnd,WM_SETCURSOR,0,MakeLong(HTCLIENT,WM_LBUTTONUP));
   SetWindowPos(h1,HWND_TOP,0,0,Round(Screen.Width/2),Screen.Height-300,SWP_SHOWWINDOW);//фокус окна
   Clipboard.AsText:='Компьютер';
   keybd_event(vk_control,0,0,0);//вставляем текст в окно -> CTRL+V
   keybd_event(86,0,0,0);
   keybd_event(86,0,KEYEVENTF_KEYUP,0);
   keybd_event(vk_control,0,KEYEVENTF_KEYUP,0);
   keybd_event(13,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);//ENTER
   keybd_event(13,0,KEYEVENTF_EXTENDEDKEY,0);
   keybd_event(13,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
end;
работает быстрее даже, чем ожидал!
тему можно закрывать.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 15.12.2014 в 22:14.
NetSpace вне форума Ответить с цитированием
Старый 19.12.2014, 01:31   #18
Полный 30h
Пользователь
 
Аватар для Полный 30h
 
Регистрация: 10.12.2011
Сообщений: 26
По умолчанию

Цитата:
Сообщение от NetSpace Посмотреть сообщение
на своей форме создал окно Edit1, куда и ввожу этот хэндл. Далее по коду посылаю ему сообщение, чтоб поменять текст.
Код:
SendMessage(HWND(Edit1.Text),WM_SETTEXT,0,Integer(PChar('Мой текст')));
не реагирует...
Чет может не догоняю, в ассемблере как то так
invoke GetDlgItem,[hwnd],id ; получить хэндл контрола окна в eax
invoke SendMessage,eax,WM_SETTEXT,0,text ; отослать текст контролу
т.е. изначально из ресурсов я знаю id (номер кнопки) по нему узнаю хендл функцией GetDlgItem, а уже полученый хэндл пихаю в SendMessage
Меня постоянно преследуют умные мысли, но я быстрее!

Последний раз редактировалось Полный 30h; 19.12.2014 в 01:34.
Полный 30h вне форума Ответить с цитированием
Старый 19.12.2014, 15:24   #19
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,534
По умолчанию

я ассемблер трогал только пару раз в редких случаях: когда искал серийный номер процессора и жёсткого диска, пару лет назад. я уже перебрал 4 решения и выбрал для себя быстрый вариант.
мне компонент Edit был нужен, чтобы видеть, КАКОЙ именно хэндл я отсылаю в функцию. сейчас я от всех промежуточных визуальных заморочек избавился
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 19.12.2014, 15:39   #20
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,534
По умолчанию

Спасибо за интересную функцию. очень удобна!
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме от 7000 рублей в месяц



Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какое имя у окна Оперы? [ Получить хэндл ] malor Visual C++ 2 29.03.2012 23:23
Как считать текст из Internet Explorer_Server зная только его Хэндл? ivancoff Работа с сетью в Delphi 0 30.10.2011 23:37
получить хэндл окна по координатам Slippy Win Api 1 24.08.2011 06:47
хэндл окна по PID процесса? Johnson Win Api 1 16.12.2010 16:05
хэндл файла sd13 Win Api 6 25.05.2008 22:42


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Скидки на курсы GeekBrains 40%, выбирайте программу для себя