Карась тут выкладывал контрол для работы с этим протоколом, все исходные коды в архиве... но правда он пишет на VB
ммм VB не очень люблю) хотелось бы на Delphi искал но ничего хорошего не нашел( все нашел) кому надо вот: http://forum.asechka.ru/showthread.php?t=97186 там огромная темка про ето множество реализаций)
KIR@PRO, есть очень хорошая статься (10 уроков) по написанию icq2000 в делфи http://www.delphisources.ru/pages/faq/base/icq2000_1.html . Реализация на компонентах http://www.delphiexpert.ru/view_download.php?id=89 . Так же прочитай, много полезного пишут http://forum.asechka.ru/showthread.php?t=97186
Попробывал сделать с хотки но все бы хорошо но с игрой не работает. Блокнот закрывает. Все закрывает, но как только запускаешь игру - не хочет работать. Вообще ни как не реагирует. В чем может быть дело? подскажите или придется все же делать хук? Тогда помогите с хуком ибо уже неделю не могу сделать. PHP: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Tlhelp32; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; public { Public declarations } end; const hotkey1 = ord ('1'); hotkey2 = ord ('2'); hotkey3 = ord ('3'); hotkey4 = ord ('4'); hotkey5 = ord ('5'); hotkey6 = ord ('6'); hotkey7 = ord ('7'); hotkey8 = ord ('8'); hotkey9 = ord ('9'); hotkey10 = ord('0'); var Form1: TForm1; implementation {$R *.dfm} function KillTask(ExeFileName: string): integer; const PROCESS_TERMINATE=$0001; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; begin result := 0; FSnapshotHandle := CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := Sizeof(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while integer(ContinueLoop) <> 0 do begin if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then Result := Integer(TerminateProcess(OpenProcess( PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0)); ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end; function EnumMiniProc (Wd: HWnd; Param: LongInt): Boolean; stdcall; // Îáÿçàòåëüíî stdcall !!! Begin If Wd<>Form1.Handle then // åñëè ýòî íå íàøà ïðîãðàììà If IsWindowVisible(WD) then // åñëè îêíî âèäèìî If not IsIconic(WD) then // åñëè îêíî íå ñâåðíóòî If isWindow(WD) then // è âîîáùå ýòî - îêíî. ShowWindow(WD, SW_MINIMIZE); // ñâåðíåì åãî. end; procedure TForm1.WMHotKey(var Msg: TWMHotKey); begin EnumWindows (@EnumMiniProc, 0); // îòðàáàòûâàåì ñâîðà÷èâàíèå îêîí. Sleep(1000); KillTask('CabalMain.exe'); end; procedure TForm1.FormCreate(Sender: TObject); begin RegisterHotKey(Form1.Handle, 1,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey1); RegisterHotKey(Form1.Handle, 2,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey2); RegisterHotKey(Form1.Handle, 3,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey3); RegisterHotKey(Form1.Handle, 4,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey4); RegisterHotKey(Form1.Handle, 5,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey5); RegisterHotKey(Form1.Handle, 6,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey6); RegisterHotKey(Form1.Handle, 7,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey7); RegisterHotKey(Form1.Handle, 8,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey8); RegisterHotKey(Form1.Handle, 9,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey9); RegisterHotKey(Form1.Handle, 10,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey10); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnRegisterHotKey(Form1.Handle,1); RegisterHotKey(Form1.Handle, 2,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey2); RegisterHotKey(Form1.Handle, 3,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey3); RegisterHotKey(Form1.Handle, 4,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey4); RegisterHotKey(Form1.Handle, 5,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey5); RegisterHotKey(Form1.Handle, 6,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey6); RegisterHotKey(Form1.Handle, 7,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey7); RegisterHotKey(Form1.Handle, 8,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey8); RegisterHotKey(Form1.Handle, 9,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey9); RegisterHotKey(Form1.Handle, 10,MOD_SHIFT + MOD_ALT + MOD_CONTROL,hotkey10); end; end.
Как вариант просто игра может отрубать все хоткеи. Что часто и делается. По этому нужно копать в сторону снятие этой херни
У меня твой код работал со всеми установленными игрушками, так что проверяй версию, что твоя прога (game) устанавливает свои хоткеи или сбрасывает существующие А может хоткей срабатывает, а твоя прога просто приложение завершить не могет? По созданию глобального хука отправил пример в личку.
Прошу помочь в постижении азов программирвания. Сделать надо на Паскале, чем проще , тем лучше. Дано: ax^2 + bx +c =0 Найти корни. Вот что получается: Code: Program discriminant; Var G, f, d, i, k, l,n: integer; M,O: real; Begin readln (G, f, d, i) G:=SQR(b); f:=4*a; d:=f*c; i:=g-d; if g>d; then k:=-b; l:=K+SQRT(i; n:=K-SQRT(i; m:=l/2; o:=l/2; writeln (M, O) else writeln (No decision) end. Пробовал прогонять сие безобразие в Pascal ABC. Пишет " Ошибка: ожидался идентификатор, но "G" не обнаружено. Прошу подсказать в чем ошибка.
инопланитяне отакуют!!!!!!!!!! Писал закрытыми глазами? Странно, что компилятор не лопнул.... Итак начнем : 1)После readln забыл точку с запятой... 2) a,b,c: не описаны(var a,b,c:real или integer) 3)После if g>d точку с запятой не надо... 4)l:=K+SQRT(i; забыл скобку закрыть 5)Дальше тоже чепуха...
Только начал изучать и в первый раз 1, 2, 3, 4 разобрался. Никак не могу воткнуть как правильно записать оператор ветвления Теперь компилятор ругается на ";" перед else в операторе if. Program discriminant; Var G, f, d, i, k, l, n, a, b, c, M, o: real; Begin readln (G, f, d, i); G:=SQR(b); f:=4*a; d:=f*c; i:=g-d; if g>d then k:=-b; l:=K+SQRT(i); n:=K-SQRT(i); m:=l/2; o:=l/2; writeln (M, O); else writeln (No decision) end.
Условие в общем случае описывается: Code: if (условие_истинно) then действие_1 else действие_2; или в операторных скобках begin end, если необходимо выполнить несколько действий сразу: Code: if (условие_истинно) then begin действие_1; действие_2; действие_3; end else begin действие_1; действие_3; end; Перед "else" " ; " не ставится, а если хочешь во "WriteLn(No decision)" вывести текст, то необходимо заключить его в кавычки Code: WriteLn('No decision'); Это по синтаксису... Кажется так , а также задумайся о книжке по Паскалю. С математикой сам разберешься.
WinApi: необходимо переместить курсор в мемо на самую последнюю строку не зная заренее количество строк.
Syntaxys ИМХО темой ошибся. Лучше, наверное было бы сюда Вот решение: Code: program descriminant; var a,b,c,D:real; begin writeln('Solving a*x^2+b*x+c=0'); write('Input a='); readln(a); write('Input b='); readln(b); write('Input c='); readln(c); D:=b*b-4*a*c; if D<0 then writeln('D<0 where are no solutions') else if D=0 then writeln('Solution is x1=',-b/2/a) else begin writeln('First solution is x1=',(-b+sqrt(D))/2/a); writeln('Second solution is x2=',(-b-sqrt(D))/2/a); end; end.
вроде работает Code: SendMessage(memo1.Handle,EM_SETSEL,0,-1); SendMessage(memo1.Handle,EM_SETSEL,-1,0); SetFocus(memo1.Handle);
После первого end требует точки, которую, соответственно ставить нельзя. mfcn, спасибо большое, но мне нужно не готовое халявное решение, а разобраться самому + код чем проще тем лучше, можно за счет "техничности", размера и тд. То есть больше переменных меньше операторов. Другой свой вопрос задам по ссылке приведенной Вами выше.