AJUDA COM ARRAY
Fala pessoal tudo bem ?
Na realidade eu vou converter o meu código para VBSCRIPT mas estou me perdendo na lógico.
Seguinte eu vou listar todas as impressoras existem no meu servidor de impressão, depois de listar vou criar uma lista o problema é que eu não consigo pensar como faria para criar essa lista exemplo:
Ao listar as impressoras pensei em ordena-las com um número (numero referente ao array) e dai quando o usuário digitar o numero eu busco no Array a impressora referente.
Assim:
Menu
1 - Impressora 1
2 - Impressora 2
Ao digitar o 1 eu sei que é referente a impressora 1 pois ela está no array, a minha dúvida é a seguinte, como eu faça para criar o array sem saber a quantidade de linhas.
Pensei em fazer com array para minimizar o código pois assim ficaria de uma forma automatica,
Dificl explicar vou tentar colocar os códigos para exemplificar.
[ô]LISTA IMPRESSORAS
strComputer = [Ô]SERVIDOR2[Ô]
Set objWMIService = GetObject([Ô]winmgmts:[Ô] & [Ô]{impersonationLevel=impersonate}!\\[Ô] & strComputer & [Ô]oot\cimv2[Ô])
Set colPrintQueues = objWMIService.ExecQuery ([Ô]Select * from Win32_PerfFormattedData_Spooler_PrintQueue Where [Ô] & [Ô]Name <> [ô]_Total[ô][Ô])
For Each objPrintQueue in colPrintQueues
Wscript.Echo objPrintQueue.Name
Next
Aqui em pensei em criar uma array gravando o numero e a impressora ( 1 - IMPRESSORA A).
Quando o usuário digitar o numero 1 eu vou no array e sei que é a impressora A.
[ô]ARRAY
Dim result
Set result = CreateObject([Ô]scripting.dictionary[Ô])
result([Ô]1[Ô]) = [Ô]A[Ô]
result([Ô]2[Ô]) = [Ô]B[Ô]
result([Ô]3[Ô]) = [Ô]C[Ô]
result([Ô]4[Ô]) = [Ô]D[Ô]
wscript.echo (result([Ô]1[Ô]))
Aqui eu sei que ao passar o parametro [Ô]1[Ô] ele vai retornar A.
Em resumo minha dúvida é como transformar a lista de impressora (Wscript.Echo objPrintQueue.Name) em um array.
Na realidade eu vou converter o meu código para VBSCRIPT mas estou me perdendo na lógico.
Seguinte eu vou listar todas as impressoras existem no meu servidor de impressão, depois de listar vou criar uma lista o problema é que eu não consigo pensar como faria para criar essa lista exemplo:
Ao listar as impressoras pensei em ordena-las com um número (numero referente ao array) e dai quando o usuário digitar o numero eu busco no Array a impressora referente.
Assim:
Menu
1 - Impressora 1
2 - Impressora 2
Ao digitar o 1 eu sei que é referente a impressora 1 pois ela está no array, a minha dúvida é a seguinte, como eu faça para criar o array sem saber a quantidade de linhas.
Pensei em fazer com array para minimizar o código pois assim ficaria de uma forma automatica,
Dificl explicar vou tentar colocar os códigos para exemplificar.
[ô]LISTA IMPRESSORAS
strComputer = [Ô]SERVIDOR2[Ô]
Set objWMIService = GetObject([Ô]winmgmts:[Ô] & [Ô]{impersonationLevel=impersonate}!\\[Ô] & strComputer & [Ô]oot\cimv2[Ô])
Set colPrintQueues = objWMIService.ExecQuery ([Ô]Select * from Win32_PerfFormattedData_Spooler_PrintQueue Where [Ô] & [Ô]Name <> [ô]_Total[ô][Ô])
For Each objPrintQueue in colPrintQueues
Wscript.Echo objPrintQueue.Name
Next
Aqui em pensei em criar uma array gravando o numero e a impressora ( 1 - IMPRESSORA A).
Quando o usuário digitar o numero 1 eu vou no array e sei que é a impressora A.
[ô]ARRAY
Dim result
Set result = CreateObject([Ô]scripting.dictionary[Ô])
result([Ô]1[Ô]) = [Ô]A[Ô]
result([Ô]2[Ô]) = [Ô]B[Ô]
result([Ô]3[Ô]) = [Ô]C[Ô]
result([Ô]4[Ô]) = [Ô]D[Ô]
wscript.echo (result([Ô]1[Ô]))
Aqui eu sei que ao passar o parametro [Ô]1[Ô] ele vai retornar A.
Em resumo minha dúvida é como transformar a lista de impressora (Wscript.Echo objPrintQueue.Name) em um array.
segue um exemplo de acesso.
strComputer = [Ô]localhost[Ô]
Set objWMIService = GetObject([Ô]winmgmts:[Ô] & [Ô]{impersonationLevel=impersonate}!\\[Ô] & strComputer & [Ô]oot\cimv2[Ô])
Set colPrintQueues = objWMIService.ExecQuery ([Ô]Select * from Win32_PerfFormattedData_Spooler_PrintQueue Where [Ô] & [Ô]Name <> [ô]_Total[ô][Ô])
Dim c
Dim result
c = 1
Set result = CreateObject([Ô]scripting.dictionary[Ô])
For Each objPrintQueue in colPrintQueues
[ô]Wscript.Echo objPrintQueue.Name
result.Add c , objPrintQueue.Name
c = c + 1
Next
[ô]ARRAY
For Each r in result
Wscript.Echo result.Item(r)
Next
[ô]result([Ô]1[Ô]) = [Ô]A[Ô]
[ô]result([Ô]2[Ô]) = [Ô]B[Ô]
[ô]result([Ô]3[Ô]) = [Ô]C[Ô]
[ô]result([Ô]4[Ô]) = [Ô]D[Ô]
wscript.echo (result(1))
strComputer = [Ô]localhost[Ô]
Set objWMIService = GetObject([Ô]winmgmts:[Ô] & [Ô]{impersonationLevel=impersonate}!\\[Ô] & strComputer & [Ô]oot\cimv2[Ô])
Set colPrintQueues = objWMIService.ExecQuery ([Ô]Select * from Win32_PerfFormattedData_Spooler_PrintQueue Where [Ô] & [Ô]Name <> [ô]_Total[ô][Ô])
Dim c
Dim result
c = 1
Set result = CreateObject([Ô]scripting.dictionary[Ô])
For Each objPrintQueue in colPrintQueues
[ô]Wscript.Echo objPrintQueue.Name
result.Add c , objPrintQueue.Name
c = c + 1
Next
[ô]ARRAY
For Each r in result
Wscript.Echo result.Item(r)
Next
[ô]result([Ô]1[Ô]) = [Ô]A[Ô]
[ô]result([Ô]2[Ô]) = [Ô]B[Ô]
[ô]result([Ô]3[Ô]) = [Ô]C[Ô]
[ô]result([Ô]4[Ô]) = [Ô]D[Ô]
wscript.echo (result(1))
Obrigado pela ajuda, acabei ajustando meu código e consegui fazer porém me deparei com uma situação que não sei o porque não está funcionando.
O código lista as impressoras inumera as mesmas porém quando eu informo a opção da impressora ele retorna um valor em branco.
Exemplo:
1 - IMPRESSORA A
2 - IMPRESSORA B
Quando eu informo 1 ele mostrar o valor A, mas quando eu informo qualquer outro numero ele mostrar o valor como branco, tem alguma ideia ?
Abaixo código:
Dim strComputer,intCont,result,Printer,teste
strComputer = [Ô]SERVIDOR2[Ô]
Set objWMIService = GetObject([Ô]winmgmts:[Ô] & [Ô]{impersonationLevel=impersonate}!\\[Ô] & strComputer & [Ô]oot\cimv2[Ô])
Set colPrintQueues = objWMIService.ExecQuery ([Ô]Select * from Win32_PerfFormattedData_Spooler_PrintQueue Where [Ô] & [Ô]Name <> [ô]_Total[ô][Ô])
Set result = CreateObject([Ô]scripting.dictionary[Ô])
[ô]CONTADOR
intCount=[Ô]1[Ô]
For Each objPrintQueue in colPrintQueues
if strImpressoras = [Ô][Ô] then
strImpressoras= intCount & [Ô] - [Ô] & ucase(objPrintQueue.Name)
call fncGravaArray(intCount,ucase(objPrintQueue.Name))
[ô]result(intCount) = ucase(objPrintQueue.Name)
else
strImpressoras= strImpressoras & vbCrlf & intCount & [Ô] - [Ô] & ucase(objPrintQueue.Name)
[ô]result(intCount) = ucase(objPrintQueue.Name)
call fncGravaArray(intCount,ucase(objPrintQueue.Name))
End if
intCount=intCount+1
Next
Printer = InputBox([Ô]Selecione uma impressora:[Ô] & vbCrlf & vbCrlf & strImpressoras & vbCrlf, [Ô]Digite um numero[Ô],[Ô][Ô])
call fncLeArray(Printer)
[ô]GRAVA VALORES NO ARRAY
Private function fncGravaArray (intOpcao,intValor)
wscript.echo intOpcao
wscript.echo & intValor
result(intOpcao) = intValor
End function
[ô]LE ARRAY
Private function fncLeArray(intOpcao)
wscript.echo intOpcao
wscript.echo result(intOpcao)
End function
O código lista as impressoras inumera as mesmas porém quando eu informo a opção da impressora ele retorna um valor em branco.
Exemplo:
1 - IMPRESSORA A
2 - IMPRESSORA B
Quando eu informo 1 ele mostrar o valor A, mas quando eu informo qualquer outro numero ele mostrar o valor como branco, tem alguma ideia ?
Abaixo código:
Dim strComputer,intCont,result,Printer,teste
strComputer = [Ô]SERVIDOR2[Ô]
Set objWMIService = GetObject([Ô]winmgmts:[Ô] & [Ô]{impersonationLevel=impersonate}!\\[Ô] & strComputer & [Ô]oot\cimv2[Ô])
Set colPrintQueues = objWMIService.ExecQuery ([Ô]Select * from Win32_PerfFormattedData_Spooler_PrintQueue Where [Ô] & [Ô]Name <> [ô]_Total[ô][Ô])
Set result = CreateObject([Ô]scripting.dictionary[Ô])
[ô]CONTADOR
intCount=[Ô]1[Ô]
For Each objPrintQueue in colPrintQueues
if strImpressoras = [Ô][Ô] then
strImpressoras= intCount & [Ô] - [Ô] & ucase(objPrintQueue.Name)
call fncGravaArray(intCount,ucase(objPrintQueue.Name))
[ô]result(intCount) = ucase(objPrintQueue.Name)
else
strImpressoras= strImpressoras & vbCrlf & intCount & [Ô] - [Ô] & ucase(objPrintQueue.Name)
[ô]result(intCount) = ucase(objPrintQueue.Name)
call fncGravaArray(intCount,ucase(objPrintQueue.Name))
End if
intCount=intCount+1
Next
Printer = InputBox([Ô]Selecione uma impressora:[Ô] & vbCrlf & vbCrlf & strImpressoras & vbCrlf, [Ô]Digite um numero[Ô],[Ô][Ô])
call fncLeArray(Printer)
[ô]GRAVA VALORES NO ARRAY
Private function fncGravaArray (intOpcao,intValor)
wscript.echo intOpcao
wscript.echo & intValor
result(intOpcao) = intValor
End function
[ô]LE ARRAY
Private function fncLeArray(intOpcao)
wscript.echo intOpcao
wscript.echo result(intOpcao)
End function
Resolvido mandei converte os valores para integer e string .
Dim strComputer,intCont,result,Printer
strComputer = [Ô]SERVIDOR2[Ô]
Set objWMIService = GetObject([Ô]winmgmts:[Ô] & [Ô]{impersonationLevel=impersonate}!\\[Ô] & strComputer & [Ô]oot\cimv2[Ô])
Set colPrintQueues = objWMIService.ExecQuery ([Ô]Select * from Win32_PerfFormattedData_Spooler_PrintQueue Where [Ô] & [Ô]Name <> [ô]_Total[ô][Ô])
Set result = CreateObject([Ô]scripting.dictionary[Ô])
[ô]CONTADOR
intCount=[Ô]1[Ô]
For Each objPrintQueue in colPrintQueues
if strImpressoras = [Ô][Ô] then
strImpressoras= intCount & [Ô] - [Ô] & ucase(objPrintQueue.Name)
call fncGravaArray(intCount,ucase(objPrintQueue.Name))
else
strImpressoras= strImpressoras & vbCrlf & intCount & [Ô] - [Ô] & ucase(objPrintQueue.Name)
call fncGravaArray(intCount,ucase(objPrintQueue.Name))
End if
intCount=intCount+1
Next
Printer = InputBox([Ô]Selecione uma impressora:[Ô] & vbCrlf & vbCrlf & strImpressoras & vbCrlf, [Ô]Digite um numero[Ô],[Ô][Ô])
call fncLeArray(Printer)
[ô]GRAVA VALORES NO ARRAY
Private function fncGravaArray (intOpcao,intValor)
result(CInt(intOpcao)) = CStr(intValor)
End function
[ô]LE ARRAY
Private function fncLeArray(intOpcao)
wscript.echo result(CInt(intOpcao))
End function
Dim strComputer,intCont,result,Printer
strComputer = [Ô]SERVIDOR2[Ô]
Set objWMIService = GetObject([Ô]winmgmts:[Ô] & [Ô]{impersonationLevel=impersonate}!\\[Ô] & strComputer & [Ô]oot\cimv2[Ô])
Set colPrintQueues = objWMIService.ExecQuery ([Ô]Select * from Win32_PerfFormattedData_Spooler_PrintQueue Where [Ô] & [Ô]Name <> [ô]_Total[ô][Ô])
Set result = CreateObject([Ô]scripting.dictionary[Ô])
[ô]CONTADOR
intCount=[Ô]1[Ô]
For Each objPrintQueue in colPrintQueues
if strImpressoras = [Ô][Ô] then
strImpressoras= intCount & [Ô] - [Ô] & ucase(objPrintQueue.Name)
call fncGravaArray(intCount,ucase(objPrintQueue.Name))
else
strImpressoras= strImpressoras & vbCrlf & intCount & [Ô] - [Ô] & ucase(objPrintQueue.Name)
call fncGravaArray(intCount,ucase(objPrintQueue.Name))
End if
intCount=intCount+1
Next
Printer = InputBox([Ô]Selecione uma impressora:[Ô] & vbCrlf & vbCrlf & strImpressoras & vbCrlf, [Ô]Digite um numero[Ô],[Ô][Ô])
call fncLeArray(Printer)
[ô]GRAVA VALORES NO ARRAY
Private function fncGravaArray (intOpcao,intValor)
result(CInt(intOpcao)) = CStr(intValor)
End function
[ô]LE ARRAY
Private function fncLeArray(intOpcao)
wscript.echo result(CInt(intOpcao))
End function
Tópico encerrado , respostas não são mais permitidas