View Full Version : [VB.Net] Applicazione Console SWHIDE = 0 "invisibile"
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
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?
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 ?
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.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.