HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #5301  
Старый 24.12.2009, 10:14
-CEREBRUM-
Новичок
Регистрация: 20.11.2009
Сообщений: 11
Провел на форуме:
88419

Репутация: 0
Отправить сообщение для -CEREBRUM- с помощью ICQ
По умолчанию

Привет всем! Всех с наступающим новым годом!!! Задача: некоторая программа должна реагировать на события от мыши, глобально, например, при передвижении мыши по экрану (или клике в любой области экрана) должно происходить какое-либо действие (например, запись координат в файл или т.п.). Как это реализовать на с++ winapi? обязательно ли нужен хук или есть другие варианты? может, у кого-то кусочки кода есть? (событие может быть и от клавы, например, нажатие любой клавиши!)

Последний раз редактировалось -CEREBRUM-; 24.12.2009 в 10:19..
 
Ответить с цитированием

  #5302  
Старый 24.12.2009, 11:04
patcher
Познающий
Регистрация: 15.12.2009
Сообщений: 81
Провел на форуме:
393444

Репутация: 24
Отправить сообщение для patcher с помощью ICQ
По умолчанию

Цитата:
Сообщение от НTL  
Как мне на Delphi сделать прогу которая бы висела в процессах (То есть без формы) и спокойно выполняла свою дела? Если создать Console Application, то будет висеть окно терменала...

ПС, пока писал пост, подумал что если в Console Application запустить поток, то может быть терминальное окно уйдет?
На мой взгляд у тебя два выхода - либо прятать форму, либо создавать приложение без форм.

В первом случае производим такие действия с фомой:
>BorderStyle = bsNone
>Color = clSkyBlue
>TransparentColor = True
>TransparentColorValue = clSkyBlue>
>На событие OnShow пишем такой код:
Код:
ShowWindow(Application.Handle, sw_Hide);
Во втором случае:
>Создаем ConsoleApplication
>Удаляем (Стираем после program Project1) директиву {$APPTYPE CONSOLE}
 
Ответить с цитированием

  #5303  
Старый 24.12.2009, 11:13
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

2 -CEREBRUM-
<brainfuck>
ты читать умеешь?
>>> Как это реализовать на с++ winapi? <<
Нахера ты это кинул в теме про делфи и паскаль? Если есть прекрепленная тема для этих языков.
</brainfuck>

Вообще такие вещи делаются через установку ловушек (SetWindowsHookEx )
Но если тебе нужны координаты, то через определенное время просто получай координаты мышки (GetCursorPos). К примеру через цикл с паузой с маленьким интервалом ожидания или через таймер. И если координаты изменились, то сохрани их в файл.

Если юзать SetWindowsHookEx то можно заюзать ловушку WH_JOURNALRECORD - для ней даже DLL писать не надо.
Если юзать ловушку WH_MOUSE то нужна DLL.

в 5005 статей по делфи есть статья - Создание мышиного перехватчика
и там всё написано на winapi так что написать это на С++ несоставит труда
 
Ответить с цитированием

  #5304  
Старый 24.12.2009, 11:18
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

2 patcher ппц ты жжеш. Если нужно скрыть форму, то ты выбрал самый жестокий вариант, который дает наибольшую нагрузку на ОС (за счет прозрачности)
Такие вищи решаются намного проще.
в файле проекта (*.dpr) нужно дописать Application.ShowMainForm := false; перед Application.Run;

пример :
Код:
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.ShowMainForm := false; // ВОТ ЭТО НУЖНО ВПИСАТЬ 
  Application.Run;
Ну а если форма не нужна, то можно или консольный проект с убранной директивой что это консольная прога. Или создать обычный проект, удалить все формы и в dpr файле убрать всё лишнее. Но первый вариант проще )

Последний раз редактировалось slesh; 24.12.2009 в 11:22..
 
Ответить с цитированием

  #5305  
Старый 24.12.2009, 11:43
-CEREBRUM-
Новичок
Регистрация: 20.11.2009
Сообщений: 11
Провел на форуме:
88419

Репутация: 0
Отправить сообщение для -CEREBRUM- с помощью ICQ
По умолчанию

Цитата:
Сообщение от slesh  
Нахера ты это кинул в теме про делфи и паскаль?
Сорри, по невнимательности.
Цитата:
Сообщение от slesh  
Если юзать SetWindowsHookEx то можно заюзать ловушку WH_JOURNALRECORD - для ней даже DLL писать не надо.
Спасибо, то что надо!
 
Ответить с цитированием

  #5306  
Старый 24.12.2009, 11:54
a1ertso
Новичок
Регистрация: 16.12.2009
Сообщений: 29
Провел на форуме:
101927

Репутация: 0
По умолчанию

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

Код:
PROGRAM Project1; 
{$APPTYPE CONSOLE} 
uses 
SysUtils; 

CONST 
n=9; // количество элементов массива 
label prog1,prog2,ASD ; 

TYPE 
ar=array[1..n] of real; // объявление типа массива 
VAR 
a:ar; // исходный массив А 
s:real; // сумма отрицательных элементов 
i,ppp,m:integer; // счетчик элементов 
begin 

Writeln('Press 1 to program #1'); 
Writeln('Press 2 to program #2'); 
readln(ppp); 
if ppp=1 then goto ASD; 
begin 
if ppp=2 then goto prog2; 
// Ввод исходных данных 
ASD: WriteLn('Type ', n, ' real elements of array:'); 
for i:=1 to n do 
Read(a); 
writeln; 
// Выполнение задачи 
s:=0; m:=0; // начальное значение суммы 
for i:=1 to n do // цикл перебора элементов массива 
if (a>0) and (m<5) 
then // выборка отрицательных элементов 
begin 
s:=s+a; // суммирование 
m:=m+1; 
end; 
// Вывод результата 
if s=0 then 
WriteLn('Нет положительніх єлементов') 
else 
WriteLn(' S=',s:8:4); 
WriteLn('***** Press <enter> to finish *****'); 
Readln; // задержка экрана 
Readln; 
end; 
end.

Последний раз редактировалось slesh; 24.12.2009 в 14:25.. Причина: [code][code]
 
Ответить с цитированием

  #5307  
Старый 24.12.2009, 13:51
n1ghtstalker
Познающий
Регистрация: 28.09.2008
Сообщений: 65
Провел на форуме:
152084

Репутация: 8
По умолчанию

Эм товарищ массив тогда по задаче должен быть двумерный,а у вас одномерный.
Для нахождения мин элемента сравниваете по строчно элементы,а потом в новый одномерный массив записывайте мин элемент.
В новом цикле если a[i,j]=b[i] then a[i,j]:=j; где j соответственно столбец.
 
Ответить с цитированием

  #5308  
Старый 24.12.2009, 15:17
wolmer
Постоянный
Регистрация: 12.05.2009
Сообщений: 395
Провел на форуме:
4761503

Репутация: 229
По умолчанию

Цитата:
Сообщение от TrueBit  
Пытаюсь разобраться в winsock.
Возникла такая проблемка
есть кусок кода:
PHP код:
addr.sin_family:=AF_Inet;    
addr.sin_port:=htons(80);   
addr.sin_addr.S_addr:=inet_addr('127.0.0.1');
Err(Connect(S,addr,SizeOf(TSockAddr))); 
этот код работает когда на одном ip один сайт,
а как быть если на одном ip не один сайт?
ведь при заходе на этот ip на сайт не попадаешь
Во первых, мы соед. с сервером но не с сайтом, т.е. производится функция коннекта к серверу (а именно к порту сервера)(но не к сайту), к примеру мы приконнектились и хотим чтобы сервер нам выдал содержимое определенной страницы (в html виде естественно ), определенного сайта.
Тогда пишем так (я забежал чуть вперед чтобы было понятно):
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 sock:tsocket;
 addr:sockaddr_in;

 sendstring:string;
 sendbuffer, recvbuffer:array [0..4095] of char;

 dsize:dword;
begin
 sock:=socket(af_inet, SOCK_STREAM, 0); //Указываем что хотим работать с TCP
 addr.sin_family:=af_inet;
 addr.sin_addr.S_addr:=inet_addr('81.177.9.119');//Ip тачки где расположен сайт gamecs.net
 addr.sin_port:=htons(80);
 if connect(sock, addr, sizeof(addr))=0 then //В случае если успешно подкл. к порту то...
  begin
    Showmessage('Соед. есть! Посылаем данные');
    sendstring:='GET http://gamecs.net/forum/index.php? HTTP/1.0'+#13#10+
                //Говорим мол нам нужна страница broadcast.xml
//Тут даем знать серверу какой нам нужен сайт
'User-Agent: Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.20'+#13#10+
'Host: gamecs.net'+#13#10+
'Cookie: pass_hash=aa1b56893b171c26e306a653c4074af1; session_id=6535fe43f9b89af027382d5c00ff2790; __utma=172773923.'+
'2094703955.1261652832.1261652832.1261652832.1; __utmb=142773923; __utmc=142773923; __utmz=142773923.1261652832.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)'+#13#10+
'Cookie2: $Version=1'+#13#10+
'Connection: Keep-Alive'+#13#10+#13#10;
    CopyMemory(@sendbuffer, pchar(sendstring), length(sendstring));
    send(sock, sendbuffer, sizeof(sendbuffer), 0);

    repeat
      dsize:=recv(sock, recvbuffer, 4095, 0);
      memo1.lines.text:=memo1.lines.text+recvbuffer;
    until (dSize = 0) or (dSize = SOCKET_ERROR);
    //Принимаем полный HTML пакет
    //Правда там всякая фигня в конец дописывается но лень сейчас дореализовывать этот момент
  end
 else
  begin
    Showmessage('Соед. нету!');
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 ws:wsadata;
begin
 WSAStartup($101, ws);
end;
Если что не понятно -> спрашивай
(у gamecs.net тоже есть соседнии сайты)
 
Ответить с цитированием

  #5309  
Старый 24.12.2009, 18:37
Thenno
Участник форума
Регистрация: 03.07.2009
Сообщений: 151
Провел на форуме:
638378

Репутация: 41
Отправить сообщение для Thenno с помощью ICQ
По умолчанию

Цитата:
Сообщение от НTL  
Как мне на Delphi сделать прогу которая бы висела в процессах (То есть без формы) и спокойно выполняла свою дела? Если создать Console Application, то будет висеть окно терменала...
Собственно, как и говорил slesh. File->new->other->console application.
Удаляем строчку {$APPTYPE CONSOLE} - так не будет показываться черное окно. Далее организуем бесконечный цикл, чтобы программа висела в памяти. Фленов в "Delphi глазами хакера" приводил такой вариант:

Код:
while GetMessage (Msg, HInstance, 0, 0) do
    begin
      TranslateMessage(msg);
      DispatchMessage(msg);
      //где-нибудь тут пишется свой код
    end;
Но у меня на машине этот способ безбожно тормозил и грузил процессор на 100%, поэтому я делаю так:

Код:
while GetMessage (Msg, HInstance, 0, 0) do
    begin
      TranslateMessage(msg);
      DispatchMessage(msg);
      //где-нибудь тут пишется свой код
      Sleep(100);
    end;
Может, можно делать как-то более правильно, но я честно не знаю как. Да и в принципе, меня так вроде устраивает.
 
Ответить с цитированием

  #5310  
Старый 24.12.2009, 20:07
Vasek13
Новичок
Регистрация: 13.05.2009
Сообщений: 12
Провел на форуме:
533925

Репутация: -4
По умолчанию

Помогите с задачкой
Вводить числа с клавиатуры пока их не станет больше пяти и не попадётся число 100

Вот написал но что то ошибку пишет
Program x3;
VAR
integer:x,i;
Begin
i:=0;
while( i>=5) and (x=100) do
begin
readln(x);
inc(i);
end;
end.

В чем ошибка подскажите плз
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[jQuery] - Задай вопрос, получи ответ Isis PHP 62 25.12.2009 03:25



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ