Принтер по умолчанию

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Shurrik
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 110
Зарегистрирован: 20.05.2004 (Чт) 5:35
Откуда: Керчь, Крым

Принтер по умолчанию

Сообщение Shurrik » 20.05.2004 (Чт) 21:49

Какая функция АПИ может изменить в системе принтер по умолчанию?
Должно же быть что-то типа SetDefaultPrinter(Имя принтера).
Мне нужно, чтобы изменился принтер для всех программ.

SVL
Обычный пользователь
Обычный пользователь
 
Сообщения: 97
Зарегистрирован: 19.12.2002 (Чт) 11:37
Откуда: Russia

Сообщение SVL » 21.05.2004 (Пт) 9:00

Когда то нашел следующий код, но переделал под свои нужды. Может, поможет
Код: Выделить всё
Option Explicit

Private Const HWND_BROADCAST As Long = &HFFFF
Private Const WM_WININICHANGE As Long = &H1A

Private Declare Function GetProfileString Lib "kernel32" _
   Alias "GetProfileStringA" _
  (ByVal lpAppName As String, _
   ByVal lpKeyName As String, _
   ByVal lpDefault As String, _
   ByVal lpReturnedString As String, _
   ByVal nsize As Long) As Long


Private Declare Function WriteProfileString Lib "kernel32" _
   Alias "WriteProfileStringA" _
  (ByVal lpszSection As String, _
   ByVal lpszKeyName As String, _
   ByVal lpszString As String) As Long

Private Declare Function SendMessage Lib "user32" _
   Alias "SendMessageA" _
  (ByVal hwnd As Long, _
   ByVal wMsg As Long, _
   ByVal wParam As Long, _
   lparam As Any) As Long

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long


'Private Sub Form_Load()
'    ProfileLoadWinIniList List1, "PrinterPorts"
'    Command1.Enabled = False
'End Sub


'Private Sub Command1_Click()
'    Call SetDefaultPrinterWinNT
'End Sub


'Private Sub List1_Click()
'    Command1.Enabled = List1.ListIndex > -1
'End Sub


Public Sub SetDefaultPrinter(ByVal printername As String, _
                              ByVal DriverName As String, _
                              ByVal PrinterPort As String, _
                              Optional fullstr As String = "")
Dim DeviceLine As String

If Len(fullstr) = 0 Then
    DeviceLine = printername & "," & DriverName & "," & PrinterPort
Else
    DeviceLine = fullstr
End If
'Ñîõðàíèòü èíôîðìàöèþ î íîâîì ïðèíòåðå â ñåêöèè
'[WINDOWS] ôàéëà WIN.INI äëÿ êëþ÷à DEVICE=
Call WriteProfileString("windows", "Device", DeviceLine)
'Çàñòàâèòü âñå ïðèëîæåíèÿ ïåðåçàãðóçèòü INI-ôàéë
Call SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, ByVal "windows")

End Sub

Private Sub GetDriverAndPort(ByVal Buffer As String, _
        DriverName As String, PrinterPort As String)

Dim posDriver As Long
Dim posPort As Long
DriverName = ""
PrinterPort = ""

'Èìÿ äðàéâåðà èäåò âíà÷àëå ñòðîêè
posDriver = InStr(Buffer, ",")

If posDriver > 0 Then
    'Ïîëó÷åíèå èìåíè äðàéâåðà
    DriverName = Left(Buffer, posDriver - 1)
    'Èìÿ ïîðòà èäåò ïîñëå çàïÿòîé
    posPort = InStr(posDriver + 1, Buffer, ",")
   
    If posPort > 0 Then
        'Ïîëó÷åíèå èìåíè ïîðòà
        PrinterPort = Mid(Buffer, posDriver + 1, _
                posPort - posDriver - 1)
    End If
End If
   
End Sub

'Ñîçäàåì listbox èç äàííûõ win.ini
Public Function ProfileLoadWinIniList(lst As ListBox, _
        lpSectionName As String) As Long

Dim success As Long
Dim nsize As Long
Dim lpKeyName As String
Dim ret As String

ret = Space$(8102)
nsize = Len(ret)
success = GetProfileString(lpSectionName, vbNullString, _
        "", ret, nsize)

'Âîçðàùàåìàÿ ñòðîêà ÿâëÿåòñÿ ñïèñêîì, ðàçäåëåííûì
'íóëåâûìè ñèìâîëàìè
If success Then
 
    ret = Left$(ret, success)
    Do Until ret = ""
       lpKeyName = StripNulls(ret)
       lst.AddItem lpKeyName
    Loop

End If

'âåðíåì ÷èñëî ïðèíòåðîâ (êîë-âî ýëåìåíòîâ)
ProfileLoadWinIniList = lst.ListCount

End Function


Private Function StripNulls(startstr As String) As String

Dim pos As Long

pos = InStr(startstr$, Chr$(0))
 
If pos Then
    StripNulls = Mid$(startstr, 1, pos - 1)
    startstr = Mid$(startstr, pos + 1, Len(startstr))
End If

End Function


Public Function SetDefaultPrinterWinNT(printername As String) As String

Dim Buffer As String
Dim DeviceName As String
Dim DriverName As String
Dim PrinterPort As String
Dim r As Long
Dim ret As String, nsize As Long
ret = Space$(8102)
nsize = Len(ret)
Call GetProfileString("windows", "Device", "", ret, nsize)
ret = Mid(ret, 1, InStr(1, ret, Chr(0)) - 1)
       Buffer = Space(1024)
    'PrinterName = List1.Text
   
    Call GetProfileString("PrinterPorts", _
                           printername, "", _
                           Buffer, Len(Buffer))

        GetDriverAndPort Buffer, DriverName, PrinterPort
   
    If DriverName <> "" And PrinterPort <> "" Then
        SetDefaultPrinter printername, DriverName, PrinterPort
    End If
SetDefaultPrinterWinNT = ret
End Function



Вызов : old = SetDefaultPrinterWinNT("name-printer")

P.S. Сорри за абракадабру в комментариях. Скопировал напрямую из модуля. Может кто подскажет из-за чего это просходит??

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.05.2004 (Пт) 9:36

Вставляй из Word или Far (которые полноценно работают с Unicode) и будет тебе счастье
Lasciate ogni speranza, voi ch'entrate.

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 21.05.2004 (Пт) 15:25

диалоговое акно ShowPrinter при печати устанавливает выбранный принтер по умолчанию.

свойство кажется DefaultPrinter=True
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

Shurrik
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 110
Зарегистрирован: 20.05.2004 (Чт) 5:35
Откуда: Керчь, Крым

Сообщение Shurrik » 24.05.2004 (Пн) 10:45

Спасибо всем, кто попытался ответить на мой вопрос. У меня есть подпрограммка на 15 строк, которая устанавливает в системе принтер по умолчанию. Я хотел ее заменить одной АПИшной функцией.
Колесо: Хочешь жить? Умей вертеться.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 2

    TopList