Вы не вошли.
Страницы 1
Вообщем такая проблема, (хотя знаю что спрашиваю не на том сайте)
Нужно из программы написанной в С++Builder нажать на кнопку программно.
т.е. написать какую нибудь функцию, которая "виртуально нажимала бы" клавишу (например F12)
Просто есть программа которая читает текст с буфера, в буфер слить данные в С++ не проблема. Только данные это прога читает когда нажимаем F12, как это сделать программно.
Вне форума
Для этого используется функция виндовского АПИ
LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
hWnd нужного окна (того, которое принадлежит приложению, требующему нажатию кнопки на клаве) можно найти с помощью функции
HWND FindWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName
);
SendMessage вызывать нужно дважды:
сначала с аргументом Msg = WM_KEYDOWN,
а затем с WM_KEYUP - таким образом получим эмуляцию нажатия и отпускания кнопки.
Обращайтесь к статьям МСДНа по упомянутым выше функциям и сообщениям. Проблем возникнуть не должно.
Если будет что-то непонятно, или не найдете МСДН, обращайтесь.
Успехов!
Вне форума
Дефайны некоторых клавиш, писать в 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
И т.д. по аналогии
в качестве lParam для WM_KEYDOWN сойдет 0.
Как определить дескриптор?
Запускаете любой монитор процесов вашей системы, в котором показаны имена класов окон и их заголовки, вставляете эти данные в файндвиндоу и получаете дескриптор. Если получили нул - значит или окна нет в системе, или в чем-то ошиблись... Например, не заметили в заголовке окна пробела... Можно обойтись и без всей информации, методов довольно много.
Кстати, дескрипторы окон - это целые числа. Например, можете в цикле вызывать GetWindowText, у которого в качестве hWnd будет параметр цикла - целое число, например, от 0 до 60000, правда, преобразованное к типу оконного дескриптора. Сравнивайте получаемый текст с заголовком нужного окна (или частью его), при совпадении - считай, вот и нашелся нужный дескриптор.
Метод очень прост, позволяет находить дескрипторы чего угодно (в том числе и кнопок в скрытых дочерних окнах, позволяя их активировать и нажимать) одним махом, но, ясное дело, системой не приветствуется.
Просто читайте МСДН и пробуйте - тогда все получится.
Дольше писать вопросы на форумах и ждать на них ответы, чем найти собственное решение.
Вне форума
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
Надеюсь, больше вопросам по данной теме взяться просто неоткуда.
Вне форума
Да я с этим уже разодрался давненько, на своей страничке открыл раздел С++Builder, пока только две темы одна по сообщениям другая по DLL,
на следующей неделе добавлю по созданию компонентов и технологии DDE,
если хочшь можешь что-то написать, на страничке выложу, например про сервисы.
Вне форума
Спасибо за предложение.
Загляни на wasm.ru
там действительно много
по-настоящему полезной и интересной инфы,
даже той, которую не пишут ни в каких официальных хэлпах и туториалах.
Вне форума
Страницы 1
[ Сгенерировано за 0.090 сек, 7 запросов выполнено - Использовано памяти: 592.13 Кбайт (Пик: 642.49 Кбайт) ]