Radiohobby Forum

Интернет конференция журнала "Радиохобби"

Вы не вошли.

Объявление

Подписка на новые материалы от Николая Сухова - ролики, схемы, модели, онлайн конференции, консультации, чат.

Внимание! Почта в доменах Яндекс и Mail.ru не будет работать в профилях форумчан, из-за введённых правительством Украины санкций против этих компаний. Всем, кто ранее использовал подобную почту, для сохранения прежней функциональности форума, рекомендуется её поменять.

Огромная просьба, заливать тематические картинки и файлы в личные файловые каталоги на форуме, чтобы они не потерялись, со временем!

Ссылка "Загрузки" находится справа внизу формы набора сообщения.

Подписка на журнал "Радиохобби" прекращена. Подробности. Форум же - продолжает свою работу.

#1 02.11.2004 09:59:20

Sugar
Участник
Откуда: Луганская, Донецкая обл.
Здесь с 19.05.2004
Сообщений: 190
Сайт

С++Builder

Вообщем такая проблема, (хотя знаю что спрашиваю не на том сайте)
Нужно из программы написанной в С++Builder нажать на кнопку программно.
т.е. написать какую нибудь функцию, которая "виртуально нажимала бы" клавишу (например F12)
Просто есть программа которая читает текст с буфера, в буфер слить данные в С++ не проблема. Только данные это прога читает когда нажимаем F12, как это сделать программно.

Вне форума

#2 02.11.2004 11:02:38

PM
Новичок
Здесь с 07.09.2004
Сообщений: 19

Re: С++Builder

Для этого используется функция виндовского АПИ
LRESULT SendMessage(
    HWND hWnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
);

hWnd нужного окна (того, которое принадлежит приложению, требующему нажатию кнопки на клаве) можно найти с помощью функции
HWND FindWindow(
          LPCTSTR lpClassName,
          LPCTSTR lpWindowName
);

SendMessage вызывать нужно дважды:
сначала с аргументом  Msg = WM_KEYDOWN,
а затем с WM_KEYUP  - таким образом получим эмуляцию нажатия и отпускания кнопки.

Обращайтесь к статьям МСДНа по упомянутым выше функциям и сообщениям. Проблем возникнуть не должно.
Если будет что-то непонятно, или не найдете МСДН, обращайтесь.
Успехов!

Вне форума

#3 02.11.2004 12:09:16

Sugar
Участник
Откуда: Луганская, Донецкая обл.
Здесь с 19.05.2004
Сообщений: 190
Сайт

Re: С++Builder

Спасибо

Вне форума

#4 03.11.2004 10:02:14

Sugar
Участник
Откуда: Луганская, Донецкая обл.
Здесь с 19.05.2004
Сообщений: 190
Сайт

Re: С++Builder

По функциям почитал, да толькл вот непонятно, код клавиши( 13 - Enter), куда его записівать.
WPARAM wParam,
    LPARAM lParam
Что в них писать.
И как определить дескриптор окна через FindWindow

Вне форума

#5 04.11.2004 01:58:21

PM
Новичок
Здесь с 07.09.2004
Сообщений: 19

Re: С++Builder

Дефайны некоторых клавиш, писать в  wParam:
VK_LBUTTON (01)
Left mouse button

VK_RBUTTON (02)
Right mouse button

VK_MBUTTON (04)
Middle mouse button (three-button mouse)

VK_RETURN (0D)
ENTER key

VK_F10 (79)
F10 key

VK_F11 (7A)
F11 key

VK_F12 (7B)
F12 key

И т.д. по аналогии smile

в качестве  lParam для WM_KEYDOWN сойдет 0.

Как определить дескриптор?
Запускаете любой монитор процесов вашей системы, в котором показаны имена класов окон и их заголовки, вставляете эти данные в файндвиндоу и получаете дескриптор. Если получили нул - значит или окна нет в системе, или в чем-то ошиблись... Например, не заметили в заголовке окна пробела... smile Можно обойтись и без всей информации, методов довольно много.
Кстати, дескрипторы окон - это целые числа. Например, можете в цикле вызывать GetWindowText, у которого в качестве hWnd будет параметр цикла - целое число, например, от 0 до 60000, правда, преобразованное к типу оконного дескриптора. Сравнивайте получаемый текст с заголовком нужного окна (или частью его), при совпадении - считай, вот и нашелся нужный дескриптор.
Метод очень прост, позволяет находить дескрипторы чего угодно (в том числе и кнопок в скрытых дочерних окнах, позволяя их активировать и нажимать) одним махом, но, ясное дело, системой не приветствуется.
Просто читайте МСДН и пробуйте - тогда все получится.
Дольше писать вопросы на форумах и ждать на них ответы, чем найти собственное решение.

Вне форума

#6 04.11.2004 10:22:57

Sugar
Участник
Откуда: Луганская, Донецкая обл.
Здесь с 19.05.2004
Сообщений: 190
Сайт

Re: С++Builder

Не льзя ли конкретный пример.
В блокноте нужно назать кнопку 1
Монитор процессов, ctrl+alt+del на вкладке процессы есть только имя образа.

Вне форума

#7 17.11.2004 00:32:52

PM
Новичок
Здесь с 07.09.2004
Сообщений: 19

Re: С++Builder

void TForm1::Crack()
{
 
WinExec("wbload.exe",SW_RESTORE);
Sleep(2000);
HWND H;
HWND H1;
char Pch[128];
do{
   H=Handle;
   do{
     H=GetNextWindow(H,GW_HWNDNEXT);
     GetWindowText(H,Pch,128);
     if(CompareText(Pch,"WindowBlinds")==0)
     break ;
   } while(H!=NULL);
   Sleep(50);
   Application->ProcessMessages();
  } while(H==NULL);

if(H!=NULL){
  for(int i=0;i<50000;i++){
    H1=(HWND)(i);
        GetWindowText(H1,Pch,128);
        if(CompareText(Pch,"Continue Unregistered...")==0)
          break ;
   }
   Sleep(50);
   Application->ProcessMessages();

    if(H1==NULL)Close();
    else{
    SendMessage(H1,WM_LBUTTONDOWN,0,0);
    SendMessage(H1,WM_LBUTTONUP,0,0);
    }
  }
  Close();
}

Запускает прогу, ждет загрузку нужного окна, находит в нем кнопку и нажимает ее.
Куда уж подробнее... только подставь нужное.
Ознакомься с такой простой и древней прогой,  поставляемой с любым билдером или делфи, как
\Program Files\Borland\CBuilder6\Bin\ws32.exe
Надеюсь, больше вопросам по данной теме взяться просто неоткуда. wink

Вне форума

#8 17.11.2004 11:39:52

Sugar
Участник
Откуда: Луганская, Донецкая обл.
Здесь с 19.05.2004
Сообщений: 190
Сайт

Re: С++Builder

Да я с этим уже разодрался давненько, на своей страничке открыл раздел С++Builder, пока только две темы одна по сообщениям другая по DLL,
на следующей неделе добавлю по созданию компонентов и технологии DDE,
если хочшь можешь что-то написать, на страничке выложу, например про сервисы.

Вне форума

#9 17.11.2004 14:24:44

PM
Новичок
Здесь с 07.09.2004
Сообщений: 19

Re: С++Builder

Спасибо за предложение. smile
Загляни на wasm.ru
там действительно много
по-настоящему полезной и интересной инфы,
даже той, которую не пишут ни в каких официальных хэлпах и туториалах.

Вне форума

Сейчас в этой теме пользователей: 0, гостей: 1
[Bot] ClaudeBot

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.027 сек, 7 запросов выполнено - Использовано памяти: 592.34 Кбайт (Пик: 642.7 Кбайт) ]