Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: WinAPI
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
sidapas
23 / 17 / 0
Регистрация: 14.09.2010
Сообщений: 230
#1

WinAPI

26.02.2011, 15:29. Просмотров 2792. Ответов 25
Метки нет (Все метки)

как сделать так чтобы программа открывала блокнот и открыла нужный текстовый файл и каждая буква текстового файла записывалась в блокнот заданный интервал времени?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2011, 15:29
Ответы с готовыми решениями:

WinAPI
Подскажите плиз книгу какуюнить по WinAPI для полного,полного чайника:)

winapi
РЕБЯТА,ПОМОГИТЕ пожалуйста со следующим: в программе нужно прописать коды...

WinAPI
Как мне программно совершить эти действия,которые показаны на видео? ...

WinAPI окна
var h: HWND; begin h:=FindWindow('DOS',nil); end; Допкстим у меня в...

WINAPI and Delphi
Ребята,помогите пожалуйста с задачей по WINapi ....завтр над ее сдать...не...

25
Darth_Vaider
58 / 57 / 28
Регистрация: 17.01.2011
Сообщений: 181
26.02.2011, 16:17 #2
Ну, запускается блокнот с помощью функции shellexecute. Здесь лучше открывать сам блокнот, а не документ, который нужно загрузить. Тот документ нужно загрузить в твою программу. Потом ставь таймер и отправляй буквы в блокнот с помощью sendmessage.
0
anonimus
2154 / 1244 / 143
Регистрация: 28.04.2010
Сообщений: 4,588
26.02.2011, 16:19 #3
запускаешь блокнот например через CreateProcess потом по таймеру посылаешь в него по букве из текстового файла используя SendMessage и сообщения WM_SETTEXT

Добавлено через 36 секунд
Darth_Vaider, опередил )
0
sidapas
23 / 17 / 0
Регистрация: 14.09.2010
Сообщений: 230
27.02.2011, 12:17  [ТС] #4
блин я толком ничего понять не могу дайте код пожалуйста

Добавлено через 19 часов 46 минут
ну кто ни будь поможет
0
John_Pa9JIbHuK
Добрый самаритянин
1101 / 617 / 136
Регистрация: 31.03.2009
Сообщений: 2,568
27.02.2011, 12:49 #5
Delphi
1
2
3
4
5
6
7
8
var
H: HWND;
begin
  //Так откроется файл в блокноте если он по умолчанию
  H := ShellExecute (Form1.Handle, nil, 'c:\2.txt', nil, nil, SW_RESTORE);
  //Можно так если знаешь путь блокнота, может неполность нужно путь писать, в google найдешь
  H := ShellExecute (Form1.Handle, nil, PChar ('Путь'), nil, nil, SW_RESTORE)
end;
В итоге у тебя в H Handle ссылка на созданное окно.

Добавлено через 2 минуты
Дальше шлем строку
Delphi
1
SendMessage(h,WM_SETTEXT,0,lparam(PChar('А что собсно происходит то?')));
1
igoriy
871 / 542 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
27.02.2011, 13:25 #6
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, shellapi, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
 h, h1: hwnd;
 str: char;
 f: Textfile;
 str1: string;
implementation
 
{$R *.dfm}
// в инспекторе объектов ставим  Timer1.Enabled:= False;
procedure TForm1.Button1Click(Sender: TObject);
begin
 
 // открываем блокнот
 ShellExecute(Handle, 'open', 'notepad.exe', nil, nil, SW_RESTORE);
 sleep(200);// маленько тормознем
 h:= FindWindow('Notepad',nil);// находим дескриптор блокнота
 h1:= FindwindowEx(h, 0, 'Edit', nil);// находим дескриптор поля ввода блокнота - Edit
 if h1 <> 0 then // если найден дескриптор
  begin
  AssignFile(f, 'test.txt'); // открываем файл с текстом
  Reset(f);
  Timer1.Enabled:= True;//- врубаем таймер
  end;
 
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if not Eof(f) then   // если не конец файла
  begin
   read(f, str); // читаем символ
   str1:= str1 + str; // добавляем в строку
   SendMessage(H1, wm_settext, 0, lparam(string(str1))); //посылаем строку в блокнот
 
  end
  else 
   begin
    Timer1.Enabled:= False; //текст кончился - останавливаем таймер
    CloseFile(f);
   end;
end;
 
end.
1
igoriy
871 / 542 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
27.02.2011, 13:32 #7
на всякий случай - сам проект
2
Вложения
Тип файла: rar Новая папка (4).rar (303.7 Кб, 35 просмотров)
igoriy
871 / 542 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
27.02.2011, 13:34 #8
кстати в проекте я забыл файл закрыть - исправь там

Цитата Сообщение от igoriy Посмотреть сообщение
else
begin
Timer1.Enabled:= False; //текст кончился - останавливаем таймер
CloseFile(f);
end;
1
anonimus
2154 / 1244 / 143
Регистрация: 28.04.2010
Сообщений: 4,588
27.02.2011, 13:40 #9
igoriy, а ты свой пример проверял?
просто я вчера начал делать, делал так же как ты
Delphi
1
2
  str1:= str1 + str; 
   SendMessage(H1, wm_settext, 0, lparam(string(str1)));
у меня получалось что как только символ отправлялся в блокнот переменная str1 обнулялась и получалось так что отправлялось по одному символу, а старое не сохранялось, не поняв в чем проблема, я так и бросил это дело )
1
igoriy
871 / 542 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
27.02.2011, 13:49 #10
да я обязательно перед отправкой проверяю - по началу у меня такая же проблема была как у тебя и поэтому я зделал вот это

Цитата Сообщение от igoriy Посмотреть сообщение
str1:= str1 + str; // добавляем в строку
Добавлено через 2 минуты
Правельней сказать - добавляем символ в строку

Добавлено через 4 минуты
Цитата Сообщение от John_Pa9JIbHuK Посмотреть сообщение
SendMessage(h,WM_SETTEXT,0,lparam(PChar('А что собсно происходит то?')));
а вот в этом случае - надпись посылается заголовку

Добавлено через 49 секунд
дескриптор то окна а не поля ввода
1
anonimus
2154 / 1244 / 143
Регистрация: 28.04.2010
Сообщений: 4,588
27.02.2011, 13:56 #11
у меня было аналогично str1:= str1 + str;
но когда второй раз доходил код до этого места str1 уже была пустой, т.е. не сохранялось то что мы присвоили до этого.
В отладчике посмотрел переменная обнулялась именно после строки отправки сообщения
SendMessage ......
Не понятно почему, плохо я код не сохранил
0
igoriy
871 / 542 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
27.02.2011, 13:59 #12
не знаю - может где то ошибочка была?Потому что я этот код прогонял через отладчик - обнулений не было
0
John_Pa9JIbHuK
Добрый самаритянин
1101 / 617 / 136
Регистрация: 31.03.2009
Сообщений: 2,568
27.02.2011, 14:45 #13
igoriy,
А так не проще? ))
Delphi
1
H := ShellExecute(Handle, 'open', 'notepad.exe', nil, nil, SW_RESTORE);
1
igoriy
871 / 542 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
27.02.2011, 14:48 #14
наверно проще - но все дело привычки
0
sidapas
23 / 17 / 0
Регистрация: 14.09.2010
Сообщений: 230
27.02.2011, 15:54  [ТС] #15
спасибо всем за помощь нужно вот еще что когда я делаю обработчик онклик на кнопке и пишу в нем
Delphi
1
2
Timer1.Enabled:=StrToBool(Edit1.Text);
Memo1.Lines.SaveToFile('Text.txt');
и пишу текст в мемо и в едит тоже пишу интервал и нажимаю на кнопку выдает ошибку как это исправить и при нажатии на бутон1 в блокноте писался текст из того сохраненного текстового файла
0
igoriy
871 / 542 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
27.02.2011, 15:57 #16
лучше код весь пришли - не совсем понятно
0
sidapas
23 / 17 / 0
Регистрация: 14.09.2010
Сообщений: 230
27.02.2011, 16:05  [ТС] #17
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, shellapi, StdCtrls, ExtCtrls, Spin;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    Memo1: TMemo;
    Button2: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
 h, h1: hwnd;
 str: char;
 f: Textfile;
 str1: string;
implementation
 
{$R *.dfm}
// в инспекторе объектов ставим  Timer1.Enabled:= False;
procedure TForm1.Button1Click(Sender: TObject);
begin
 
 // открываем блокнот
 ShellExecute(Handle, 'open', 'notepad.exe', nil, nil, SW_RESTORE);
 sleep(200);// маленько тормознем
 h:= FindWindow('Notepad',nil);// находим дескриптор блокнота
 h1:= FindwindowEx(h, 0, 'Edit', nil);// находим дескриптор поля ввода блокнота - Edit
 if h1 <> 0 then // если найден дескриптор
  begin
  AssignFile(f, 'test.txt'); // открываем файл с текстом
  Reset(f);
  Timer1.Enabled:= True;//- врубаем таймер
  end;
 
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if not Eof(f) then   // если не конец файла
  begin
   read(f, str); // читаем символ
   str1:= str1 + str; // добавляем в строку
   SendMessage(H1, wm_settext, 0, lparam(string(str1))); //посылаем строку в блокнот
 
  end
  else Timer1.Enabled:= False; //текст кончился - останавливаем таймер
 
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled:=StrToBool(Edit1.Text);
Memo1.Lines.SaveToFile('Text.txt');
end;
 
end.
0
igoriy
871 / 542 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
27.02.2011, 16:08 #18
Цитата Сообщение от sidapas Посмотреть сообщение
Timer1.Enabled:=StrToBool(Edit1.Text);
здесь может быть интервал регулироваться должен?
1
sidapas
23 / 17 / 0
Регистрация: 14.09.2010
Сообщений: 230
27.02.2011, 16:15  [ТС] #19
TrackBar что ли?
0
igoriy
871 / 542 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
27.02.2011, 16:18 #20
нет я не понял - ты хочешь регулировать скорость таймера?
тогда вот здесь
Цитата Сообщение от sidapas Посмотреть сообщение
begin
AssignFile(f, 'test.txt'); // открываем файл с текстом
Reset(f);
Timer1.Enabled:= True;//- врубаем таймер
end;
сделай вот так
Delphi
1
2
3
4
5
6
  begin
  AssignFile(f, 'test.txt'); // открываем файл с текстом
  Reset(f);
   Timer1.Interval:= StrtoInt(Edit1.Text);
  Timer1.Enabled:= True;//- врубаем таймер
  end;
1
27.02.2011, 16:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2011, 16:18

WinAPI функции
Суть программы: Есть две программы &quot;Клиент&quot; и &quot;Сервер&quot; Клиент посылает...

Программа на WINAPI
У меня есть такая задача, нужно сделать программу на котором будет...

Postmessage WinApi
Добрый день форумчане. Вообщем задача такая: Через программу написаную на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru