|
721
|
Programación / .NET (C#, VB.NET, ASP) / Sobre los Handles del SystemTray...
|
en: 9 Abril 2013, 19:48 pm
|
Este tema me lleva días matándome, he creado 5 posts sobre temas relacionados con los handles en StackOverFlow, porque no me aclaro nada con las funciones de la API (FindWindow, FindWindowEx, etc...). A ver, lo que necesito es, saber si una aplicación de terceros ha mostrado su icono en el systemtray, es decir, saber si "X" icono existe en el SysTray, ya séa buscando el icono por el handle del proceso, o por el nombre de la ventana, o como séa. Para esto, primero intento obtener el handle de la aplicación, y luego el handle de mi systray, pero hasta aquí, ya no sé como seguir ni que debo hacer. Imports System.Runtime.InteropServices Public Class Form1 Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Public Shared Function WindowHandle(sTitle As String) As Long Return FindWindow(vbNullString, sTitle) End Function Private Shared Function GetSystemTrayHandle() As IntPtr Dim hWndTray As IntPtr = FindWindow("Shell_TrayWnd", Nothing) If hWndTray <> IntPtr.Zero Then hWndTray = FindWindowEx(hWndTray, IntPtr.Zero, "TrayNotifyWnd", Nothing) If hWndTray <> IntPtr.Zero Then hWndTray = FindWindowEx(hWndTray, IntPtr.Zero, "SysPager", Nothing) If hWndTray <> IntPtr.Zero Then hWndTray = FindWindowEx(hWndTray, IntPtr.Zero, "ToolbarWindow32", Nothing) Return hWndTray End If End If End If Return IntPtr.Zero End Function Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click MsgBox(WindowHandle("Steam")) ' 6687230 MsgBox(GetSystemTrayHandle()) ' 65728 End Sub End Class
|
|
|
723
|
Programación / .NET (C#, VB.NET, ASP) / [SOURCE] MouseLock (GUI version)
|
en: 5 Abril 2013, 23:41 pm
|
· Imágenes: · Descripción:Esta es la versión gráfica de mi aplicación "MouseLock", una utilidad que bloquea el puntero del mouse restringiéndolo a la posición del centro de la pantalla (primária). La utilidad principal de esta aplicación es para usarla en los juegos que no disponen de dicha funcionalidad (Por si no lo saben, los juegos bien desarrollados bloquean el mouse al centro de la pantalla, un ejemplo es el "Resident Evil 6"), Un ejemplo de dichos juegos que no bloquean el mouse es el nuevo "TombRaider 2013", aunque mayormente suelen ser juegos antiguos. - ¿Porque bloquear el mouse?Para que el mouse no interfiera en programas de terceros mientras estamos jugando, por ejemplo en programas que se activan al pasar el puntero del ratón por los bordes o los corners de la pantalla. Aunque seguro que alguien le encontrará otro uso aparte de ese, ya que le añadí alguna otra opción personalizable... espero que os guste. · Modo de empleo:Es muy fácil de usar, sólamente hay que elegir entre 3 tipos de bloqueo y configurar las opciones como deseen, la aplicación avisa de cualquier cosa en el área de notificación. Las opciones se guardan en un archivo INI, este archivo se puede configurar como quieran por si deseean portabilizarlo de alguna manera con sus juegos portables (por ejemplo)... Delay=3 Interval=10 LockType=3 Time=17:00 APPS=example1.exe;example2.exe IfAPPNotRunning=2 UseToggleKey=True SpecialKey=NONE NormalKey=F1 SysTray=True RememberSettings=True · Descarga:http://ElektroStudios.tk/MouseLock.rarEnlace actualizado (12/07/2014): http://www.mediafire.com/download/m8cbrop98k4payw/MouseLock_GUI.rarHagan el favor de reportar bugs (si hubiera). PD: Aquí tienen la versión CLI: http://foro.elhacker.net/net/source_mouselock-t387116.0.html* NOTA: La versión de consola sólamente dispone de las funcionalidades básicas de la versión gráfica (-sleep, -interval y -Key). Saludos!
|
|
|
724
|
Programación / .NET (C#, VB.NET, ASP) / [SOURCE] MouseLock CLI
|
en: 3 Abril 2013, 18:38 pm
|
Esta es una aplicación que bloquea el puntero del mouse restringiéndolo a la posición del centro de la pantalla (primária) mientras X aplicación se está ejecutando. Tiene opciones para ajustar: -El tiempo de retardo para iniciar el bloqueo (Por defecto 3 segundos) -El tiempo de intervalo para volver a bloquear el puntero (Por defecto 10 ms) -Definir una tecla global especial para Activar/desactivar el bloqueo (por defecto NINGUNA) La utilidad principal de esta aplicación es para usarla en los juegos que no disponen de dicha funcionalidad (Por si no lo saben, los juegos bien desarrollados bloquean el mouse al centro de la pantalla, un ejemplo es el "Resident Evil 6"), Un ejemplo de dichos juegos que no bloquean el mouse es el nuevo "TombRaider 2013", aunque mayormente suelen ser juegos antiguos. - ¿Porque bloquear el mouse?Para que el mouse no interfiera en programas de terceros mientras estamos jugando, por ejemplo en programas que se activan al pasar el puntero del ratón por los bordes o los corners de la pantalla. Aunque seguro que alguien le encontrará otro uso aparte de ese, espero que os guste. Sintaxis: Y esto es un ejemplo de como usarlo en un Bat que puede estar dentro por ejemplo de un AutoExtraible de WinRAR (Un juego portable): REM Lanzamos el juego, importante ejecutarlo en segundo plano con el parámetro "/B" para no detener el script. Start /B """" "MiJuego.exe" REM Lanzamos MouseLock Start /W MouseLock.exe MiJuego.exe -K CTRL+C :: Al apretar Control+C dentro del juego, se desactivará el bloqueo hasta que volvamos a presionar dicha combinación de teclas... REM PD : Para terminar la ejecución de MouseLock hay que cerrar el juego o cerrar la consola. REM PD2: También se pueden usar comillas dobles para encerrar cualquier argumento del programa.
Descarga: http://ElektroStudios.tk/MouseLock.rarEnlace actualizado (12/07/2014): http://www.mediafire.com/download/blcg8rarfc0b58w/MouseLock_CLI.rarUn saludo!
|
|
|
725
|
Programación / .NET (C#, VB.NET, ASP) / [Solucionado] Aplicación de Consola con Timer no funciona
|
en: 3 Abril 2013, 13:33 pm
|
Este programa lo hice en un WinForm y funcionaba bien, pero luego decidí que me iba a ser más útil por consola así que modifiqué el tipo de proyecto a "consola", añadí un módulo, eliminé el formulario, pegué el código modificando el Timer para que funcionase y añadíendo el sub main... Creo que no me ha faltado nada por añadir o modificar, pero el timer no me funciona, es decir, el sub que asocio al evento Elapsed no funciona ' Lock Tick Public Sub Lock_Ticks() Console.WriteLine("test") 'If Running Then Cursor.Position = New Point(Screen_Center_X, Screen_Center_Y) End Sub
(No escribe ninguna línea.) En el form uso dos timers, y en cambio el otro timer ("Executable timer") si que me funciona perféctamente... Este es el test del segundo timer (el que funciona): Y este el del que no funciona (no bloquea el mouse, el evento Elapsed de ese timer no se ejecuta): Me he asegurado de que el intervalo del primer timer es correcto, y en fin no sé que puede estar pasando... Y como ya digo, si todo esto lo paso a un WinForm, vuelve a funcionar de forma correcta, no lo entiendo!.
Este es el proyecto completo, lo pueden probar: Module Module1 #Region " Vars " Dim Running As Boolean = False Dim Errors As Boolean = False Dim Executable_Name As String = Nothing Dim Toogle_Key As System.Windows.Forms.Keys = Nothing Dim WithEvents Toogle_Key_Global As Shortcut = Nothing Dim Executable_Timer As New System.Timers.Timer Dim Lock_Timer As New System.Timers.Timer Dim Lock_Interval As Int32 = 10 Dim Lock_Sleep As Int32 = Get_Milliseconds(3) Dim Screen_Center_X As Int16 = (Screen.PrimaryScreen.Bounds.Width / 2) Dim Screen_Center_Y As Int16 = (Screen.PrimaryScreen.Bounds.Height / 2) #End Region ' Load Sub main() Pass_Args() Sleep() Lock() End Sub ' Help Private Sub Help() Console.WriteLine( _ "[+] Syntax:" & vbNewLine & _ vbNewLine & _ " MouseLock {Executable Name}" & vbNewLine & _ vbNewLine & _ vbNewLine & _ "[+] Syntax (using optional features):" & vbNewLine & _ vbNewLine & _ " MouseLock {Executable Name} -S {Seconds} -I {Milliseconds} -K {Key}" & vbNewLine & _ vbNewLine & _ vbNewLine & _ "[+] Options:" & vbNewLine & _ vbNewLine & _ " -S (or) -Sleep" & vbNewLine & _ " The time to wait until MouseLock will be activated." & vbNewLine & _ " * Default is ""3000""" & vbNewLine & _ vbNewLine & _ " -I (or) -Interval" & vbNewLine & _ " The time between the mouse locks" & vbNewLine & _ " * Default is ""10"", maybe want to use bigger numbers in slower PC's." & vbNewLine & _ vbNewLine & _ " -K (or) -Key" & vbNewLine & _ " The key for toogle between Enabled/Disabled while MouseLock is running." & vbNewLine & _ " * Valid keys: A-Z, 0-9 (Numpad) and F0-F12." & vbNewLine & _ " * All valid keys can be combined with ALT, CTRL or SHIFT." & vbNewLine & _ vbNewLine & _ vbNewLine & _ "[+] Examples:" & vbNewLine & _ vbNewLine & _ " MouseLock Game.exe" & vbNewLine & _ " MouseLock Game.exe -S 5" & vbNewLine & _ " MouseLock Game.exe -I 250" & vbNewLine & _ " MouseLock Game.exe -K F10" & vbNewLine & _ " MouseLock Game.exe -Sleep 10 -Interval 500 -Key ALT+Z") End Sub ' Pass arguments Private Sub Pass_Args() ' Empty? If My.Application.CommandLineArgs.Count = 0 Then Errors = True Help() End End If ' Executable Name If Not My.Application.CommandLineArgs.Item(0).ToLower.EndsWith(".exe") Then Console.WriteLine("Bad executable name: " & My.Application.CommandLineArgs.Item(0)) Errors = True Else Executable_Name = My.Application.CommandLineArgs.Item(0).Substring(0, My.Application.CommandLineArgs.Item(0).Length - 4) End If For I As Integer = 0 To My.Application.CommandLineArgs.Count - 1 ' Sleep If My.Application.CommandLineArgs.Item(I).ToLower = "-s" Or My.Application.CommandLineArgs.Item(I).ToLower = "-sleep" Then Try : Lock_Sleep = Get_Milliseconds(My.Application.CommandLineArgs.Item(I + 1)) Catch Console.WriteLine("Bad argument for -Sleep") Errors = True End Try End If ' Interval If My.Application.CommandLineArgs.Item(I).ToLower = "-i" Or My.Application.CommandLineArgs.Item(I).ToLower = "-interval" Then Try : Lock_Interval = My.Application.CommandLineArgs.Item(I + 1) Catch Console.WriteLine("Bad argument for -Interval") Errors = True End Try End If ' Key If My.Application.CommandLineArgs.Item(I).ToLower = "-k" Or My.Application.CommandLineArgs.Item(I).ToLower = "-key" Then Try If My.Application.CommandLineArgs.Item(I + 1).ToLower.StartsWith("alt+") Then Toogle_Key = [Enum].Parse(GetType(System.Windows.Forms.Keys), My.Application.CommandLineArgs.Item(I + 1).ToLower.Replace("alt+", ""), True) Toogle_Key_Global = Shortcut.Create(Shortcut.Modifier.Alt, Toogle_Key) ElseIf My.Application.CommandLineArgs.Item(I + 1).ToLower.StartsWith("ctrl+") Then Toogle_Key = [Enum].Parse(GetType(System.Windows.Forms.Keys), My.Application.CommandLineArgs.Item(I + 1).ToLower.Replace("ctrl+", ""), True) Toogle_Key_Global = Shortcut.Create(Shortcut.Modifier.Ctrl, Toogle_Key) ElseIf My.Application.CommandLineArgs.Item(I + 1).ToLower.StartsWith("shift+") Then Toogle_Key = [Enum].Parse(GetType(System.Windows.Forms.Keys), My.Application.CommandLineArgs.Item(I + 1).ToLower.Replace("shift+", ""), True) Toogle_Key_Global = Shortcut.Create(Shortcut.Modifier.Shift, Toogle_Key) Else Toogle_Key = [Enum].Parse(GetType(System.Windows.Forms.Keys), My.Application.CommandLineArgs.Item(I + 1), True) Toogle_Key_Global = Shortcut.Create(Shortcut.Modifier.None, Toogle_Key) End If Catch Console.WriteLine("Bad argument for -Key") Errors = True End Try End If Next If Errors Then End End Sub ' Sleep Private Sub Sleep() Console.WriteLine("Sleeping for " & (Lock_Sleep \ 1000) & " seconds before start locking the mouse...") Dim x As Integer = 0 While Not x = (Lock_Sleep \ 1000) Threading.Thread.Sleep(1000) x += 1 End While End Sub ' Lock Private Sub Lock() If Process_Is_Running(Executable_Name) Then AddHandler Lock_Timer.Elapsed, AddressOf Lock_Ticks AddHandler Executable_Timer.Elapsed, AddressOf Executable_Tick Lock_Timer.Interval = Lock_Interval 'Lock_Timer.Interval = 100 Lock_Timer.Start() Executable_Timer.Start() Running = True Else Terminate() End If End Sub ' Lock Tick Public Sub Lock_Ticks() Console.WriteLine("test - funciona el lock timer?") If Running Then Cursor.Position = New Point(Screen_Center_X, Screen_Center_Y) End Sub ' Executable Tick Private Sub Executable_Tick() Console.WriteLine("test - funciona el executable timer?") If Not Process_Is_Running(Executable_Name) Then Terminate() End Sub ' Esta parte no es necesaria para testear ' Toogle Key 'Private Sub Toogle_Key_Global_Press(ByVal s As Object, ByVal e As Shortcut.HotKeyEventArgs) Handles Toogle_Key_Global.Press ' Select Case Running ' Case False ' Running = True ' Lock_Timer.Start() ' Case True ' Running = False ' End Select 'End Sub ' Get Milliseconds Private Function Get_Milliseconds(ByVal Seconds As Int32) As Int32 Dim Time_Span As New TimeSpan(TimeSpan.TicksPerSecond * Seconds) Return Time_Span.TotalMilliseconds End Function ' Process Is Running Public Function Process_Is_Running(ByVal Process_Name As String) As Boolean Dim myProcess As Process() = Process.GetProcessesByName(Process_Name) If Not myProcess.Length = 0 Then Return True Else Return False End Function ' Terminate Private Sub Terminate() Console.WriteLine("Application """ & Executable_Name & ".exe"" is not Running.") Console.WriteLine("MouseLock finished.") Application.Exit() End Sub End Module
|
|
|
726
|
Programación / .NET (C#, VB.NET, ASP) / [SOURCE] Volium
|
en: 24 Marzo 2013, 18:10 pm
|
Esto es una aplicación para disminuir/aumentar el volumen del PC hasta determinado punto, en un determinado tiempo. La idea la tomé de esta aplicación: http://regravity.com/2012/08/software-volumeout-1-0/ la cual denota por su caréncia de funcionalidades, información, o algún diseño, así que decidí hacer mi própia utilidad. El diseño de mi APP no es perfecta, se puede y debo mejorar mucho el diseño, pero espero que os parezca una aplicación útil. - Imágenes:
- ¿Que usos se le puede dar a la aplicación?
· La idea de utilidad principal es para las personas que de vez en cuando nos gusta irnos a dormir con los Auriculares/TV u otro dispositivo encendido, con volium podrás reducir el volumen del dispositivo conectado progresívamente...
· Sistema anti-ladrones, por ejemplo, puedes irte de viaje y dejar Volium activado en tu casa/chalet para que crean que el recinto está habitado.
· Seguro que a los productores musicales o gente que trabaje con Audio se le ocurre alguna otra utilidad original.
- La aplicación dispone de 3 opciones extra:
· Lock system volume Mientras la opción esté activada, previene que el volumen maestro del SO séa modificado por el usuario tanto antes como despues del Fading.
· Minimize to systemtray Para minimizar la APP a la bandeja dle sistema
· Remember settings Para recordar la configuración actual de las opciones
- SOURCE:
http://elektrostudios.tk/Volium.zip
Enlace actualizado el 13/08/2014: http://www.mediafire.com/download/qz525i562fvopyg/Volium.rar
|
|
|
727
|
Programación / Programación General / Intercambiar canales estéreo de los Headphones?
|
en: 24 Marzo 2013, 02:48 am
|
Hola Necesito intercambiar los canales estéreo (En Windows), es decir, que lo que se escuche por el canal izquierdo se escuche por el derecho, y viceversa, lo mismo que se consigue poniéndose unos auriculares al revés. No me importaría hacerlo en el lenguaje que séa necesario, porque no he encontrado absolutamente nada en Google sobre el tema así que si hace falta aprenderé lo básico de dicho lenguaje, pero empiezo a pensar que esto de intercambiar los canales no es algo posible... sáquenme de dudas porfavor. Yo sé utilizar la API de CoreAudioAPI para manejar el balance de cada canal, pero esto no es lo que necesito porque quiero cambiar el canal izquierdo por el derecho, es decir, quiero togglearlos, no andar ajustando el balance de cada canal... PD: También he mirado la API de DirectX y Directsound, y la interface MCI, no me ha parecido encontrar nada que se le asimile. Todo esto lo necesito para hacer una simple aplicación CLI con el único propósito de togglear los canales, tán "sencillo" como eso . Gracias por leer.
|
|
|
728
|
Programación / Programación General / [SOLUCIONADO] Un ToolTip me está dando por...
|
en: 24 Marzo 2013, 00:55 am
|
Perdón, quería postear en .NET y me equivoqué, ¿Me lo mueven ?, sorry
Bueno pues en este sub manejo un numericupdown y un combobox Lo que intento es, que al escribir un número mayor de "X" en el numericupdown, mostrar una pequeña alerta para indicar que no se puede aumentar el valor. El problema es que, después de alertar una primera vez, el tooltip sigue mostrando las alertas aunque la condición no se cumpla: El code: ' NumericUpDown Time / ComboBox Time Measure Private Sub ComboBox_Measure_SelectedIndexChanged(sender As Object, e As EventArgs) Handles _ ComboBox_Measure.SelectedIndexChanged, _ NumericUpDown_Time.ValueChanged Select Case ComboBox_Measure.SelectedIndex Case 0 ' Seconds Time_Out = (Convert_Time(NumericUpDown_Time.Value, S, MS)) Time_Measure = S Case 1 ' Minutes If NumericUpDown_Time.Value >= 35793 Then NumericUpDown_Time.Value = 35792 : GoTo ToolTip Time_Out = (Convert_Time(NumericUpDown_Time.Value, M, MS)) Time_Measure = M Case 2 ' Hours If NumericUpDown_Time.Value >= 597 Then NumericUpDown_Time.Value = 596 : GoTo ToolTip Time_Out = (Convert_Time(NumericUpDown_Time.Value, H, MS)) Time_Measure = H Case 3 ' Days If NumericUpDown_Time.Value >= 25 Then NumericUpDown_Time.Value = 24 : GoTo ToolTip Time_Out = (Convert_Time(NumericUpDown_Time.Value, H, MS)) * 24 Time_Measure = H Case 4 ' Weeks If NumericUpDown_Time.Value >= 4 Then NumericUpDown_Time.Value = 3 : GoTo ToolTip Time_Out = (Convert_Time(NumericUpDown_Time.Value, H, MS)) * 168 Time_Measure = H End Select Exit Sub ToolTip: 'ToolTip1.Active = True 'ToolTip1.SetToolTip(Me.NumericUpDown_Time, "Max value") ToolTip1.Show("Max value", Me.NumericUpDown_Time, 1500) 'ToolTip1.Hide(Me.NumericUpDown_Time) 'ToolTip1.Active = False End Sub
|
|
|
729
|
Programación / .NET (C#, VB.NET, ASP) / [SOLUCIONADO] TimeSpan o Timer?
|
en: 22 Marzo 2013, 19:50 pm
|
Hola
En una aplicación quiero calcular y mostrar el tiempo transcurrido y el tiempo restante, uso TimeSpan para calcular las dos cosas, pero creo que me está dando varios errores graves... Me parece que las mediciones con TimeSpan a la larga tienen como...retrasos extraños.
Me gustaría saber que me aconsejais vosotros, los expertos, para hacer este tipo de mediciones, si el método Substract de TimeSpan o un simple Timer y sus Ticks (Lo segundo no lo he probado todavía para medir el tiempo transcurrido, por eso pregunto).
He leido que con un StopWatch también se puede, pero no he sabido utilizarlo para lo que necesito.
Un saludo!
|
|
|
730
|
Foros Generales / Dudas Generales / No puedo leer correos desde la página de Hotmail o.O
|
en: 19 Marzo 2013, 20:48 pm
|
Bueno pues llevo 2 o 3 días así (y me parece que no soy el único): ¿Le pasa algo al servicio de Microsoft?, me parece algo fuera de lo normal porque he testeado desde Firefox, desde chrome, con una limpieza prévia de cookies porsupuesto, en mi Windows, y en VirtualBox, no me deja pinchar en ningún correo de entrada! y necesito leer un correo importante pero ahora mismo no se me ocurre ningún soft con el que poder leer los correos de Hotmail, ¿Alguna sugerencia?.
|
|
|
|
|
|
|