Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 22:04 30.04.24 
Компютри и Интернет
   >> Delphi
Всички теми Следваща тема *Кратък преглед

Тема WinXP, D7, AddPrinterDriver - как се ползва?нови  
Автор NikB (член)
Публикувано08.08.09 13:42



WinXP, D7, AddPrinterDriver - как се ползва?
Искам да добавя драйвер: "Generic / Text Only"
(Ако в Win поне веднъж е инсталиран тоя драйвер - няма проблем.)

Ако драйверът поне веднъж е инсталиран, енумераторът на драйверите връща нещо такова (и няма проблем):

cVersion:		3

pName: Generic / Text Only
pEnvironment: Windows NT x86
pDriverPath: C:\WINDOWS\System32\spool\DRIVERS\W32X86\3\UNIDRV.DLL
pDataFile: C:\WINDOWS\System32\spool\DRIVERS\W32X86\3\TTY.GPD
pConfigFile: C:\WINDOWS\System32\spool\DRIVERS\W32X86\3\UNIDRVUI.DLL


Интересува ме някой пример за AddPrinterDriver:
AddPrinterDriver(pName: PChar; Level: DWORD; pDriverInfo: Pointer): BOOL; stdcall;

Как да определя кое е оптималния Level, как да запълня pDriverInfo?

Пробата ми дава грешка 1801: "[color="#8B0000"]The printer name is invalid[/color]" - кофти работа!

Ето я пробата (Гледайки примера на и резултатите от ръчно инсталиран "Generic / Text Only" драйвер):

Това кодче
{}procedure TfrmMain.Button1Click(Sender: TObject);

var
xDriverInfo: pDriverInfo2;
begin
New( xDriverInfo);
xDriverInfo.cVersion := 3;
xDriverInfo.pName := PChar( 'Generic / Text Only');
xDriverInfo.pEnvironment := PChar( 'Windows NT x86');
xDriverInfo.pDriverPath := PChar( 'C:\WINDOWS\System32\spool\DRIVERS\W32X86\3\UNIDRV.DLL');
xDriverInfo.pDataFile := PChar( 'C:\WINDOWS\System32\spool\DRIVERS\W32X86\3\TTY.GPD');
xDriverInfo.pConfigFile := PChar( 'C:\WINDOWS\System32\spool\DRIVERS\W32X86\3\UNIDRVUI.DLL');

if AddPrinterDriver( 'Generic / Text Only', 2, xDriverInfo) then begin
StatusBar1.SimpleText := 'OK';
end else begin
StatusBar1.SimpleText := IntToStr( GetLastError)+': '+SysErrorMessage( GetLastError);
end;
end;


Редактирано от NikB на 08.08.09 19:34.



Тема Re: WinXP, D7, AddPrinterDriver - как се ползва?нови [re: NikB]  
АвторИвaнчo (Нерегистриран)
Публикувано11.08.09 20:16



Пропуснал си може би една малка подробност от описанието на функцията - Before an application calls the AddPrinterDriver function, all files required by the driver must be copied to the system's printer-driver directory.
Затова и когато вече веднъж е бил инсталиран ръчно, не получаваш грешки. Например, файла TTY.GPD на "чист компютър" го няма в C:\WINDOWS\System32\spool\DRIVERS\W32X86\3 - GetPrinterDriverDirectory
А на следващия въпрос - как да зная кои файлове са към определен драйвер - виж, това не знам


Иначе, TTY.GPD се намира в C:\WINDOWS\Driver Cache\i386\driver.cab , така че ще трябва да намериш как да го екстрактнеш от там, и да го копираш до Printer Driver Directory . За Vista, доколкото си спомням, драйверите бяха в някаква друга директория, а не в driver.cab



Тема GetPrinterDriverDirectoryнови [re: Ивaнчo]  
Автор NikB (член)
Публикувано12.08.09 19:54



За да стане работата, трябва да определя GetPrinterDriverDirectory.
Това става с двукратно викане - първо, с дължина на структурата 0, за да видим колко е желаната от Бил Гейтс дължина и след това - указател към свободна памет с тоя размер.
Викам онова по-долу и ми връща стринг
'C:\WINDOWS\System32\spool\DRIVERS\W32X86'
който е с дължина 35 (около) байта, а ми иска да заделям 82 байта.
Изглежда ми странно - ИМА ЛИ НЯКАКВО ОБЯСНЕНИЕ?

iCnt := 0;

GetPrinterDriverDirectory( '', '', 1, @s, 0, i);
if i>0 then begin
iCnt := i;
GetMem( pDir, iCnt);
try
if GetPrinterDriverDirectory( '', '', 1, pDir, iCnt, iCnt) then begin
s := string( pDir);
end;
finally
FreeMem( pDir, i);
end;
end;




Тема Може ли многократно да правя AddPrinterDriver [re: Ивaнчo]  
Автор NikB (член)
Публикувано12.08.09 19:58



Може ли многократно да правя AddPrinterDriver на един и същ драйвер?
да не би това да е проблема?



Тема Unicodeнови [re: NikB]  
Автор andrew_nikoloff (bugbuster)
Публикувано13.08.09 09:26



Не е 35, а 40. Плюс един за терминатора (0), по две за уникода прави 82 байта



Linux isn't free, it's worthless.




Тема 3 пъти ги четох снощи - бяха 35 :)нови [re: andrew_nikoloff]  
Автор NikB (член)
Публикувано13.08.09 09:38



3 пъти ги четох снощи - бяха 35 (около) :), днес са 40 (юникодето, да :))




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.