|
|
Comments and Discussions
|
|
 |

|
In my multi part application I had problem of restoring hidden processes. After reading this article - not anymore . Now time to make good . My vote is 5. Thanks!
modified 11 May '12 - 13:29.
|
|
|
|

|
The code is fairly well commented and has many useful examples. I would, however, like to see more description in the article itself.
Just because the code works, it doesn't mean that it is good code.
|
|
|
|
|

|
This is a great article and project source code help me to achieve my project requiremt.
Thank you very much.
|
|
|
|

|
Any specific window gets hidden only problem is the current application window is shown else great work
|
|
|
|

|
This code is just what I needed and works just as advertised.. You saved me lots of time here.
|
|
|
|
|

|
The application sample is above excellent... superb.
|
|
|
|

|
Is this possible to read values in a list box on any window and save them in clipboard or file, by amending this code or some other?
|
|
|
|

|
These classes are really nicely designed. I do have a problem that I wonder if anyone else has experienced. When obtaining the module name of a given window, the function GetWindowModuleFileName() sometimes (rarely) insists on returning the wrong module name, in fact, for the given window that I'm interested in, it returns the file name of the application running in debug mode, where this new class is! I have tried running both with Visual Studio closed, with the same effect. Strange, right? or am I a dunce?
|
|
|
|

|
Hi,
I have tried but failed to do the following requirement. Any input from you folks will be helpful.
Requirement: there is a windows app1 in C++, i need to use .net create a console app (app2) that disables a button (b1) in app1 and adds another button (b2)to app1. The b2 button then does some verification from the form details in app1 and then enables b1.
Also I am not allowed to make any code changes in app1
my problems:
- how to disable a button of a different app.
- how to add a button to a different app.
- how to pass various textbox values from app1 to app2.
Regards,
Adi
|
|
|
|

|
Hey man, great work
I am running this piece of application flawlessly on vista.
i am trying to develop a virtual keyboard which has the same functionality as microsoft on screen keyboard. I am using
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
IntPtr test;
private void Button_MouseEnter(object sender, MouseEventArgs e)
{
test = GetForegroundWindow();
}
private void Button_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
SetForegroundWindow(test);
}
This works but my screen flashes for moments.
Is there some better method or other way so that I can click my virtual keyboard buttons without removing focus from other window which already has focus.
|
|
|
|

|
using System;
using System.Runtime.InteropServices;
namespace xxx.Common
{
public static class NativeMethods
{
[DllImport("user32.dll")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
public static void SetWindowVisibility(bool visible, string title)
{
if (string.IsNullOrEmpty(title))
throw new ArgumentNullException("title");
IntPtr hWnd = NativeMethods.FindWindow(null, title);
if (hWnd != IntPtr.Zero)
{
if (!visible)
NativeMethods.ShowWindow(hWnd, 0); else
NativeMethods.ShowWindow(hWnd, 1); }
}
}
}
|
|
|
|

|
First, sorry for my english, I lack practice!!
If you create a new Application in .NET with a simple Form (System.Windows.Forms.Form) containing a TabControl (System.Windows.Forms.TabControl) with 2 TabPage (System.Windows.Forms.TabPage) and some controls in both TabPage, and then you start this Application (which will display the first TabPage when the main form will be displayed) and then you Hide the Application with the Window Hider, the second TabPage will never show up its content once the Application is shown again. But if you show the second TabPage once before hiding it, this bug does not occur.
Therefore, every TabPage of a TabControl (.NET only) not shown before the parent Form is hidden by the Window Hider will be empty when the parent Form is shown again.
The solution is quite simple.
In the Window class, add the following const:
private const int SW_SHOW = 5;
Then, change the Visible property by the following one:
public bool Visible
{
get { return m_Visible; }
set
{
if (value == true)
{
if (ShowWindowAsync(m_hWnd, SW_SHOW))
m_Visible = true;
}
else if (value == false)
{
if (ShowWindowAsync(m_hWnd, SW_HIDE))
m_Visible = false;
}
}
}
I don't know why the original property preserved the window state (wasMax) because when you use the SW_SHOW value with ShowWindowAsync, the Form is shown with the same state it had before being hidden. So no need to use the SW_SHOWNORMAL, SW_SHOWMINIMIZED, SW_SHOWMAXIMIZED, SW_SHOWNOACTIVATE and SW_RESTORE values.
In the Activate method, change the following code:
if (IsIconic(m_hWnd))
{
ShowWindowAsync(m_hWnd,SW_RESTORE);
}
else
{
ShowWindowAsync(m_hWnd,SW_SHOWNORMAL);
}
By this simple line:
ShowWindowAsync(m_hWnd,SW_SHOW);
With this correction (for my needs), the Window Hider seems to work as it worked before without the bug I have mentioned earlier.
Thanks and have a nice day.
|
|
|
|

|
Please, I have some problem with this: (I will express by C# code, because my english is bad)
Process p = Process.GetProcessesByName("cmd")[0];
ShowWindowAsync(p.Handle, 0); // none action
When I write to while cycle:
while(true) // Console
{
Process p = Process.GetProcessesByName("cmd")[0];
ShowWindowAsync(p.Handle, 0); // sometimes action
}
If you don't have any ideas please try to write by alternative code or please some tutorial "How to get process/program handle".
Thanks
|
|
|
|

|
Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents=false;
proc.StartInfo.FileName=extern_app;
proc.StartInfo.Arguments = "" ;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.Start();
proc.WaitForExit();
|
|
|
|

|
Hi, great article. I just wonder if anybody knows if its posible to detect events when application starts or gains focus?
|
|
|
|

|
Maybe a silly question - but does this work in vista?
|
|
|
|

|
Hi there,
am I allowed to use your window class in another project which will be published under the GPL?
Thx in Advance
Steve
|
|
|
|

|
I've spent ages trying to resolve an issue where a different application was trying to call my application and my application was not getting focus. My application was just flashing on the taskbar and staying behind the calling application.
Your bit of code with GetForegroundWindow and AttachThreadInput saved the day - I was going to give up my job!!!
You're a star!
public static void BringFormToTop(IntPtr mainWindowHandle)
{
if (mainWindowHandle == GetForegroundWindow())
return;
// Identify the current input thread
IntPtr ThreadID1 = GetWindowThreadProcessId(GetForegroundWindow(),
IntPtr.Zero);
// Now identify this form's thread
IntPtr ThreadID2 = GetWindowThreadProcessId(mainWindowHandle, IntPtr.Zero);
// If threads don't match nick the input thread off the foreground thread
if (ThreadID1 != ThreadID2)
{
AttachThreadInput(ThreadID1, ThreadID2, 1);
SetForegroundWindow(mainWindowHandle);
AttachThreadInput(ThreadID1, ThreadID2, 0);
}
else
{
// Otherwise the current thread can just set the foreground window
SetForegroundWindow(mainWindowHandle);
}
//Bring application to the front - required otherwise switching between trades just flashes the screen
if (IsIconic(mainWindowHandle))
{
ShowWindowAsync(mainWindowHandle, SW_RESTORE);
}
IntPtr hwnd = GetForegroundWindow();
if (hwnd != mainWindowHandle)
{
SetForegroundWindow(mainWindowHandle);
}
SetActiveWindow(mainWindowHandle);
}
|
|
|
|

|
i have spend hours try to find a solution to bring an application up front. This code helped me a lot!
Petter N
|
|
|
|

|
Hello,
nice app. One note: If I launch an application which isn't displayed in taskbar then the program can't find it. Why?
Giorgi
|
|
|
|

|
hahahaha! flippin' brilliant!
AW
C# or D flat?
|
|
|
|

|
wow this is a great little app it works flawlessly.
My dilema is I have an app that on Button1 starts another app that I need hidden I have tried every method and then tried this and it hides the app I need hidden.
So my question is how can I make it so the app that Button1 starts stays hidden?
I appreciate any help,
Thank you
Here is what I have and I have tried everey thing to no avail.
Process myProcess = new Process();
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myProcess.StartInfo.FileName = "foo.exe";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
myProcess.StartInfo.FileName = "c:/program files/MyHiddenapp/foo.exe";
myProcess.Start();
myProcess.WaitForExit();
|
|
|
|

|
Nice code.
I took your Window and Windows classes and used them in my app, but found a bug.
I tried to use your Windows class in an inner loop, I was doing
foreach(Process p in processes)
{
foreach(Window w in windows)
{
...
}
}
but that doesn't work. The inner loop only executes for the first process then dries up and stops iterating the windows collection.
I tracked it down to:
//implement IEnumerator
public bool MoveNext()
{
m_Position++;
if (m_Position < wndArray.Count)
{
return true;
}
else
{
return false;
}
}
which should read:
//implement IEnumerator
public bool MoveNext()
{
m_Position++;
if (m_Position < wndArray.Count)
{
return true;
}
else
{
m_Position = -1;
return false;
}
}
or maybe you need to reset the position each time you give out an enumerator.
Cheers,
Paul
|
|
|
|

|
I'm assuming you chose ShowWindowAsynce() over just ShowWindow() because it's on a new thread and would be faster. If this is so, does the preformance difference really justify the choice.
I have never seen ShowWindowAsync() until your article and it sounds intersting.
I developed a similar application to hide Windows Media Player in the taskbar, but I used ShowWindow().
/\ |_ E X E GG
|
|
|
|

|
The code is wonderfull. Basically i want the window not to be seen on the task bar but i want it to be on the bar where volume control and other application icons are there.
Can i achieve this?
|
|
|
|

|
Whether it is possible to hide the application only from task bar?..Because in our project we are planning to hide the applications from task bar. If possible let me know.
Thanks
Rajendran Thiagarajan
|
|
|
|

|
Is there anyway to implement the same without using WIN32 API?
|
|
|
|

|
This looks cool and I want to try it but I have no .net yet, so before I have to part with my cash can anyone answer this question (please) or questions:
1. if I start a c# windows form/program and then spawn another process (ie an .exe program) which brings up another window can I control the coordinates of the new formed window. For example, I create an application that brings up a mostly transparent window and then I start another a windows exe program, can I then position the new window that I have started in any way? Ideally I want to place my semitransparent window exactly above the newly started application. Is this possible in c# or maybe even in java?
2. is there any way to try .net Visual Studio before you buy it?
Any kind advice would be cool.
sincerely
k gibson
k gibson
|
|
|
|

|
Your code just saved me oogles of hours trying to figure out the C# implementation for restoring another application's window.
Thanks!
Marc
|
|
|
|

|
Great code examples of using Win32Api from C#. Thanks.
-Ryan
|
|
|
|
 |
|
|
General News Suggestion Question Bug Answer Joke Rant Admin
|
A Window Hider program that demonstrates many C# features
| Type | Article |
| Licence | CPOL |
| First Posted | 15 May 2002 |
| Views | 231,365 |
| Downloads | 5,282 |
| Bookmarked | 145 times |
|
|