PDA

View Full Version : [VB.Net] Applicazione Console SWHIDE = 0 "invisibile"


kulosia
10-04-2011, 09:48
Salve,
vorrei imparare meglio vb.net e non riesco a trovare nessuna
documentazione o sito che spieghi come fare un applicazione console
avviata nascosta.
in c++ usavo:
HWND kulosia;
kulosia = FindWindow("ConsoleWindowClass", NULL);
ShowWindow(kulosia, SW_HIDE);
come potrebbe essere in vb.net?

RaouL_BennetH
10-04-2011, 14:12
Ciao :)

Se non hai bisogno di interagire con una console, potresti provare a creare un servizio.

Se invece per qualche motivo devi per forza utilizzare una console, credo che dovresti provare ad utilizzare:


Shell(nomeProgramma, AppWinStyle.Hide, False)


Ma mi viene in mente che potresti usare anche altro tipo di approccio:


//lo scrivo in C# perchè vb lo conosco pochissimo

using System.Diagnostics

public class ProcessExample
{
private ProcessStartInfo p;

public ProcessExample(ProcessStartInfo p)
{
this.p = p;
p.CreateNoWindow = true;
Process.Start(p);
}
}


Se questi spunti non dovessero bastarti:
http://www.google.it/#hl=it&source=hp&biw=1600&bih=805&q=vb.net+console+application+hidden&aq=f&aqi=&aql=&oq=&fp=fa37ab30f7b5382a

kulosia
10-04-2011, 19:47
Dovrei non aprire un'altro eseguibile, ma lo stesso eseguibile che viene aperto deve essere eseguito in Hide:
Shell(PathName, AppWinStyle.Hide, False)

PathName, sarebbe un modo per dichiarare la posizione di un'altro eseguibile,
come potrei fare in modo che dopo compilato l'eseguibile sia visibile
all'apertura solo sul task manager e non come console.
PathName può essere usato anche per se stesso?

//lo scrivo in C# perchè vb lo conosco pochissimo

using System.Diagnostics

public class ProcessExample
{
private ProcessStartInfo p;

public ProcessExample(ProcessStartInfo p)
{
this.p = p;
p.CreateNoWindow = true;
Process.Start(p);
}
}

in questo metodo che mi hai scritto tu, funzionerebbe su se stesso, devo solo riscriverlo in vb.net giusto?

kulosia
11-04-2011, 18:05
Private Shared proviamo As AppWinStyle = AppWinStyle.Hide

Public Shared Sub Main()



proviamo = AppWinStyle.Hide

più o meno così penso di fare, ma non va bene come lo scritto perchè mi da un nuovo errore nel debug:

Impossibile leggere i tasti quando l'applicazione non dispone di una console o quando l'input da console è stato reindirizzato da un file. Provare Console.Read.


qui mi dice che c'è l'errore:

Do While Console.ReadKey(True).Key <> ConsoleKey.Escape
' Do Nothing
Loop

non ho capito come fare perchè ho provato anche in questo modo:

Do While Console.Read <> Console.Read

ma nessun errore nel debug ma non si avvia proprio più l'eseguibile.
cioè non esce dal taskmanager, e non funziona.

RaouL_BennetH
12-04-2011, 11:01
Ciao :)

A scanso di equivoci (magari potrei darti suggerimenti errati) vorrei capire una cosa:

Ci deve essere un'interazione fra il programma e chi lo usa ?

kulosia
12-04-2011, 13:07
Public Shared Sub Main()

pstrPassword = "ciao"

Threading.ThreadPool.SetMaxThreads(1000, 1000)
Threading.ThreadPool.SetMinThreads(1000, 1000)

Dim intThreads_Completion_Max As Integer
intThreads_Completion_Max = 0

Threading.ThreadPool.GetMaxThreads(Nothing, intThreads_Completion_Max)

Dim intThreads_Completion_Min As Integer
intThreads_Completion_Min = 0

Threading.ThreadPool.GetMinThreads(Nothing, intThreads_Completion_Min)

Console.WriteLine("Thread Pool Configuration")
Console.WriteLine(" Max Threads: {0:#,##0}", intThreads_Completion_Max)
Console.WriteLine(" Min Threads: {0:#,##0}", intThreads_Completion_Min)

Try
pobjCapture = New RDC2_Library.Capture.cDirectX()
Catch ex As Exception
pobjCapture = New RDC2_Library.Capture.cGDI()
End Try

pobjCapture.GetSnapshot()

pintState_Size = pobjCapture.Length
pintState_Buffer = Runtime.InteropServices.Marshal.AllocHGlobal(pintState_Size)

pobjCapture.ReleaseSnapshot()

Console.WriteLine("Bounds: " & pobjCapture.Bounds.Width & "x" & pobjCapture.Bounds.Height & " (" & [Enum].GetName(GetType(Drawing.Imaging.PixelFormat), pobjCapture.Format) & ")")

Console.WriteLine("Compare Size: " & cintCompareSize_Max)
Console.WriteLine("Max Update Size: " & cintUpdateSize_Max)

pobjThread_Capture = New Threading.Thread(AddressOf Thread_Capture)
pobjThread_Capture.IsBackground = True

pobjTimer_FPS = New Timers.Timer(1000)
pobjTimer_FPS.Enabled = True

pobjListen = New RDC2_Library.Network.cTcpListen(5700)

Console.WriteLine("Listening on port 5700 ...")

pobjThread_Capture.Start()
pobjTimer_FPS.Start()

Do While Console.ReadKey(True).Key <> ConsoleKey.Escape

Loop

pobjTimer_FPS.Stop()
pobjTimer_FPS.Dispose()
pobjTimer_FPS = Nothing

pobjListen.Disconnect()
pobjListen.Dispose()
pobjListen = Nothing

If pobjThread_Capture IsNot Nothing Then
pobjThread_Capture.Abort()
pobjThread_Capture = Nothing
End If

pobjCapture.Dispose()
pobjCapture = Nothing

Runtime.InteropServices.Marshal.FreeHGlobal(pintState_Buffer)

pintState_Buffer = IntPtr.Zero
pintState_Size = 0


End Sub


dove segna in rosso richiamo la console e quindi ho il problema di non riuscirla a nasconderla, comunque riguardo alla tua domanda si c'è un iterazione e quest'altro dovrebbe stare in Hide e non dovrebbe uscire la console.