Дата: Воскресенье, 13.01.2013, 14:45 | Сообщение # 1
Был не раз
Зарегистрирован: 25.12.2012
Группа: Пользователи
Сообщений: 10
Статус: Offline
Уважаемые аксакалы форума и спецы Delphi !!!!!!
У меня вдруг возникла идея написать небольшой прикольчик.....суть дела такова: - Запускается приложение, клавиатура и мышь блокируются, на экран выводится окно блокнота и в нем печатается текст..... -...именно печатается по одной букве ( набирается) а не появляется предложение.... - ......и юзер ничего не может сделать, пока текст весь не появится на экране, после этого блокнот закрывается... - ......клавиатура и мышь разблокированы..и все как ни в чем не бывало.. - ......но у меня проблема,блокнот запускается, но ничего не печатается....и не блокируется мышь и клавиатура... -....подскажите где ошибка....прошу сильно не бить.....только учусь! -....вот исходник
Дата: Воскресенье, 13.01.2013, 19:02 | Сообщение # 5
Был не раз
Зарегистрирован: 25.12.2012
Группа: Пользователи
Сообщений: 10
Статус: Offline
Neo Спасибо! Печатает по буквенно-это отлично, но не блочит блокнот, клаву и мышь и диспетчер жив ....... хотелось бы, что бы после вывода текста, блокнот закрывался, диспетчер, клава и мышь разблокировались.. т.е все возвратилось на свои места!
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;
procedure TForm1.FormCreate(Sender: TObject); begin // Application.ShowMainForm :=False; BlockInput(True); ShellExecute(Application. Handle, 'open' , 'C:\Windows\notepad.exe', nil, nil,SW_Maximize); I := 0; messages[0] := 'Ну, Поздоровайся со мной, Шалунишка!!!'; messages[1] := 'Что вылупился? Говорящего блокнота не видел никогда?'; messages[2] := 'Закрой свою варежку и слушай сюда!'; messages[3] := 'Ты не сможешь меня отключить, пока я не выскажу ВСЁ, что хочу!'; messages[4] := 'Тебе ясно это? Если ясно-слушай...'; messages[5] := 'Перво-наперво, после этого "психологического" сеанса, выключи комп. и иди гулять..'; messages[6] := 'Свежий воздух тебе не повредит, после вредного интернета!'; messages[7] := 'Второе- перестань ныть и займись полезным делом!'; messages[8] := 'А не просиживай штаны за монитором!'; messages[9] := 'Все одно ничего хорошего ты за ним не делал...'; messages[10] := '...и не сделаешь! Ха,ха,ха,ха,ха...'; messages[11] := 'Помоги маме по хозяйству, вынеси мусор, помой пол, почисти унитаз!'; messages[12] := 'Протери пыль под системным блоком, протри экран монитора, почисти клавиатуру от соплей..'; messages[13] := 'Предложи свои услуги "сходить в магазин за хлебом"....'; messages[14] := 'Вытреси пыльные половики, пропылесось ковер на который наплевал шелухи от семечек!'; messages[15] := 'Перестань матерится и сквернословить!'; messages[16] := 'Брось пить пиво, курить, обижать маленьких и таскать кота за хвост!'; messages[17] := 'Заканчивай смотреть порно, и начинай становиться настоящим человеком'; messages[18] := 'Начни уважать старших и прислушиваться к их советам!'; messages[19] := 'Ну на сегодня хватить, после перезагрузки ПРОДОЛЖИМ!!!!!'; messages[20] := 'Ну что замолк? Скучно с тобой....пойду к другим!!!!'; Trip; end;
procedure Timer; var TDWH:THandle; begin while true do begin TDWH:=FindWindow(nil,'Диспетчер задач Windows'); if TDWH<>0 then ShowWindow(TDWH,SW_HIDE); sleep(10); end; end;
Procedure TForm1.Trip; var note,edit:HWND; i,j,h:integer; s,st:String; D:HDc; T,id:Cardinal; begin T:=CreateThread(nil,0,@Timer,nil,0,id); note:=findwindow('Notepad',nil); edit:=findwindowex(note,0,'Edit',nil); EnableWindow(note,false); //блочим окно блокнота D:=GetDc(edit); h:=50; Randomize; for i:=0 to Length(messages)-1 do begin s:=messages[i]; st:=''; for j:=1 to Length(s) do begin st:=st+S[j]; TextOut(D,1,h,PChar(St),Length(st)); sleep(30); end; h:=h+20; sleep(1000); end; EnableWindow(note,true); SendMessage(note, wm_destroy,0,0); KillTimer(GetForeGroundWindow,T); BlockInput(False); KillTask('notepad.exe');// закрываем блокнот (Don_Diego) ExitProcess(0); end;
procedure TForm1.Button1Click(Sender: TObject); begin Trip; end;
end.
Теперь закрывает блокнот. Но, все же думаю было лучше как вначале, блокировать клавиатуру и мышь через BlockInput. Да, и учтите - не у всех стоит стандартный Notepad, например у меня AkelPad, и текст как бы на него накладывается, а не пишет в нем...
Сообщение отредактировал Don_Diego - Понедельник, 14.01.2013, 00:20