Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 61
от 07.03.2005, 17:00

Администратор:Калашников О.А.
В номере:Вопросов: 5, Ответов: 14


Вопрос № 17667: Привет! Существует ли разница между следующими строками кода: var p: Pointer; p2: function(Y):X; ------------------------------------------ p:= GetProcAddress(...); и @p2:= GetProcAddres(...); ----------------------...
Вопрос № 17671: Здравствуйте, уважаемые эксперты. Меня интересует такой вопрос: вообщем мне надо такую программу, которая под учетной записью "Гость" скрывает панель задач и блокирует кнопку пуск, тоетсь чтобы клавиша win не открывала меню пуск, единственн...
Вопрос № 17685: Уважаемые эксперты! Почему под ХР звук на спикер выводится Beep(100,200) а под Win98 таким образом ничего не слышно. С уважением Антон. ...
Вопрос № 17686: сБЮФЮЕЛШЕ ЩЙЯОЕПРШ, ЙЮЙ БН БПЕЛЪ БШОНКМЕМХЪ ОПНЦПЮЛЛШ ДНАЮБХРЭ ЙНКНМЙС Б DBGrid Ю ГЮРЕЛ САПЮРЭ ЕЕ. ...
Вопрос № 17706: Добрый день! Знаю, как запустить файл - примерно так: ShellExecute(0, nil, PChar('send.bat'), nil, nil, SW_SHOWNORMAL); А как запустить на выполнение командную строку? Пока извращаюсь - строку записываю в батник и запускаю его, но имхо эт...

Вопрос № 17667
Привет! Существует ли разница между следующими строками кода:
var p: Pointer;
p2: function(Y):X;
------------------------------------------
p:= GetProcAddress(...);
и
@p2:= GetProcAddres(...);
------------------------------------------
Всегда присваиваю адрес функции указателю p хотя в документации к Delphi адрес, возвращаемый GetProcAddress присваивается всегда к процедурным типам. Почему этот адрес просто не присвоить указателю и не объявлять процедурный тип? Спасибо за содействие. Всего хорошего.
Отправлен: 01.03.2005, 18:25
Вопрос задал: Алексей Петрович Вульфенштейн (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: John Freeman
Здравствуйте, Алексей Петрович Вульфенштейн!
Не соответствует концепции pascal - такое лучше всего юзать как
asm
push ...
...
call getprocaddress
push x
call eax
mov destination,somevalue_or_reg
end;
и не надо [censored] даже с объявлением функции!
Ответ отправил: John Freeman (статус: Специалист)
Отправлен: 01.03.2005, 18:42

Отвечает: sir henry
Здравствуйте, Алексей Петрович Вульфенштейн!
Дело в том, что процедурный тип - это тоже самое, что и процедура. Процедуру можно запустить на выполнение, а просто указатель нельзя. :)
Другими словами вот что происходит:
1. Вы загружаете какую-то библиотеку
2. Из этой библиотеки вы получаете адрес какой-то процедуры, которую хотите запустить для получения нужных Вам результатов.
3. А вот теперь, чтобы запустить эту процедуру по полученому адресу, Вы запускаете процедурный тип переменной.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 02.03.2005, 12:13


Вопрос № 17671
Здравствуйте, уважаемые эксперты. Меня интересует такой вопрос: вообщем мне надо такую программу, которая под учетной записью "Гость" скрывает панель задач и блокирует кнопку пуск, тоетсь чтобы клавиша win не открывала меню пуск, единственное что может разблокировать - это определённая комбинация, хотя мне все равно, главное чтобы не была видна панель задач в Госте и блокировалася кнопка ПУСК! Вообщем если у кого есть такая программа или может если у кого есть возможность написать такую, то пожалуйста ответьте...

Приложение:

Отправлен: 01.03.2005, 20:01
Вопрос задал: Dmitriy (статус: Студент)
Всего ответов отправлено: 1

Отвечает: Мельник Александр Анатольевич
Здравствуйте, Dmitriy!
Вначале необходимо вызвать функцию FindWindow(), чтобы определить handle TaskBar. Затем вызвите функцию ShowWindow(), передав ей в качестве параметра костанту SW_HIDE.

Приложение:

Ответ отправил: Мельник Александр Анатольевич (статус: 3-ий класс)
Отправлен: 01.03.2005, 20:39
Оценка за ответ: 4
Комментарий оценки:
Этот код у меня уже есть, я ведь чётко задал вопрос, чтобы эта прога ещё могла блокировать кнопку пуск...


Вопрос № 17685
Уважаемые эксперты!
Почему под ХР звук на спикер выводится Beep(100,200) а под Win98 таким образом ничего не слышно.
С уважением Антон.
Отправлен: 02.03.2005, 07:03
Вопрос задал: антон (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: sir henry
Здравствуйте, антон!
Потому-что в W9x все параметры этой функции игнорируются.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 02.03.2005, 11:47
Оценка за ответ: 4

Отвечает: Bob Johnson
Здравствуйте, антон!
Из мсдн:
Windows 95: The Beep function ignores the dwFreq and dwDuration parameters. On computers with a sound card, the function plays the default sound event. On computers without a sound card, the function plays the standard system beep.

* EMan2.0: ---===*** Debug mode ***===---

Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 03.03.2005, 00:43

Отвечает: CJ
Здравствуйте, антон!
Здравствуйте, антон!
Хех. Потому что эти две ОС многим отличаются, основаны они на разных ядрах XP это NT. Ну а 98 это Win9X. И так далее. В процессе программирования можно очень часто встретиться с этой проблемой несовместимости и отличий.
Ответ отправил: CJ (статус: Студент)
Отправлен: 05.03.2005, 09:10
Оценка за ответ: 2


Вопрос № 17686
сБЮФЮЕЛШЕ ЩЙЯОЕПРШ, ЙЮЙ БН БПЕЛЪ БШОНКМЕМХЪ ОПНЦПЮЛЛШ ДНАЮБХРЭ ЙНКНМЙС
Б DBGrid Ю ГЮРЕЛ САПЮРЭ ЕЕ.
Отправлен: 02.03.2005, 07:08
Вопрос задал: Овсянников С.А. (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: sir henry
Здравствуйте, Овсянников С.А.!
К сожалению не смог расшифровать Ваш вопрос - не могу подобрать кодировку. Извините. :)
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 02.03.2005, 11:52

Отвечает: Boriss
Здравствуйте, Овсянников С.А.!
И я тоже - ну никак!! Что там такое DbGrid?
Ответ отправил: Boriss (статус: Профессионал)
Отправлен: 03.03.2005, 09:52


Вопрос № 17706
Добрый день!
Знаю, как запустить файл - примерно так: ShellExecute(0, nil, PChar('send.bat'),
nil, nil, SW_SHOWNORMAL);
А как запустить на выполнение командную строку? Пока извращаюсь - строку записываю в батник и запускаю его, но имхо это и некрасиво и должен быть другой способ. Заранее спасибо.
Отправлен: 02.03.2005, 14:38
Вопрос задал: Loko (статус: Посетитель)
Всего ответов отправлено: 6

Отвечает: Boriss
Здравствуйте, Loko!
Если я правильно Вас понял, то это с помощью
WinExec - самый простой вариант: WinExec('myProg.exe /y', SW_RESTORE);
Но лучше освойте
CreateProcess - WinExec все равно работет через него, но без Вас
Ответ отправил: Boriss (статус: Профессионал)
Отправлен: 02.03.2005, 15:30
Оценка за ответ: 4

Отвечает: rusfaq.ru
Здравствуйте, Loko!
>>А как запустить на выполнение командную строку?
ShellExecute(this->Handle, "open" , "cmd", "/A /C \"xcopy /?\" > c:\\test.log", ".", true);
ShellExecute(this->Handle, "open" , "cmd", "/A /C "xcopy /?" > c:\test.log", ".", true);
З.Ы. Синтаксис С++ (BCB).
З.З.Ы. Не знаю, съест ли бэкслеши, поэтому несколько вариантов

Приложение:

Ответ отправил: rusfaq.ru (статус: 1-ый класс)
Отправлен: 03.03.2005, 00:19
Оценка за ответ: 4

Отвечает: Bob Johnson
Здравствуйте, Loko!
надо запускать командный интерпретатор (cmd.exe на windows NT и command.com на windows 9x) с параметром /c и далее без пробела команда, например:
cmd.exe /cdir

* EMan2.0: ---===*** Debug mode ***===---

Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 03.03.2005, 00:43
Оценка за ответ: 5
Комментарий оценки:
Собственно, главная информация, к-рую я получил. Экспериментировал до этого сам, но додуматься параметр поставить БЕЗ ПРОБЕЛА не смог

Отвечает: sir henry
Здравствуйте, Loko!
Командная строка - в w2k это файл cmd.exe, а в w9x это command.com. Запускайте тот или иной файл в ShellExecute и будет Вам командная строка. :)
Может быть Вы что-то другое имели в виду? Если Вы хотите в командной строке запускать какую-нибудь команду, например PING, то третий с конца параметр в ShellExecute - это строка для дополнительных параметров запускаемой программы.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 03.03.2005, 07:00
Оценка за ответ: 5

Отвечает: Vj
Здравствуйте, Loko!
Как вариант можно так:
var Batf: TStringList;
begin
try
Batf:=TStringList.Create;
except end;
Batf.Add('text'); //в список Batf мы заполняем по одной командной строке text
Batf.Add('text2'); //и так сколько угодно пока не надоест
...
Batf.SaveToFile('send.bat'); //сохраняем все строчки в порядке их добавлений в Batf
ShellExecute(0,nil,PChar('send.bat'),nil,nil,SW_SHOWNORMAL); //собственно, вызываем его. end;
Вот и все. Причем ты вместо текста в ковычках можешь добавлять строки ввиде переменных, которые ты сам смоделировал по своему алгоритму. Т.е. вместо
Batf.Add('text');
ты пишешь
Batf.Add(str); //где str - это переменная типа строка
Но я думаю ты это итак знал.
Ответ отправил: Vj (статус: 10-ый класс)
Отправлен: 04.03.2005, 01:12
Оценка за ответ: 4
Комментарий оценки:
Отличный ответ, единственно, что я до этого примерно так и делал и хотел от батника как раз избавиться

Отвечает: CJ
Здравствуйте, Loko!
Точно не помню но один из параметров функции это и есть то что передается параметром к запуску файла. Когда ты в делфях напишешь ShrllExecute( там постепенно будут появляться подсказки, и там что то типа Parammetr.
Ответ отправил: CJ (статус: Студент)
Отправлен: 04.03.2005, 18:55
Оценка за ответ: 4


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться

В избранное