O arquivo abaixo possui a finalidade do código do post anterior, porém funciona no Windows. Interessante como o programa pode crescer! Este código foi capturado na internet e alterado e com ele foi possível fazer um novo formato de executável que funciona tanto em Linux quanto Windows. E, para isto, bastou um IF solicitando o tipo de sistema operacional para escolher qual dos dois algoritmos o sistema irá executar. Este programa executa comandos do Visual Basic dentro do Java. No próximo post vou demonstrar como transformar este arquivo em um executável oculto.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class JEjectDrive {
// Array contendo as letras das unidades de CD/DVD
private List<String> driver = new ArrayList<String>();
/**
*
*/
public JEjectDrive() {
this.getDriver();
}
/**
* Método utilizado para executar os scripts em VB.
*
* @param script
* Código em VB a ser executado.
* @return Retorna toda a saída da execução.
* @throws java.io.IOException
*/
private String executeVBScript(String script) {
String output = "";
String line = null;
try {
File f = File.createTempFile("tmp", ".vbs");
f.deleteOnExit();
FileWriter fw = new FileWriter(f);
fw.write(script);
fw.close();
Process p = Runtime.getRuntime().exec(
"cscript //NoLogo " + f.getPath());
BufferedReader input = new BufferedReader(new InputStreamReader(p
.getInputStream()));
while ((line = input.readLine()) != null) {
output += line;
}
input.close();
} catch (Exception ex) {
ex.printStackTrace();
}
return output;
}
/**
* Método para checar as unidades existentes.
*/
private void getDriver() {
StringBuilder sb = new StringBuilder();
sb.append("Const DriveTypeCDROM = 4\n");
sb
.append("Set oFSO = Wscript.CreateObject(\"Scripting.FileSystemObject\")\n");
sb.append("Set oDrives = oFSO.Drives\n");
sb.append("For Each Drive in oDrives\n");
sb
.append("If Drive.DriveType = DriveTypeCDROM Then Wscript.Echo Drive.DriveLetter End If\n");
sb.append("Next");
String dr = executeVBScript(sb.toString());
for (int i = 0; i < dr.length(); i++) {
driver.add(dr.substring(i, i + 1));
}
}
/**
* Método para abrir/fechar a bandeja do CD/DVD com opção do usuário
* fecha-lá.
*
* @param drv
* Letra da unidade para abrir.
* @param msg
* Mensagem perguntando se quer fechar.
* @param title
* Título da Mensagem.
*/
public void eject(String drv, String msg, String title) {
if (driver.contains(drv)) {
StringBuilder sb = new StringBuilder();
sb.append("Set oWMP = CreateObject(\"WMPlayer.OCX.7\")\n");
sb.append("Set oCD = oWMP.CdromCollection.getByDriveSpecifier(\"");
sb.append(drv);
sb.append(":\\\")\n");
sb.append("oCD.Eject\n");
if (msg != null && title != null) {
sb.append("If vbOK = MsgBox(\"");
sb.append(msg);
sb.append("\", vbOKCancel, \"");
sb.append(title);
sb.append("\") Then\noCD.Eject\nEnd If");
}
String dr = executeVBScript(sb.toString());
} else {
throw new IllegalArgumentException("Unidade " + drv
+ " não encontrada");
}
}
/**
* Método para abrir/fechar a bandeja do CD/DVD.
*
* @param drv
* Letra da unidade para abrir.
*/
public void eject(String drv) {
eject(drv, null, null);
}
/**
* Método para abrir todas as bandejas de CD/DVD
*/
public void ejectAll() {
StringBuilder sb = new StringBuilder();
sb.append("Set oWMP = CreateObject(\"WMPlayer.OCX.7\")\n");
sb.append("Set oDrv = oWMP.CdromCollection\n");
sb.append("If oDrv.Count >= 1 Then\n");
sb.append("For i = 0 To oDrv.Count - 1\n");
sb.append("oDrv.Item(i).Eject\n");
sb.append("Next\nEnd If");
String dr = executeVBScript(sb.toString());
}
/**
*
* @return Retorna as letras das unidades de CD/DVD
*/
public String[] getDrivers() {
return driver.toArray(new String[driver.size()]);
}
/**
*
* @param args
*/
public static void main(String[] args) {
JEjectDrive je = new JEjectDrive();
for (String drv : je.getDrivers()) {
System.out.println("Unidade encontrada: " + drv);
je.eject(drv, "Deseja fechar a gaveta?", "CD/DVD");
}
je.ejectAll();
}
}
CUIDADO: Não me responsabilizo pela forma como este post for utilizado. O arquivo de manipulação de drives é apenas uma amostra para níveis de conhecimento de segurança, e desenvolvimento com segurança, que todo Bacharel em Sistemas deve conhecer e compartilhar.
Nenhum comentário:
Postar um comentário