Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)

Автор: Aleksoid1978
Дата сообщения: 22.11.2010 08:38
Pavel_M2

А если надо не на Висте или 7 ???
Тогда на помощь приходит - GetProcessImageFileName


Добавлено:
Если надо - могу предоставить рабочий вариант, с определением пути, разрядности процесса(х64 или х86) а также из под какого юзера запущен процесс.
Автор: ZBEP
Дата сообщения: 22.11.2010 10:33
Как выводить звук с микрофона на колонки в реальном времени?
(желательно средствами bass).

п.с.
Тупанул, это можно в самой винде в свойствах микрофона выставить.
Автор: Pavel_M2
Дата сообщения: 22.11.2010 11:43

Цитата:

Aleksoid1978

А если надо не на Висте или 7 ???
Тогда на помощь приходит - GetProcessImageFileName


Добавлено:
Если надо - могу предоставить рабочий вариант, с определением пути, разрядности процесса(х64 или х86) а также из под какого юзера запущен процесс.


в том примере кода, что я послал, уже делается проверка на Vista or prior Vista (в случае НЕ Windows Vista достаточно GetModuleFileNamEx)
Для проверки, является ли процесс x86 или x64, можно использовать IsWow64Process (определенную, начиная с Windows XP SP2.. а раньше и нужно было, т.к. только начиная XP появились x64 OS от MS). Соответственно, при использовании IsWow64Process также надо быть аккуратным: использовать только "в связке" с GetProcAddress.
Автор: Aleksoid1978
Дата сообщения: 22.11.2010 14:22
Pavel_M2

В твоем коде GetModuleFileNameEx - а она для х64 процессов не возвращает данные, поэтому надо юзать
GetProcessImageFileName ... но там есть подводные камни, т.к. вернется путь в виде \Device\HarddiskVolume1\Windows\system32\svchost.exe.

А еще надо быть аккуратным с IsWow64Process, т.к. - на х64 системах для х64 программ она всегда возвращает False в возвращаемый параметр(т.е. также как и для х86 программ на х86 системе).
Автор: Pavel_M2
Дата сообщения: 22.11.2010 18:16

Цитата:
Aleksoid1978

GetModuleFileNameEx - вызывается только для Windows XP и предыдущих.
Ок. Код для редакции Windows XP x64 работать не будет, но для Windows Vista and above будет вызываться QueryFullProcessImageName (вне зависимости от разрядности) и все будет работать тип-топ.

что касается IsWow64Process

Цитата:

А еще надо быть аккуратным с IsWow64Process, т.к. - на х64 системах для х64 программ она всегда возвращает False в возвращаемый параметр(т.е. также как и для х86 программ на х86 системе).

это естественно - ведь x64 процессы это не Wow процессы


Автор: Aleksoid1978
Дата сообщения: 23.11.2010 10:06
Вопрос - кто использует ZEOS для доступа к MySQL на D2009 и выше ??? Интересует вопрос работы с UTF8 базами - кто смог побороть ???

В неуникодных Delphi все решалось легко - связка Zeos+TNT control + TNT fields.

А вот в 2009, 2010 и XE - не прокатывает.

P.S. - Вопрос снимается, в последних ревизиях все пофиксили ...
Автор: Andryshok
Дата сообщения: 24.11.2010 18:40
Можт кто знает
В windows XP и ранее такая фича работает без проблем
prog := tinifile.Create(ExtractFilePath(Application.ExeName) + 'baseconfig.ini');
а в windows 7 ошибочка выходитт, не подскажет ли кто в чем дело ?
Автор: V1s1ter
Дата сообщения: 24.11.2010 18:56
Andryshok
C обновкой тебя!
У меня работает (Вынь7х32 и Вынь7х64), а что за ошибка?
Вот мой фрагмент

Код:
ProgramPath := ExtractFilePath(Application.ExeName);
ProgramName := ChangeFileExt(ExtractFileName(Application.ExeName), '');
IniFileName := ProgramPath+ProgramName+'.ini';
IniFileNameProp := ProgramPath+ProgramName+'D.ini';
IniFileNameValue := ProgramPath+ProgramName+'V.ini';
IniFileNameColor := ProgramPath+ProgramName+'C.ini';
IniFile := TIniFile.Create(IniFileName);
IniFile := TIniFile.Create(IniFileNameProp);
IniFile := TIniFile.Create(IniFileNameValue);
IniFile := TIniFile.Create(IniFileNameColor);
Автор: marser
Дата сообщения: 24.11.2010 19:01
Andryshok
Да и в Delphi 2009 - Delphi XE работает без проблем. А у пользователя права на запись в ExtractFilePath(Application.ExeName) есть?
Автор: JAPWork
Дата сообщения: 24.11.2010 19:18
Andryshok
Повторить не удалось... У меня Windows7 64 Ultimate.

По крайней мере код типа

procedure TfMain.bbGetFileIniClick(Sender: TObject);
var
F : TIniFile;
begin
F := tinifile.Create(ExtractFilePath(Application.ExeName) + 'baseconfig.ini');
mMain.Lines.Add( F.FileName);
F.Free;
end;

отрабатывает без проблем...


Автор: tanaseduard
Дата сообщения: 24.11.2010 20:00
Andryshok

Тоже все проходит нормально.
Проверьте что у вас отдает ExtractFilePath(Application.ExeName).
Автор: spasius
Дата сообщения: 24.11.2010 21:27
Andryshok
на этой ОС бывают проблемы при работе в каталогах с псевдонимами: аля "Мои Документы" и т.д.
Автор: Aleksoid1978
Дата сообщения: 25.11.2010 01:09
Andryshok

Ты бы для начала написал что за ошибка, а то все ринулись проверять ... а может дело в другом, что-то с системой, права доступа и т.д.
Автор: Andryshok
Дата сообщения: 25.11.2010 02:07
Да, ошибка все таки с правами доступа.....
V1s1ter Я не обновлялся, сижу на XP.... это у пользователя у которого прога win 7



Цитата:
А у пользователя права на запись в ExtractFilePath(Application.ExeName) есть?
Это в десяточку - точно - он их не имеет, скажу пусть приобретает


Автор: 0D0A
Дата сообщения: 25.11.2010 03:06
Andryshok
При чем тут юзер? Надо просто писать туда, куда говорят гайдлайны (начиная с Вин2000), например в User\AppData, AllUsers\AppData и тд. Если очень уж требуется писать под себя (в Program Files например), то задавать права в приложении (манифест и тд), а не сваливать проблемы на юзера.
Автор: Frodo_Torbins
Дата сообщения: 25.11.2010 10:29
Или еще вариант - совсем удалить манифест. Тогда винда подумает, что запускается старый хлам, и включит виртуализацию
Автор: 0D0A
Дата сообщения: 25.11.2010 10:56
Да там и так он, дельфевый, для галочки, секции supportedOS нет, непонятно что думает винда. Во всяком случае если такое запускать из инсталлера, ворчит, что возможно все установилось не туда и не так
Автор: mdid
Дата сообщения: 25.11.2010 15:49
народ каким макаром можно откомпилить и проинсталлить dpk без запущенной среды?
Автор: tanaseduard
Дата сообщения: 25.11.2010 15:52
mdid
Через командную строку, параметры почитай в хелпе, незабудь указать папки поиска если они необходимы.
Автор: data man
Дата сообщения: 25.11.2010 16:10
mdid
Я использую процедуры из Silverpoint MultiInstaller
Для XE исходники нужно немного "допилить".
Автор: mdid
Дата сообщения: 25.11.2010 16:12
да читал..но параметры bds идут с запуском среды..хз..мож чет не то делаю..
Автор: Frodo_Torbins
Дата сообщения: 25.11.2010 16:23
mdid
Откомпилить можно еще с помощью MSBuild-а: http://www.alphaskins.com/forum/index.php?showtopic=4505 А проинсталить только руками внеся нужные правки реестр.
Автор: tanaseduard
Дата сообщения: 25.11.2010 16:47
mdid
Поищу вечерком, были примеры вроде дома.
Автор: mdid
Дата сообщения: 25.11.2010 16:52
пасибо...думаю то что нужно
Автор: Andryshok
Дата сообщения: 25.11.2010 18:31


Цитата:
то задавать права в приложении (манифест и тд), а не сваливать проблемы на юзера.

Да в том приложении прав то кот наплакал...., да и скидывать его любят с флешки на флешку, так что хранню все настройки и прочее в папке с прогой
Автор: Frodo_Torbins
Дата сообщения: 25.11.2010 18:42
Andryshok
А как тогда в програм файлз записывают, если запущенное потом приложение не имеет прав? Тут явно нужен отдельный портабельный режим.
Автор: Andryshok
Дата сообщения: 25.11.2010 18:52
Frodo_Torbins Если прога буде развиваться то тут ваша правда, буде и портабле тада а тка......, вот записывают же иногда и в програм файлз...
Автор: Alexos
Дата сообщения: 25.11.2010 18:54
ну так пишите манифест
Автор: Ludens
Дата сообщения: 26.11.2010 23:54
Представляется необходимым внести в шапку ссылку на какую-либо бесплатную бибилиотеку TPngImageList (например, в интерпретации 0D0A).
Поскольку возможность полноценного использования в Delphi иконок в PNG-формате — вопрос весьма важный и глубоко фундаментальный.

Автор: MatrixNT
Дата сообщения: 28.11.2010 09:28
Пасибо вам за подсказки со списком процессов с путями в 64х битах!
Получилось найти оптимальный вариант!!!

использовал все те же CreateToolhelp32Snapshot и GetProcessImageFileName предварительно получив привилегий SE_DEBUG_NAME
только возвращаются полные пути к процессам в "ядерном" формате, потом еще пришлось прогонять через отдельную функцию что бы получить привычные пути.

Aleksoid1978
GetProcessImageFileName - Именно через нее и получилось

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: Установка копоненты ZipTV


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.